diff --git a/client/src/controls/airbasecontextmenu.ts b/client/src/controls/airbasecontextmenu.ts index f5dae337..36d14c17 100644 --- a/client/src/controls/airbasecontextmenu.ts +++ b/client/src/controls/airbasecontextmenu.ts @@ -1,9 +1,42 @@ import { ContextMenu } from "./contextmenu"; export class AirbaseContextMenu extends ContextMenu { + #airbaseName: string | null = null; + constructor(id: string) { super(id); + } + + setAirbaseName(airbaseName: string) + { + this.#airbaseName = airbaseName; + var nameDiv = this.getContainer()?.querySelector("#airbase-name"); + if (nameDiv != null) + nameDiv.innerText = airbaseName; + } + + setAirbaseProperties(airbaseProperties: string[]) + { + this.getContainer()?.querySelector("#airbase-properties")?.replaceChildren(...airbaseProperties.map((property: string) => { + var div = document.createElement("div"); + div.innerText = property; + return div; + })); + } + + setAirbaseParkings(airbaseParkings: string[]) + { + this.getContainer()?.querySelector("#airbase-parking")?.replaceChildren(...airbaseParkings.map((parking: string) => { + var div = document.createElement("div"); + div.innerText = parking; + return div; + })); + } + + enableLandButton(enableLandButton: boolean) + { + this.getContainer()?.querySelector("#land-here-button")?.classList.toggle("hide", !enableLandButton); } } \ No newline at end of file diff --git a/client/src/map/map.ts b/client/src/map/map.ts index daf94fa3..3fbcf385 100644 --- a/client/src/map/map.ts +++ b/client/src/map/map.ts @@ -151,11 +151,16 @@ export class Map extends L.Map { this.#unitContextMenu.hide(); } - showAirbaseContextMenu(e: any) { + showAirbaseContextMenu(e: any, airbaseName: string, airbaseProperties: string[], airbaseParkings: string[], enableLandButton: boolean, airbaseCoalition: string) { this.hideAllContextMenus(); var x = e.originalEvent.x; var y = e.originalEvent.y; this.#airbaseContextMenu.show(x, y, e.latlng); + this.#airbaseContextMenu.setAirbaseName(airbaseName); + this.#airbaseContextMenu.setAirbaseProperties(airbaseProperties); + this.#airbaseContextMenu.setAirbaseParkings(airbaseParkings); + this.#airbaseContextMenu.enableLandButton(enableLandButton); + this.#airbaseContextMenu.setCoalition(airbaseCoalition); } getAirbaseContextMenu(){ diff --git a/client/src/missionhandler/airbase.ts b/client/src/missionhandler/airbase.ts index 5a2264e6..d0124357 100644 --- a/client/src/missionhandler/airbase.ts +++ b/client/src/missionhandler/airbase.ts @@ -34,13 +34,13 @@ export class Airbase extends L.Marker ( this.getElement()?.querySelector(".airbase")).dataset.coalition = this.#coalition; } - getName() - { - return this.#name; - } - getCoalition() { return this.#coalition; } + + getName() + { + return this.#name; + } } diff --git a/client/src/missionhandler/missionhandler.ts b/client/src/missionhandler/missionhandler.ts index a655b4ce..ee885298 100644 --- a/client/src/missionhandler/missionhandler.ts +++ b/client/src/missionhandler/missionhandler.ts @@ -78,27 +78,7 @@ export class MissionHandler #onAirbaseClick(e: any) { - var options = []; - if (getUnitsManager().getSelectedUnits().length > 0) - options = ["Spawn unit", "Land here"]; - else - options = ["Spawn unit"]; - - getMap().showAirbaseContextMenu(e); - //getMap().showContextMenu(e.originalEvent, e.sourceTarget.getName(), - // options.map((option) => {return {tooltip: option, src: "", callback: (label: string) => {this.#onAirbaseOptionSelection(e, label)}}}, false) - //) - } - - #onAirbaseOptionSelection(e: any, option: string) { - //if (option === "Spawn unit") { - // var spawnEvent: SpawnEvent = {x: e.originalEvent.x, y: e.originalEvent.y, latlng: e.latlng, airbaseName: e.sourceTarget.getName(), coalitionID: e.sourceTarget.getCoalitionID()}; - // getMap().spawnFromAirbase(spawnEvent); - //} - //else if (option === "Land here") - //{ - // getMap().hideContextMenu(); - // getUnitsManager().selectedUnitsLandAt(e.latlng); - //} + var enableLandHere = getUnitsManager().getSelectedUnitsType() === "Aircraft" && (getUnitsManager().getSelectedUnitsCoalition() === e.sourceTarget.getCoalition() || e.sourceTarget.getActiveCoalition === "neutral"); + getMap().showAirbaseContextMenu(e, e.sourceTarget.getName(), ["test1", "tes2"], ["2x small", "3x large"], enableLandHere, e.sourceTarget.getActiveCoalition); } } \ No newline at end of file diff --git a/client/src/panels/unitcontrolpanel.ts b/client/src/panels/unitcontrolpanel.ts index e5d51de0..d1865c26 100644 --- a/client/src/panels/unitcontrolpanel.ts +++ b/client/src/panels/unitcontrolpanel.ts @@ -1,4 +1,4 @@ -import { getMissionData, getUnitsManager } from ".."; +import { getUnitsManager } from ".."; import { Slider } from "../controls/slider"; import { Unit } from "../units/unit"; import { Panel } from "./panel"; @@ -96,14 +96,21 @@ export class UnitControlPanel extends Panel { var targetAltitude = getUnitsManager().getSelectedUnitsTargetAltitude(); var targetSpeed = getUnitsManager().getSelectedUnitsTargetSpeed(); - if (["GroundUnit", "NavyUnit"].includes(unitsType)) - this.#altitudeSlider.hide() + if (unitsType != undefined && targetAltitude != undefined && targetSpeed != undefined) + { + if (["GroundUnit", "NavyUnit"].includes(unitsType)) + this.#altitudeSlider.hide() - this.#airspeedSlider.setMinMax(minSpeedValues[unitsType], maxSpeedValues[unitsType]); - this.#altitudeSlider.setMinMax(minAltitudeValues[unitsType], maxAltitudeValues[unitsType]); - this.#airspeedSlider.setActive(targetSpeed != undefined); - this.#airspeedSlider.setValue(targetSpeed * 1.94384); - this.#altitudeSlider.setActive(targetAltitude != undefined); - this.#altitudeSlider.setValue(targetAltitude / 0.3048); + this.#airspeedSlider.setMinMax(minSpeedValues[unitsType], maxSpeedValues[unitsType]); + this.#altitudeSlider.setMinMax(minAltitudeValues[unitsType], maxAltitudeValues[unitsType]); + this.#airspeedSlider.setActive(true); + this.#airspeedSlider.setValue(targetSpeed * 1.94384); + this.#altitudeSlider.setActive(true); + this.#altitudeSlider.setValue(targetAltitude / 0.3048); + } + else { + this.#airspeedSlider.setActive(false); + this.#altitudeSlider.setActive(false); + } } } \ No newline at end of file diff --git a/client/src/units/unitsmanager.ts b/client/src/units/unitsmanager.ts index 0c47a731..f2ff2358 100644 --- a/client/src/units/unitsmanager.ts +++ b/client/src/units/unitsmanager.ts @@ -128,6 +128,8 @@ export class UnitsManager { } getSelectedUnitsType () { + if (this.getSelectedUnits().length == 0) + return undefined; return this.getSelectedUnits().map((unit: Unit) => { return unit.constructor.name })?.reduce((a: any, b: any) => { @@ -136,6 +138,8 @@ export class UnitsManager { }; getSelectedUnitsTargetSpeed () { + if (this.getSelectedUnits().length == 0) + return undefined; return this.getSelectedUnits().map((unit: Unit) => { return unit.getTaskData().targetSpeed })?.reduce((a: any, b: any) => { @@ -144,6 +148,8 @@ export class UnitsManager { }; getSelectedUnitsTargetAltitude () { + if (this.getSelectedUnits().length == 0) + return undefined; return this.getSelectedUnits().map((unit: Unit) => { return unit.getTaskData().targetAltitude })?.reduce((a: any, b: any) => { @@ -151,6 +157,16 @@ export class UnitsManager { }); }; + getSelectedUnitsCoalition () { + if (this.getSelectedUnits().length == 0) + return undefined; + return this.getSelectedUnits().map((unit: Unit) => { + return unit.getMissionData().coalition + })?.reduce((a: any, b: any) => { + return a == b? a: undefined + }); + }; + selectedUnitsAddDestination(latlng: L.LatLng) { var selectedUnits = this.getSelectedUnits(); for (let idx in selectedUnits) { diff --git a/client/views/contextmenus.ejs b/client/views/contextmenus.ejs index 08ce62aa..4fde3221 100644 --- a/client/views/contextmenus.ejs +++ b/client/views/contextmenus.ejs @@ -80,5 +80,10 @@
- +

+
+

Parking available: +
+ +

\ No newline at end of file