Ticket #799: patch_backtowork.5.diff
File patch_backtowork.5.diff, 6.8 KB (added by , 11 years ago) |
---|
-
binaries/data/mods/public/gui/session/input.js
1869 1869 Engine.CameraMoveTo(focusTarget.x, focusTarget.z); 1870 1870 1871 1871 break; 1872 case "back-to-work": 1873 backToWork(); 1874 break; 1872 1875 default: 1873 1876 break; 1874 1877 } … … 2131 2134 Engine.PostNetworkCommand({"type": "unload-all", "garrisonHolders": garrisonHolders}); 2132 2135 } 2133 2136 2137 function backToWork() 2138 { 2139 // Filter out all entities that can't go back to work. 2140 var workers = g_Selection.toList().filter(function(e) { 2141 var state = GetEntityState(e); 2142 if (state && state.unitAI && state.unitAI.lastWorkOrder) 2143 return true; 2144 return false; 2145 }); 2146 2147 Engine.PostNetworkCommand({"type": "back-to-work", "workers": workers}); 2148 2149 } 2150 2134 2151 function clearSelection() 2135 2152 { 2136 2153 if(inputState==INPUT_BUILDING_PLACEMENT || inputState==INPUT_BUILDING_WALL_PATHING) -
binaries/data/mods/public/gui/session/utility_functions.js
293 293 "icon": "focus-rally.png" 294 294 }); 295 295 } 296 297 if (entState.unitAI && entState.unitAI.lastWorkOrder) 298 { 299 commands.push({ 300 "name": "back-to-work", 301 "tooltip": "Back to Work", 302 "icon": "production.png" 303 }); 304 } 296 305 297 306 return commands; 298 307 } -
binaries/data/mods/public/simulation/components/GuiInterface.js
348 348 ret.unitAI = { 349 349 "state": cmpUnitAI.GetCurrentState(), 350 350 "orders": cmpUnitAI.GetOrders(), 351 "lastWorkOrder": cmpUnitAI.GetLastWorkOrder(), 351 352 }; 352 353 // Add some information needed for ungarrisoning 353 354 if (cmpUnitAI.isGarrisoned && ret.player !== undefined) -
binaries/data/mods/public/simulation/components/Promotion.js
78 78 cmpPromotedUnitAI.Cheer(); 79 79 var orders = cmpCurrentUnitAI.GetOrders(); 80 80 cmpPromotedUnitAI.AddOrders(orders); 81 var lastWorkOrder = cmpCurrentUnitAI.GetLastWorkOrder(); 82 cmpPromotedUnitAI.SetLastWorkOrder(lastWorkOrder); 81 83 82 84 Engine.BroadcastMessage(MT_EntityRenamed, { entity: this.entity, newentity: promotedUnitEntity }); 83 85 -
binaries/data/mods/public/simulation/components/UnitAI.js
2525 2525 this.isIdle = false; 2526 2526 this.lastFormationName = ""; 2527 2527 this.finishedOrder = false; // used to find if all formation members finished the order 2528 2529 // To go back to work later 2530 this.lastWorkOrder = undefined; 2528 2531 2529 2532 // For preventing increased action rate due to Stop orders or target death. 2530 2533 this.lastAttacked = undefined; … … 2801 2804 Engine.PostMessage(this.entity, MT_UnitAIStateChanged, { "to": state }); 2802 2805 }; 2803 2806 2807 UnitAI.prototype.BackToWork = function() 2808 { 2809 if(this.lastWorkOrder) 2810 { 2811 this.ReplaceOrder(this.lastWorkOrder.type, this.lastWorkOrder.data); 2812 return true; 2813 } 2814 else 2815 return false; 2816 }; 2817 2804 2818 /** 2805 2819 * Call when the current order has been completed (or failed). 2806 2820 * Removes the current order from the queue, and processes the … … 2817 2831 error("FinishOrder called for entity " + this.entity + " (" + template + ") when order queue is empty\n" + stack); 2818 2832 } 2819 2833 2820 this.orderQueue.shift(); 2834 // Remove the order from the queue, then forget it if it was a work to avoid trying to go back to it later. 2835 var finishedOrder = this.orderQueue.shift(); 2836 if(finishedOrder.type == "Gather" || finishedOrder.type == "Trade" || finishedOrder.type == "Repair") 2837 this.lastWorkOrder = undefined; 2838 2821 2839 this.order = this.orderQueue[0]; 2840 // If the worker was returning a resource, we shall 2841 // -> (if the worker is gathering) keep remembering the "Gather" order which is this.order 2842 // -> (if the worker was directly ordered to return a resource) forget the "ReturnResource" order which is finished 2843 if(finishedOrder.type == "ReturnResource" && (!this.order || this.order.type != "Gather")) 2844 this.lastWorkOrder = undefined; 2822 2845 2823 2846 if (this.orderQueue.length) 2824 2847 { … … 2869 2892 { 2870 2893 var order = { "type": type, "data": data }; 2871 2894 this.orderQueue.push(order); 2895 2896 if(type == "Gather" || type == "Trade" || type == "Repair" || type == "ReturnResource") 2897 this.lastWorkOrder = order; 2872 2898 2873 2899 // If we didn't already have an order, then process this new one 2874 2900 if (this.orderQueue.length == 1) … … 2972 2998 return orders; 2973 2999 }; 2974 3000 3001 UnitAI.prototype.GetLastWorkOrder = function() 3002 { 3003 return this.lastWorkOrder; 3004 }; 3005 3006 UnitAI.prototype.SetLastWorkOrder = function(order) 3007 { 3008 this.lastWorkOrder = order; 3009 }; 3010 2975 3011 UnitAI.prototype.TimerHandler = function(data, lateness) 2976 3012 { 2977 3013 // Reset the timer -
binaries/data/mods/public/simulation/helpers/Commands.js
390 390 notifyUnloadFailure(player, garrisonHolder) 391 391 } 392 392 break; 393 394 case "back-to-work": 395 var entities = FilterEntityList(cmd.workers, player, controlAllUnits); 396 for each (var worker in entities) 397 { 398 var cmpUnitAI = Engine.QueryInterface(worker, IID_UnitAI); 399 if (!cmpUnitAI || !cmpUnitAI.BackToWork()) 400 notifyBackToWorkFailure(player, worker) 401 } 402 break; 393 403 394 404 case "formation": 395 405 GetFormationUnitAIs(entities, player, cmd.name).forEach(function(cmpUnitAI) { … … 518 528 } 519 529 520 530 /** 531 * Sends a GUI notification about worker(s) that failed to go back to work. 532 */ 533 function notifyBackToWorkFailure(player, worker) 534 { 535 var cmpPlayer = QueryPlayerIDInterface(player, IID_Player); 536 var notification = {"player": cmpPlayer.GetPlayerID(), "message": "Some unit(s) can't go back to work" }; 537 var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); 538 cmpGUIInterface.PushNotification(notification); 539 } 540 541 /** 521 542 * Get some information about the formations used by entities. 522 543 * The entities must have a UnitAI component. 523 544 */