diff --git a/client/public/stylesheets/panels/unitcontrol.css b/client/public/stylesheets/panels/unitcontrol.css index 69ecb6b5..4e659fbd 100644 --- a/client/public/stylesheets/panels/unitcontrol.css +++ b/client/public/stylesheets/panels/unitcontrol.css @@ -9,11 +9,15 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { row-gap: 10px; } -#unit-control-panel>div:nth-child(2) { +#unit-control-panel>div:nth-child(2), +#unit-controls { display: flex; flex-direction: column; row-gap: 10px; - width: 300px; +} + +#unit-control-panel>div:nth-child(2) { + width: 330px; } #unit-control-panel>*:nth-child(1) { @@ -262,18 +266,47 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { } #advanced-settings-div { + position: relative; column-gap: 5px; display: flex; + height: fit-content; } #advanced-settings-div>*:nth-child(2) { margin-left: auto; + margin-right: 58px; } #advanced-settings-div button { height: 40px; } +#explosion-types-selector { + padding-right: 5px; + border-radius: var(--border-radius-sm); + display: flex; + flex-direction: column; + row-gap: 5px; + background-color: var(--background-steel); + position: absolute; + right: 0px; + bottom: 0px; + height: fit-content; + overflow: hidden; +} + +#explosion-types-selector>*:not(:last-child) { + display: none; +} + +#explosion-types-selector:hover { + padding: 5px 5px 0px 5px; +} + +#explosion-types-selector:hover>*:not(:last-child) { + display: block; +} + /* Element visibility control */ #unit-control-panel:not([data-show-categories-tooltip]) #categories-tooltip, #unit-control-panel:not([data-show-speed-slider]) #speed-slider, diff --git a/client/public/stylesheets/style/style.css b/client/public/stylesheets/style/style.css index 1ff9293e..b8d68b6f 100644 --- a/client/public/stylesheets/style/style.css +++ b/client/public/stylesheets/style/style.css @@ -88,7 +88,7 @@ form { } .ol-scrollable { - overflow-y: scroll; + overflow-y: auto; scrollbar-color: white transparent; scrollbar-width: thin; } diff --git a/client/public/themes/olympus/images/icons/fire-solid.svg b/client/public/themes/olympus/images/icons/fire-solid.svg new file mode 100644 index 00000000..c227821a --- /dev/null +++ b/client/public/themes/olympus/images/icons/fire-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/public/themes/olympus/images/icons/napalm.svg b/client/public/themes/olympus/images/icons/napalm.svg new file mode 100644 index 00000000..b82d15a8 --- /dev/null +++ b/client/public/themes/olympus/images/icons/napalm.svg @@ -0,0 +1,41 @@ + + diff --git a/client/public/themes/olympus/images/icons/secondaries.svg b/client/public/themes/olympus/images/icons/secondaries.svg new file mode 100644 index 00000000..2863e9a4 --- /dev/null +++ b/client/public/themes/olympus/images/icons/secondaries.svg @@ -0,0 +1,49 @@ + + diff --git a/client/public/themes/olympus/images/icons/white-phosphorous.svg b/client/public/themes/olympus/images/icons/white-phosphorous.svg new file mode 100644 index 00000000..95627c72 --- /dev/null +++ b/client/public/themes/olympus/images/icons/white-phosphorous.svg @@ -0,0 +1,41 @@ + + diff --git a/client/src/server/servermanager.ts b/client/src/server/servermanager.ts index 528a539e..f1ec0a54 100644 --- a/client/src/server/servermanager.ts +++ b/client/src/server/servermanager.ts @@ -212,8 +212,8 @@ export class ServerManager { this.PUT(data, callback); } - deleteUnit(ID: number, explosion: boolean, immediate: boolean, callback: CallableFunction = () => {}) { - var command = { "ID": ID, "explosion": explosion, "immediate": immediate }; + deleteUnit(ID: number, explosion: boolean, explosionType: string, immediate: boolean, callback: CallableFunction = () => {}) { + var command = { "ID": ID, "explosion": explosion, "explosionType": explosionType, "immediate": immediate }; var data = { "deleteUnit": command } this.PUT(data, callback); } diff --git a/client/src/unit/unit.ts b/client/src/unit/unit.ts index 5f529327..47968e04 100644 --- a/client/src/unit/unit.ts +++ b/client/src/unit/unit.ts @@ -851,8 +851,8 @@ export class Unit extends CustomMarker { getApp().getServerManager().setOperateAs(this.ID, coalitionToEnum(operateAs)); } - delete(explosion: boolean, immediate: boolean) { - getApp().getServerManager().deleteUnit(this.ID, explosion, immediate); + delete(explosion: boolean, explosionType: string, immediate: boolean) { + getApp().getServerManager().deleteUnit(this.ID, explosion, explosionType, immediate); } refuel() { diff --git a/client/src/unit/unitsmanager.ts b/client/src/unit/unitsmanager.ts index f50e0d23..c1e159ab 100644 --- a/client/src/unit/unitsmanager.ts +++ b/client/src/unit/unitsmanager.ts @@ -37,7 +37,7 @@ export class UnitsManager { document.addEventListener('contactsUpdated', (e: CustomEvent) => { this.#requestDetectionUpdate = true }); document.addEventListener('copy', () => this.selectedUnitsCopy()); document.addEventListener('deleteSelectedUnits', () => this.selectedUnitsDelete()); - document.addEventListener('explodeSelectedUnits', () => this.selectedUnitsDelete(true)); + document.addEventListener('explodeSelectedUnits', (e: any) => this.selectedUnitsDelete(true, e.detail.type)); document.addEventListener('exportToFile', () => this.exportToFile()); document.addEventListener('importFromFile', () => this.importFromFile()); document.addEventListener('keyup', (event) => this.#onKeyUp(event)); @@ -794,7 +794,7 @@ export class UnitsManager { * @param explosion If true, the unit will be deleted using an explosion * @returns */ - selectedUnitsDelete(explosion: boolean = false) { + selectedUnitsDelete(explosion: boolean = false, explosionType: string = "") { var selectedUnits = this.getSelectedUnits({excludeProtected:true}); /* Can be applied to humans too */ const selectionContainsAHuman = selectedUnits.some((unit: Unit) => { return unit.getHuman() === true; @@ -804,9 +804,9 @@ export class UnitsManager { return; } - const doDelete = (explosion = false, immediate = false) => { + const doDelete = (explosion = false, explosionType = "", immediate = false) => { for (let idx in selectedUnits) { - selectedUnits[idx].delete(explosion, immediate); + selectedUnits[idx].delete(explosion, explosionType, immediate); } this.#showActionMessage(selectedUnits, `deleted`); } @@ -814,12 +814,12 @@ export class UnitsManager { if (selectedUnits.length >= DELETE_SLOW_THRESHOLD) this.#showSlowDeleteDialog(selectedUnits).then((action:any) => { if (action === "delete-slow") - doDelete(explosion, false); + doDelete(explosion, explosionType, false); else if (action === "delete-immediate") - doDelete(explosion, true); + doDelete(explosion, explosionType, true); }) else - doDelete(explosion); + doDelete(explosion, explosionType); } diff --git a/client/views/panels/unitcontrol.ejs b/client/views/panels/unitcontrol.ejs index ec9d2b3b..b308cd5f 100644 --- a/client/views/panels/unitcontrol.ejs +++ b/client/views/panels/unitcontrol.ejs @@ -1,7 +1,7 @@