Index: binaries/data/mods/public/gui/hotkeys/spec/ingame.json
===================================================================
--- binaries/data/mods/public/gui/hotkeys/spec/ingame.json
+++ binaries/data/mods/public/gui/hotkeys/spec/ingame.json
@@ -158,6 +158,14 @@
"session.queueunit.8": {
"name": "Queue 8th unit",
"desc": "Add eighth unit type to queue."
+ },
+ "session.queueunit.autoqueueon": {
+ "name": "Auto-Queue On",
+ "desc": "Turn on Auto-Queue for selected structures."
+ },
+ "session.queueunit.autoqueueoff": {
+ "name": "Auto-Queue Off",
+ "desc": "Turn off Auto-Queue for selected structures."
}
}
}
Index: binaries/data/mods/public/gui/session/hotkeys/training.xml
===================================================================
--- binaries/data/mods/public/gui/session/hotkeys/training.xml
+++ binaries/data/mods/public/gui/session/hotkeys/training.xml
@@ -34,4 +34,14 @@
+
+
+
+
+
+
Index: binaries/data/mods/public/gui/session/selection_panels_helpers.js
===================================================================
--- binaries/data/mods/public/gui/session/selection_panels_helpers.js
+++ binaries/data/mods/public/gui/session/selection_panels_helpers.js
@@ -546,3 +546,25 @@
})
});
}
+
+function turnAutoQueueOn()
+{
+ Engine.PostNetworkCommand({
+ "type": "autoqueue-on",
+ "entities": g_Selection.toList().filter(ent => {
+ let state = GetEntityState(ent);
+ return state && !!state.production.entities;
+ })
+ });
+}
+
+function turnAutoQueueOff()
+{
+ Engine.PostNetworkCommand({
+ "type": "autoqueue-off",
+ "entities": g_Selection.toList().filter(ent => {
+ let state = GetEntityState(ent);
+ return state && !!state.production.entities;
+ })
+ });
+}
Index: binaries/data/mods/public/gui/session/unit_actions.js
===================================================================
--- binaries/data/mods/public/gui/session/unit_actions.js
+++ binaries/data/mods/public/gui/session/unit_actions.js
@@ -1715,7 +1715,47 @@
// This command button is always disabled.
},
"allowedPlayers": ["Ally", "Observer"]
- }
+ },
+
+ "autoqueue-on": {
+ "getInfo": function(entStates)
+ {
+ if (entStates.every(entState => !entState.production || !entState.production.entities || entState.production.autoqueue))
+ return false;
+ return {
+ "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.queueunit.autoqueueon") +
+ translate("Turn on auto-queue for selected structures."),
+ "icon": "autoqueue-on.png",
+ "enabled": true
+ };
+ },
+ "execute": function(entStates)
+ {
+ if (entStates.length)
+ turnAutoQueueOn(entStates.map(entState => entState.id));
+ },
+ "allowedPlayers": ["Player"]
+ },
+
+ "autoqueue-off": {
+ "getInfo": function(entStates)
+ {
+ if (entStates.every(entState => !entState.production || !entState.production.entities || !entState.production.autoqueue))
+ return false;
+ return {
+ "tooltip": colorizeHotkey("%(hotkey)s" + " ", "session.queueunit.autoqueueoff") +
+ translate("Turn off auto-queue for selected structures."),
+ "icon": "autoqueue-off.png",
+ "enabled": true
+ };
+ },
+ "execute": function(entStates)
+ {
+ if (entStates.length)
+ turnAutoQueueOff(entStates.map(entState => entState.id));
+ },
+ "allowedPlayers": ["Player"]
+ },
};
function playerCheck(entState, targetState, validPlayers)
Index: binaries/data/mods/public/simulation/components/GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/GuiInterface.js
+++ binaries/data/mods/public/simulation/components/GuiInterface.js
@@ -337,12 +337,15 @@
let cmpProductionQueue = Engine.QueryInterface(ent, IID_ProductionQueue);
if (cmpProductionQueue)
+ {
ret.production = {
"entities": cmpProductionQueue.GetEntitiesList(),
"technologies": cmpProductionQueue.GetTechnologiesList(),
"techCostMultiplier": cmpProductionQueue.GetTechCostMultiplier(),
- "queue": cmpProductionQueue.GetQueue()
+ "queue": cmpProductionQueue.GetQueue(),
+ "autoqueue": cmpProductionQueue.GetEntitiesList() && cmpProductionQueue.IsAutoQueueOn()
};
+ }
let cmpTrader = Engine.QueryInterface(ent, IID_Trader);
if (cmpTrader)
Index: binaries/data/mods/public/simulation/components/ProductionQueue.js
===================================================================
--- binaries/data/mods/public/simulation/components/ProductionQueue.js
+++ binaries/data/mods/public/simulation/components/ProductionQueue.js
@@ -27,6 +27,11 @@
"" +
"" +
"" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
"" +
Resources.BuildSchema("nonNegativeDecimal", ["time"]) +
"";
@@ -63,6 +68,7 @@
// "timeTotal": 15000, // msecs
// "timeRemaining": 10000, // msecs
// }
+ this.autoqueue = this.template.AutoQueue == "true";
};
/*
@@ -73,6 +79,30 @@
return Array.from(this.entitiesMap.values());
};
+/*
+ * Get current Auto-Queue status.
+ */
+ProductionQueue.prototype.IsAutoQueueOn = function()
+{
+ return this.autoqueue;
+};
+
+/*
+ * Turn on Auto-Queue.
+ */
+ProductionQueue.prototype.TurnAutoQueueOn = function()
+{
+ this.autoqueue = true;
+};
+
+/*
+ * Turn off Auto-Queue.
+ */
+ProductionQueue.prototype.TurnAutoQueueOff = function()
+{
+ this.autoqueue = false;
+};
+
/**
* Calculate the new list of producible entities
* and update any entities currently being produced.
@@ -855,6 +885,8 @@
}
time -= item.timeRemaining;
+ if (item.unitTemplate && this.autoqueue)
+ this.AddItem(item.unitTemplate, "unit", item.count, item.metadata);
this.queue.shift();
Engine.PostMessage(this.entity, MT_ProductionQueueChanged, null);
}
Index: binaries/data/mods/public/simulation/helpers/Commands.js
===================================================================
--- binaries/data/mods/public/simulation/helpers/Commands.js
+++ binaries/data/mods/public/simulation/helpers/Commands.js
@@ -877,6 +877,27 @@
cmpResourceDropsite.SetSharing(cmd.shared);
}
},
+
+ "autoqueue-on": function(player, cmd, data)
+ {
+ for (let ent of data.entities)
+ {
+ let cmpProductionQueue = Engine.QueryInterface(ent, IID_ProductionQueue);
+ if (cmpProductionQueue)
+ cmpProductionQueue.TurnAutoQueueOn();
+ }
+ },
+
+ "autoqueue-off": function(player, cmd, data)
+ {
+ for (let ent of data.entities)
+ {
+ let cmpProductionQueue = Engine.QueryInterface(ent, IID_ProductionQueue);
+ if (cmpProductionQueue)
+ cmpProductionQueue.TurnAutoQueueOff();
+ }
+ },
+
};
/**