diff --git a/client/plugins/controltips/index.js b/client/plugins/controltips/index.js index 2153ddef..a3092be0 100644 --- a/client/plugins/controltips/index.js +++ b/client/plugins/controltips/index.js @@ -273,6 +273,11 @@ _ControlTipsPlugin_element = new WeakMap(), _ControlTipsPlugin_app = new WeakMap "showIfUnitSelected": true, "minSelectedUnits": 2 }, + { + "key": `[Num 1-9]`, + "action": "Add to hotgroup", + "showIfUnitSelected": true + }, { "key": "CTRL", "action": " ... more", @@ -292,6 +297,16 @@ _ControlTipsPlugin_element = new WeakMap(), _ControlTipsPlugin_app = new WeakMap "showIfUnitSelected": true, "minSelectedUnits": 2, "unitsMustBeControlled": true + }, { + "key": `[Num 1-9]`, + "action": "Add hotgroup to selection", + "callback": (tip) => { + return (Object.values(__classPrivateFieldGet(this, _ControlTipsPlugin_app, "f").getUnitsManager().getUnits()).some((unit) => { + return unit.getHotgroup(); + })); + }, + "showIfUnitSelected": true, + "minSelectedUnits": 1 } ] } @@ -351,6 +366,9 @@ _ControlTipsPlugin_element = new WeakMap(), _ControlTipsPlugin_app = new WeakMap if (!tipsIncludesActiveMouseover && typeof tip.mouseoverSelector === "string") { return false; } + if (typeof tip.callback === "function" && !tip.callback(tip)) { + return false; + } element.innerHTML += `
${tip.key}${tip.action}
`; }); }; diff --git a/client/plugins/controltips/src/controltipsplugin.ts b/client/plugins/controltips/src/controltipsplugin.ts index b50a1ee2..511f89bf 100644 --- a/client/plugins/controltips/src/controltipsplugin.ts +++ b/client/plugins/controltips/src/controltipsplugin.ts @@ -1,4 +1,6 @@ import { OlympusPlugin } from "interfaces"; +import { OlympusApp } from "olympusapp"; +import { Unit } from "unit/unit"; const SHOW_CONTROL_TIPS = "Show control tips" @@ -279,6 +281,11 @@ export class ControlTipsPlugin implements OlympusPlugin { "showIfUnitSelected": true, "minSelectedUnits": 2 }, + { + "key": `[Num 1-9]`, + "action": "Add to hotgroup", + "showIfUnitSelected": true + }, { "key": "CTRL", "action": " ... more", @@ -298,6 +305,16 @@ export class ControlTipsPlugin implements OlympusPlugin { "showIfUnitSelected": true, "minSelectedUnits": 2, "unitsMustBeControlled": true + }, { + "key": `[Num 1-9]`, + "action": "Add hotgroup to selection", + "callback": ( tip:object ) => { + return (Object.values( this.#app.getUnitsManager().getUnits() ).some( ( unit:Unit ) => { + return unit.getAlive() && unit.getControlled() && unit.getHotgroup(); + })); + }, + "showIfUnitSelected": true, + "minSelectedUnits": 1 } ] } @@ -375,6 +392,10 @@ export class ControlTipsPlugin implements OlympusPlugin { return false; } + if ( typeof tip.callback === "function" && !tip.callback( tip ) ) { + return false; + } + element.innerHTML += `
${tip.key}${tip.action}
`; }); diff --git a/client/src/olympusapp.ts b/client/src/olympusapp.ts index 551b6363..2d9b7be7 100644 --- a/client/src/olympusapp.ts +++ b/client/src/olympusapp.ts @@ -343,13 +343,13 @@ export class OlympusApp { "altKey": false, "callback": (ev: KeyboardEvent) => { if (ev.ctrlKey && ev.shiftKey) - this.getUnitsManager().selectedUnitsAddToHotgroup(parseInt(ev.code.substring(5))); + this.getUnitsManager().selectUnitsByHotgroup(parseInt(ev.code.substring(5)), false); // "Select hotgroup X in addition to any units already selected" else if (ev.ctrlKey && !ev.shiftKey) - this.getUnitsManager().selectedUnitsSetHotgroup(parseInt(ev.code.substring(5))); + this.getUnitsManager().selectedUnitsSetHotgroup(parseInt(ev.code.substring(5))); // "These selected units are hotgroup X (forget any previous membership)" else if (!ev.ctrlKey && ev.shiftKey) - this.getUnitsManager().selectUnitsByHotgroup(parseInt(ev.code.substring(5)), false); + this.getUnitsManager().selectedUnitsAddToHotgroup(parseInt(ev.code.substring(5))); // "Add (append) these units to hotgroup X (in addition to any existing members)" else - this.getUnitsManager().selectUnitsByHotgroup(parseInt(ev.code.substring(5))); + this.getUnitsManager().selectUnitsByHotgroup(parseInt(ev.code.substring(5))); // "Select hotgroup X, deselect any units not in it." }, "code": code }); diff --git a/client/src/panels/hotgrouppanel.ts b/client/src/panels/hotgrouppanel.ts index 007e5b92..ef9d2e5f 100644 --- a/client/src/panels/hotgrouppanel.ts +++ b/client/src/panels/hotgrouppanel.ts @@ -42,8 +42,8 @@ export class HotgroupPanel extends Panel { this.getElement().appendChild(el); - el.addEventListener("click", () => { - getApp().getUnitsManager().selectUnitsByHotgroup(hotgroup); + el.addEventListener("click", ( ev:MouseEvent ) => { + getApp().getUnitsManager().selectUnitsByHotgroup(hotgroup, (!ev.ctrlKey)); }); el.addEventListener("mouseover", () => {