diff --git a/client/public/stylesheets/olympus.css b/client/public/stylesheets/olympus.css index 782d35e3..54127c02 100644 --- a/client/public/stylesheets/olympus.css +++ b/client/public/stylesheets/olympus.css @@ -691,6 +691,11 @@ nav.ol-panel> :last-child { width: 30px; } +#reaction-to-threat-buttons-container button:not(:first-child) svg { + width: 150%; + margin: -5px; +} + #unit-control-panel .ol-option-button button.selected { background-color: white; border-color: white; @@ -700,6 +705,28 @@ nav.ol-panel> :last-child { fill: var(--background-steel); } +#rapid-controls { + display: flex; + flex-direction: column; + row-gap: 5px; + position: absolute; + height: fit-content; + width: fit-content; + left: calc(100% + 10px); + top: 0px; +} + +#rapid-controls button { + padding: 4px; +} + +#rapid-controls svg { + height: 25px; + width: 25px; + fill: white; + stroke: white; +} + /****************************************************************************************/ #splash-screen { background-image: url("/resources/theme/images/splash/1.png"); @@ -959,6 +986,10 @@ nav.ol-panel> :last-child { font-size: 10px; } +#command-mode-toolbar { + min-width: fit-content ; +} + #command-mode-toolbar .ol-button { border: 1px solid white; } diff --git a/client/public/themes/olympus/images/icons/climb.svg b/client/public/themes/olympus/images/icons/climb.svg new file mode 100644 index 00000000..85299ba7 --- /dev/null +++ b/client/public/themes/olympus/images/icons/climb.svg @@ -0,0 +1,40 @@ + + + + + + + + diff --git a/client/public/themes/olympus/images/icons/descent.svg b/client/public/themes/olympus/images/icons/descent.svg new file mode 100644 index 00000000..67df6b2d --- /dev/null +++ b/client/public/themes/olympus/images/icons/descent.svg @@ -0,0 +1,40 @@ + + + + + + + + diff --git a/client/public/themes/olympus/images/icons/hand-solid.svg b/client/public/themes/olympus/images/icons/hand-solid.svg new file mode 100644 index 00000000..4a6ba3aa --- /dev/null +++ b/client/public/themes/olympus/images/icons/hand-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/public/themes/olympus/images/icons/speed-decrease.svg b/client/public/themes/olympus/images/icons/speed-decrease.svg new file mode 100644 index 00000000..94ba5dcc --- /dev/null +++ b/client/public/themes/olympus/images/icons/speed-decrease.svg @@ -0,0 +1,57 @@ + + + + + + + + + diff --git a/client/public/themes/olympus/images/icons/speed-increase.svg b/client/public/themes/olympus/images/icons/speed-increase.svg new file mode 100644 index 00000000..f6bc0bdc --- /dev/null +++ b/client/public/themes/olympus/images/icons/speed-increase.svg @@ -0,0 +1,56 @@ + + + + + + + + + diff --git a/client/resources/theme/images/icons/speed-increase.svg b/client/resources/theme/images/icons/speed-increase.svg new file mode 100644 index 00000000..e69de29b diff --git a/client/src/index.ts b/client/src/index.ts index fb53c5a5..8a86d75e 100644 --- a/client/src/index.ts +++ b/client/src/index.ts @@ -205,11 +205,13 @@ function setupEvents() { document.querySelectorAll("[inject-svg]").forEach((el: Element) => { var img = el as HTMLImageElement; - var isLoaded = img.complete && img.naturalHeight !== 0; + var isLoaded = img.complete; if (isLoaded) SVGInjector(img); else - img.onload = () => SVGInjector(img); + img.addEventListener("load", () => { + SVGInjector(img); + }); }) } diff --git a/client/src/panels/logpanel.ts b/client/src/panels/logpanel.ts index efa398c6..92fbb702 100644 --- a/client/src/panels/logpanel.ts +++ b/client/src/panels/logpanel.ts @@ -1,3 +1,4 @@ +import { getMouseInfoPanel } from ".."; import { Panel } from "./panel"; export class LogPanel extends Panel { @@ -23,8 +24,21 @@ export class LogPanel extends Panel { if (scrollEl) { scrollEl.addEventListener("scroll", () => { this.#scrolledDown = Math.abs(scrollEl.scrollHeight - scrollEl.scrollTop - scrollEl.clientHeight) < 1 - }) + }); } + + window.addEventListener("resize", () => { + this.#calculateHeight(); + }); + + + const mouseInfoPanel = getMouseInfoPanel(); + new ResizeObserver(() => this.#calculateHeight()).observe(mouseInfoPanel.getElement()) + } + + show() { + super.show(); + this.#calculateHeight(); } appendLogs(logs: {[key: string]: string}) { @@ -68,4 +82,9 @@ export class LogPanel extends Panel { scrollEl.scrollTop = scrollEl.scrollHeight - scrollEl.clientHeight; } } + + #calculateHeight() { + const mouseInfoPanel = getMouseInfoPanel(); + this.getElement().style.height = `${mouseInfoPanel.getElement().offsetTop - this.getElement().offsetTop - 10}px`; + } } \ No newline at end of file diff --git a/client/src/unit/unitsmanager.ts b/client/src/unit/unitsmanager.ts index 047c64ec..c7c34a55 100644 --- a/client/src/unit/unitsmanager.ts +++ b/client/src/unit/unitsmanager.ts @@ -36,6 +36,8 @@ export class UnitsManager { document.addEventListener('importFromFile', () => this.importFromFile()); document.addEventListener('contactsUpdated', (e: CustomEvent) => {this.#requestDetectionUpdate = true}); document.addEventListener('commandModeOptionsChanged', () => {Object.values(this.#units).forEach((unit: Unit) => unit.updateVisibility())}); + document.addEventListener('selectedUnitsChangeSpeed', (e: any) => {this.selectedUnitsChangeSpeed(e.detail.type)}); + document.addEventListener('selectedUnitsChangeAltitude', (e: any) => {this.selectedUnitsChangeAltitude(e.detail.type)}); } getSelectableAircraft() { diff --git a/client/views/panels/unitcontrol.ejs b/client/views/panels/unitcontrol.ejs index 22fffd52..49cdcf2f 100644 --- a/client/views/panels/unitcontrol.ejs +++ b/client/views/panels/unitcontrol.ejs @@ -79,5 +79,13 @@ + +
+ + + + + +
\ No newline at end of file diff --git a/client/views/toolbars/primary.ejs b/client/views/toolbars/primary.ejs index de1a6eae..f31a9633 100644 --- a/client/views/toolbars/primary.ejs +++ b/client/views/toolbars/primary.ejs @@ -28,9 +28,7 @@
-
- ArcGIS Satellite -
+
ArcGIS Satellite
diff --git a/scripts/OlympusCommand.lua b/scripts/OlympusCommand.lua index 799497e8..306ddee1 100644 --- a/scripts/OlympusCommand.lua +++ b/scripts/OlympusCommand.lua @@ -449,6 +449,9 @@ function Olympus.generateAirUnitsTable(units) ["callsign"] = { [1] = 1, [2] = 1, [3] = 1, ["name"] = "Olympus" .. Olympus.unitCounter.. "-" .. #unitTable + 1 }, ["name"] = "Olympus-" .. Olympus.unitCounter .. "-" .. #unitTable + 1 } + + -- Add the payload to the registry, used for unit cloning + Olympus.payloadRegistry[unitTable[#unitTable].name] = payload end return unitTable end