Ticket #2206: correct_backtowork.3.diff

File correct_backtowork.3.diff, 6.7 KB (added by Itms, 11 years ago)
  • binaries/data/mods/public/gui/session/input.js

     
    21082108    // Filter out all entities that can't go back to work.
    21092109    var workers = g_Selection.toList().filter(function(e) {
    21102110        var state = GetEntityState(e);
    2111         return (state && state.unitAI && state.unitAI.lastWorkOrder);
     2111        return (state && state.unitAI && state.unitAI.hasWorkOrders);
    21122112    });
    21132113   
    21142114    Engine.PostNetworkCommand({"type": "back-to-work", "workers": workers});
  • binaries/data/mods/public/gui/session/utility_functions.js

     
    294294        });
    295295    }
    296296   
    297     if (entState.unitAI && entState.unitAI.lastWorkOrder)
     297    if (entState.unitAI && entState.unitAI.hasWorkOrders)
    298298    {
    299299        commands.push({
    300300            "name": "back-to-work",
  • binaries/data/mods/public/simulation/components/GuiInterface.js

     
    347347    {
    348348        ret.unitAI = {
    349349            "state": cmpUnitAI.GetCurrentState(),
    350             "orders": cmpUnitAI.GetOrders(),
    351             "lastWorkOrder": cmpUnitAI.GetLastWorkOrder(),
     350            "orders": cmpUnitAI.GetWorkOrders(),
     351            "hasWorkOrders": cmpUnitAI.HasWorkOrders(),
    352352        };
    353353        // Add some information needed for ungarrisoning
    354354        if (cmpUnitAI.isGarrisoned && ret.player !== undefined)
  • binaries/data/mods/public/simulation/components/Promotion.js

     
    7878    cmpPromotedUnitAI.Cheer();
    7979    var orders = cmpCurrentUnitAI.GetOrders();
    8080    cmpPromotedUnitAI.AddOrders(orders);
    81     var lastWorkOrder = cmpCurrentUnitAI.GetLastWorkOrder();
    82     cmpPromotedUnitAI.SetLastWorkOrder(lastWorkOrder);
     81    var workOrders = cmpCurrentUnitAI.GetWorkOrders();
     82    cmpPromotedUnitAI.SetWorkOrders(workOrders);
    8383
    8484    Engine.BroadcastMessage(MT_EntityRenamed, { entity: this.entity, newentity: promotedUnitEntity });
    8585
  • binaries/data/mods/public/simulation/components/UnitAI.js

     
    25262526    this.lastFormationName = "";
    25272527    this.finishedOrder = false; // used to find if all formation members finished the order
    25282528   
    2529     // To go back to work later
    2530     this.lastWorkOrder = undefined;
     2529    // Queue of remembered works
     2530    this.workOrders = [];
    25312531
    25322532    // For preventing increased action rate due to Stop orders or target death.
    25332533    this.lastAttacked = undefined;
     
    28042804    Engine.PostMessage(this.entity, MT_UnitAIStateChanged, { "to": state });
    28052805};
    28062806
    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 
    28182807/**
    28192808 * Call when the current order has been completed (or failed).
    28202809 * Removes the current order from the queue, and processes the
     
    28312820        error("FinishOrder called for entity " + this.entity + " (" + template + ") when order queue is empty\n" + stack);
    28322821    }
    28332822
    2834     // Remove the order from the queue, then forget it if it was a work to avoid trying to go back to it later.
     2823    // Remove the order from the queue
    28352824    var finishedOrder = this.orderQueue.shift();
    2836     if(finishedOrder.type == "Gather" || finishedOrder.type == "Trade" || finishedOrder.type == "Repair")
    2837         this.lastWorkOrder = undefined;
    2838    
    28392825    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;
    28452826
    28462827    if (this.orderQueue.length)
    28472828    {
     
    28922873{
    28932874    var order = { "type": type, "data": data };
    28942875    this.orderQueue.push(order);
    2895    
    2896     if(type == "Gather" || type == "Trade" || type == "Repair" || type == "ReturnResource")
    2897         this.lastWorkOrder = order;
    28982876
    28992877    // If we didn't already have an order, then process this new one
    29002878    if (this.orderQueue.length == 1)
     
    29522930
    29532931UnitAI.prototype.ReplaceOrder = function(type, data)
    29542932{
     2933    // Keep the previous orders if needed
     2934    if (data && data.force)
     2935    {
     2936        if (type == "Gather" || type == "Trade" || type == "Repair" || type == "ReturnResource")
     2937            this.workOrders = [];
     2938        else
     2939        {
     2940            var i0 = 0;
     2941            if (this.order && this.order.type == "Cheering")
     2942                i0 = 1;
     2943            for (var i = i0; i < this.orderQueue.length; ++i)
     2944            {
     2945                var ordertype = this.orderQueue[i].type;
     2946                if (ordertype == "Gather" || ordertype == "Trade" || ordertype == "Repair" || ordertype == "ReturnResource")
     2947                {
     2948                    this.workOrders = this.orderQueue.slice(i);
     2949                    break;
     2950                }
     2951            }
     2952        }
     2953    }
     2954
    29552955    // Special cases of orders that shouldn't be replaced:
    29562956    // 1. Cheering - we're invulnerable, add order after we finish
    29572957    // 2. Packing/unpacking - we're immobile, add order after we finish (unless it's cancel)
     
    29982998    return orders;
    29992999};
    30003000
    3001 UnitAI.prototype.GetLastWorkOrder = function()
     3001UnitAI.prototype.BackToWork = function()
    30023002{
    3003     return this.lastWorkOrder;
     3003    if(this.workOrders.length)
     3004    {
     3005        // Clear the order queue considering special orders not to avoid
     3006        if (this.order && this.order.type == "Cheering")
     3007        {
     3008            var cheeringOrder = this.orderQueue.shift();
     3009            this.orderQueue = [ cheeringOrder ];
     3010        }
     3011        else
     3012            this.orderQueue = [];
     3013       
     3014        this.AddOrders(this.workOrders);
     3015        this.workOrders = [];
     3016        return true;
     3017    }
     3018    else
     3019        return false;
    30043020};
    30053021
    3006 UnitAI.prototype.SetLastWorkOrder = function(order)
     3022UnitAI.prototype.HasWorkOrders = function()
    30073023{
    3008     this.lastWorkOrder = order;
     3024    return (this.workOrders.length > 0);
    30093025};
    30103026
     3027UnitAI.prototype.GetWorkOrders = function()
     3028{
     3029    return this.workOrders;
     3030};
     3031
     3032UnitAI.prototype.SetWorkOrders = function(orders)
     3033{
     3034    this.workOrders = orders;
     3035};
     3036
    30113037UnitAI.prototype.TimerHandler = function(data, lateness)
    30123038{
    30133039    // Reset the timer