diff --git a/client/plugins/controltips/index.js b/client/plugins/controltips/index.js index 37ad45af..6874f995 100644 --- a/client/plugins/controltips/index.js +++ b/client/plugins/controltips/index.js @@ -11,7 +11,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; -var _ControlTipsPlugin_instances, _ControlTipsPlugin_element, _ControlTipsPlugin_app, _ControlTipsPlugin_shortcutManager, _ControlTipsPlugin_cursorIsHoveringOverUnit, _ControlTipsPlugin_cursorIsHoveringOverAirbase, _ControlTipsPlugin_updateTips; +var _ControlTipsPlugin_instances, _ControlTipsPlugin_element, _ControlTipsPlugin_app, _ControlTipsPlugin_shortcutManager, _ControlTipsPlugin_cursorIsHoveringOverUnit, _ControlTipsPlugin_cursorIsHoveringOverAirbase, _ControlTipsPlugin_mouseoverElement, _ControlTipsPlugin_updateTips; Object.defineProperty(exports, "__esModule", { value: true }); exports.ControlTipsPlugin = void 0; const SHOW_CONTROL_TIPS = "Show control tips"; @@ -23,6 +23,7 @@ class ControlTipsPlugin { _ControlTipsPlugin_shortcutManager.set(this, void 0); _ControlTipsPlugin_cursorIsHoveringOverUnit.set(this, false); _ControlTipsPlugin_cursorIsHoveringOverAirbase.set(this, false); + _ControlTipsPlugin_mouseoverElement.set(this, void 0); __classPrivateFieldSet(this, _ControlTipsPlugin_element, document.createElement("div"), "f"); __classPrivateFieldGet(this, _ControlTipsPlugin_element, "f").id = "control-tips-panel"; document.body.appendChild(__classPrivateFieldGet(this, _ControlTipsPlugin_element, "f")); @@ -64,6 +65,12 @@ class ControlTipsPlugin { document.addEventListener("mapVisibilityOptionsChanged", () => { this.toggle(!__classPrivateFieldGet(this, _ControlTipsPlugin_app, "f").getMap().getVisibilityOptions()[SHOW_CONTROL_TIPS]); }); + document.addEventListener("mouseover", (ev) => { + if (ev.target instanceof HTMLElement) { + __classPrivateFieldSet(this, _ControlTipsPlugin_mouseoverElement, ev.target, "f"); + } + __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); + }); __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); __classPrivateFieldGet(this, _ControlTipsPlugin_app, "f").getMap().addVisibilityOption(SHOW_CONTROL_TIPS, true); return true; @@ -76,7 +83,7 @@ class ControlTipsPlugin { } } exports.ControlTipsPlugin = ControlTipsPlugin; -_ControlTipsPlugin_element = new WeakMap(), _ControlTipsPlugin_app = new WeakMap(), _ControlTipsPlugin_shortcutManager = new WeakMap(), _ControlTipsPlugin_cursorIsHoveringOverUnit = new WeakMap(), _ControlTipsPlugin_cursorIsHoveringOverAirbase = new WeakMap(), _ControlTipsPlugin_instances = new WeakSet(), _ControlTipsPlugin_updateTips = function _ControlTipsPlugin_updateTips() { +_ControlTipsPlugin_element = new WeakMap(), _ControlTipsPlugin_app = new WeakMap(), _ControlTipsPlugin_shortcutManager = new WeakMap(), _ControlTipsPlugin_cursorIsHoveringOverUnit = new WeakMap(), _ControlTipsPlugin_cursorIsHoveringOverAirbase = new WeakMap(), _ControlTipsPlugin_mouseoverElement = new WeakMap(), _ControlTipsPlugin_instances = new WeakSet(), _ControlTipsPlugin_updateTips = function _ControlTipsPlugin_updateTips() { const combos = [ { "keys": [], @@ -163,6 +170,16 @@ _ControlTipsPlugin_element = new WeakMap(), _ControlTipsPlugin_app = new WeakMap "action": `Delete unit`, "showIfHoveringOverAirbase": false, "showIfUnitSelected": true + }, + { + "key": `mouse1`, + "action": "Toggle Blue/Red", + "mouseoverSelector": "#coalition-switch .ol-switch-fill" + }, + { + "key": `mouse2`, + "action": "Set Neutral", + "mouseoverSelector": "#coalition-switch .ol-switch-fill" } ] }, @@ -219,28 +236,48 @@ _ControlTipsPlugin_element = new WeakMap(), _ControlTipsPlugin_app = new WeakMap numSelectedUnits = selectedUnits.length; unitSelectionContainsControlled = selectedUnits.some((unit) => unit.getControlled()); } - currentCombo.tips.forEach((tip) => { + const tipsIncludesActiveMouseover = (currentCombo.tips.some((tip) => { + if (!tip.mouseoverSelector) { + return false; + } + if (__classPrivateFieldGet(this, _ControlTipsPlugin_mouseoverElement, "f") instanceof HTMLElement === false) { + return false; + } + if (!__classPrivateFieldGet(this, _ControlTipsPlugin_mouseoverElement, "f").matches(tip.mouseoverSelector)) { + return false; + } + return true; + })); + currentCombo.tips.filter((tip) => { if (numSelectedUnits > 0) { if (tip.showIfUnitSelected === false) { - return; + return false; } if (tip.unitsMustBeControlled === true && unitSelectionContainsControlled === false) { - return; + return false; } } if (numSelectedUnits === 0 && tip.showIfUnitSelected === true) { - return; + return false; } if (typeof tip.showIfHoveringOverAirbase === "boolean") { if (tip.showIfHoveringOverAirbase !== __classPrivateFieldGet(this, _ControlTipsPlugin_cursorIsHoveringOverAirbase, "f")) { - return; + return false; } } if (typeof tip.showIfHoveringOverUnit === "boolean") { if (tip.showIfHoveringOverUnit !== __classPrivateFieldGet(this, _ControlTipsPlugin_cursorIsHoveringOverUnit, "f")) { - return; + return false; } } + if (tipsIncludesActiveMouseover && typeof tip.mouseoverSelector !== "string" && !__classPrivateFieldGet(this, _ControlTipsPlugin_mouseoverElement, "f").matches(tip.mouseoverSelector)) { + return false; + } + if (!tipsIncludesActiveMouseover && typeof tip.mouseoverSelector === "string") { + return false; + } + return true; + }).forEach((tip) => { element.innerHTML += `
${tip.key}${tip.action}
`; }); }; @@ -248,9 +285,9 @@ _ControlTipsPlugin_element = new WeakMap(), _ControlTipsPlugin_app = new WeakMap },{}],2:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const controltips_1 = require("./controltips"); +const controltipsplugin_1 = require("./controltipsplugin"); globalThis.getOlympusPlugin = () => { - return new controltips_1.ControlTipsPlugin(); + return new controltipsplugin_1.ControlTipsPlugin(); }; -},{"./controltips":1}]},{},[2]); +},{"./controltipsplugin":1}]},{},[2]); diff --git a/client/plugins/controltips/src/controltipsplugin.ts b/client/plugins/controltips/src/controltipsplugin.ts index 2eeba8ff..1f6e7033 100644 --- a/client/plugins/controltips/src/controltipsplugin.ts +++ b/client/plugins/controltips/src/controltipsplugin.ts @@ -6,6 +6,7 @@ export class ControlTipsPlugin implements OlympusPlugin { #shortcutManager: any; #cursorIsHoveringOverUnit: boolean = false; #cursorIsHoveringOverAirbase: boolean = false; + #mouseoverElement!: HTMLElement; constructor() { this.#element = document.createElement("div"); @@ -55,13 +56,20 @@ export class ControlTipsPlugin implements OlympusPlugin { }); document.addEventListener("unitSelection", (ev: CustomEvent) => { - this.#updateTips() + this.#updateTips(); }); document.addEventListener("mapVisibilityOptionsChanged", () => { this.toggle( !this.#app.getMap().getVisibilityOptions()[SHOW_CONTROL_TIPS] ); }); + document.addEventListener( "mouseover", ( ev: MouseEvent ) => { + if ( ev.target instanceof HTMLElement ) { + this.#mouseoverElement = ev.target; + } + this.#updateTips(); + }); + this.#updateTips(); this.#app.getMap().addVisibilityOption(SHOW_CONTROL_TIPS, true); @@ -164,6 +172,16 @@ export class ControlTipsPlugin implements OlympusPlugin { "action": `Delete unit`, "showIfHoveringOverAirbase": false, "showIfUnitSelected": true + }, + { + "key": `mouse1`, + "action": "Toggle Blue/Red", + "mouseoverSelector": "#coalition-switch .ol-switch-fill" + }, + { + "key": `mouse2`, + "action": "Set Neutral", + "mouseoverSelector": "#coalition-switch .ol-switch-fill" } ] }, @@ -226,33 +244,60 @@ export class ControlTipsPlugin implements OlympusPlugin { unitSelectionContainsControlled = selectedUnits.some((unit: any) => unit.getControlled()); } - currentCombo.tips.forEach((tip: any) => { + const tipsIncludesActiveMouseover = ( currentCombo.tips.some( ( tip:any ) => { + if ( !tip.mouseoverSelector ) { + return false; + } + + if ( this.#mouseoverElement instanceof HTMLElement === false ) { + return false; + } + + if ( !this.#mouseoverElement.matches( tip.mouseoverSelector ) ) { + return false; + } + + return true; + })); + + currentCombo.tips.filter((tip: any) => { if (numSelectedUnits > 0) { if (tip.showIfUnitSelected === false) { - return; + return false; } if (tip.unitsMustBeControlled === true && unitSelectionContainsControlled === false) { - return; + return false; } } if (numSelectedUnits === 0 && tip.showIfUnitSelected === true) { - return; + return false; } if (typeof tip.showIfHoveringOverAirbase === "boolean") { if (tip.showIfHoveringOverAirbase !== this.#cursorIsHoveringOverAirbase) { - return; + return false; } } if (typeof tip.showIfHoveringOverUnit === "boolean") { if (tip.showIfHoveringOverUnit !== this.#cursorIsHoveringOverUnit) { - return; + return false; } } + if ( tipsIncludesActiveMouseover && typeof tip.mouseoverSelector !== "string" && !this.#mouseoverElement.matches( tip.mouseoverSelector ) ) { + return false; + } + + if ( !tipsIncludesActiveMouseover && typeof tip.mouseoverSelector === "string" ) { + return false; + } + + return true; + + }).forEach( (tip:any) => { element.innerHTML += `
${tip.key}${tip.action}
` }); }