From e877d9f8e45b9f34aeb0a65b9834a69a49c45c55 Mon Sep 17 00:00:00 2001 From: Davide Passoni Date: Mon, 31 Mar 2025 15:06:20 +0200 Subject: [PATCH 01/12] fix: added missing fire effect --- frontend/react/src/map/map.ts | 2 +- frontend/react/src/shortcut/shortcut.ts | 3 +-- .../react/src/ui/modals/components/modal.tsx | 6 ++--- frontend/react/src/ui/modals/loginmodal.tsx | 6 ++--- .../react/src/ui/panels/effectspawnmenu.tsx | 26 ++++++++++++++++++- .../react/src/ui/panels/unitexplosionmenu.tsx | 2 +- 6 files changed, 34 insertions(+), 11 deletions(-) diff --git a/frontend/react/src/map/map.ts b/frontend/react/src/map/map.ts index 3a3870de..4880fa7c 100644 --- a/frontend/react/src/map/map.ts +++ b/frontend/react/src/map/map.ts @@ -1070,7 +1070,7 @@ export class Map extends L.Map { if (this.#effectRequestTable.explosionType === "High explosive") getApp().getServerManager().spawnExplosion(50, "normal", e.latlng); else if (this.#effectRequestTable.explosionType === "Napalm") getApp().getServerManager().spawnExplosion(50, "napalm", e.latlng); else if (this.#effectRequestTable.explosionType === "White phosphorous") getApp().getServerManager().spawnExplosion(50, "phosphorous", e.latlng); - + else if (this.#effectRequestTable.explosionType === "Fire") getApp().getServerManager().spawnExplosion(50, "fire", e.latlng); this.addExplosionMarker(e.latlng); } else if (this.#effectRequestTable.type === "smoke") { getApp() diff --git a/frontend/react/src/shortcut/shortcut.ts b/frontend/react/src/shortcut/shortcut.ts index 3949286e..73259b4c 100644 --- a/frontend/react/src/shortcut/shortcut.ts +++ b/frontend/react/src/shortcut/shortcut.ts @@ -1,5 +1,4 @@ -import { OlympusState } from "../constants/constants"; -import { AppStateChangedEvent, ModalEvent, ShortcutChangedEvent, ShortcutsChangedEvent } from "../events"; +import { ModalEvent } from "../events"; import { ShortcutOptions } from "../interfaces"; import { keyEventWasInInput } from "../other/utils"; diff --git a/frontend/react/src/ui/modals/components/modal.tsx b/frontend/react/src/ui/modals/components/modal.tsx index c1aecb23..07ba7f8f 100644 --- a/frontend/react/src/ui/modals/components/modal.tsx +++ b/frontend/react/src/ui/modals/components/modal.tsx @@ -33,8 +33,8 @@ export function Modal(props: { ${ props.size === "lg" ? ` - h-[600px] w-[1100px] - max-md:h-full max-md:w-full + h-[700px] w-[1100px] + max-xl:h-full max-xl:w-full ` : "" } @@ -42,7 +42,7 @@ export function Modal(props: { props.size === "md" ? ` h-[600px] w-[950px] - max-md:h-full max-md:w-full + max-lg:h-full max-lg:w-full ` : "" } diff --git a/frontend/react/src/ui/modals/loginmodal.tsx b/frontend/react/src/ui/modals/loginmodal.tsx index 402d8607..5488d398 100644 --- a/frontend/react/src/ui/modals/loginmodal.tsx +++ b/frontend/react/src/ui/modals/loginmodal.tsx @@ -89,8 +89,8 @@ export function LoginModal(props: { open: boolean }) {
-
+
{loginByRole ? ( <>
- {["High explosive", "Napalm", "White phosphorous"].map((optionExplosionType) => { + {["High explosive", "Napalm", "White phosphorous", "Fire"].map((optionExplosionType) => { return ( +
+
+ +
+
+ Click on the map to generate an explosion effect. The type of explosion will be the one selected above. + The possible explosion effects are: +
  • High explosive: a normal explosion, like the one from a conventional bomb;
  • +
  • Napalm: an explosion with a longer lasting fire effect;
  • +
  • White phosphorous: an explosion with multiple white flares ejecting from the blast;
  • +
  • Fire: a long lasting static fire.
  • +
    +
    )} {props.effect === "smoke" && ( @@ -117,6 +131,15 @@ export function EffectSpawnMenu(props: { visible: boolean; compact: boolean; eff ); })}
    + +
    +
    + +
    +
    + Click on the map to generate a colored smoke effect. The color of the smoke will be the one selected above. +
    +
    )} {props.compact && ( @@ -133,6 +156,7 @@ export function EffectSpawnMenu(props: { visible: boolean; compact: boolean; eff if (explosionType === "High explosive") getApp().getServerManager().spawnExplosion(50, "normal", props.latlng); else if (explosionType === "Napalm") getApp().getServerManager().spawnExplosion(50, "napalm", props.latlng); else if (explosionType === "White phosphorous") getApp().getServerManager().spawnExplosion(50, "phosphorous", props.latlng); + else if (explosionType === "Fire") getApp().getServerManager().spawnExplosion(50, "fire", props.latlng); getApp().getMap().addExplosionMarker(props.latlng); } else if (props.effect === "smoke") { /* Find the name of the color */ diff --git a/frontend/react/src/ui/panels/unitexplosionmenu.tsx b/frontend/react/src/ui/panels/unitexplosionmenu.tsx index 615fd2e0..dae65c5f 100644 --- a/frontend/react/src/ui/panels/unitexplosionmenu.tsx +++ b/frontend/react/src/ui/panels/unitexplosionmenu.tsx @@ -19,7 +19,7 @@ export function UnitExplosionMenu(props: { open: boolean; onClose: () => void; c Explosion type - {["High explosive", "Napalm", "White phosphorous"].map((optionExplosionType) => { + {["High explosive", "Napalm", "White phosphorous", "Fire"].map((optionExplosionType) => { return ( Date: Mon, 31 Mar 2025 15:09:56 +0200 Subject: [PATCH 02/12] fix: Removed incorrect help string in compact effect spawn menu --- .../react/src/ui/panels/effectspawnmenu.tsx | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/frontend/react/src/ui/panels/effectspawnmenu.tsx b/frontend/react/src/ui/panels/effectspawnmenu.tsx index 6056f0a9..74e08e7c 100644 --- a/frontend/react/src/ui/panels/effectspawnmenu.tsx +++ b/frontend/react/src/ui/panels/effectspawnmenu.tsx @@ -85,19 +85,21 @@ export function EffectSpawnMenu(props: { visible: boolean; compact: boolean; eff ); })} -
    -
    - + {!props.compact && ( +
    +
    + +
    +
    + Click on the map to generate an explosion effect. The type of explosion will be the one selected above. The possible explosion effects + are: +
  • High explosive: a normal explosion, like the one from a conventional bomb;
  • +
  • Napalm: an explosion with a longer lasting fire effect;
  • +
  • White phosphorous: an explosion with multiple white flares ejecting from the blast;
  • +
  • Fire: a long lasting static fire.
  • +
    -
    - Click on the map to generate an explosion effect. The type of explosion will be the one selected above. - The possible explosion effects are: -
  • High explosive: a normal explosion, like the one from a conventional bomb;
  • -
  • Napalm: an explosion with a longer lasting fire effect;
  • -
  • White phosphorous: an explosion with multiple white flares ejecting from the blast;
  • -
  • Fire: a long lasting static fire.
  • -
    -
    + )} )} {props.effect === "smoke" && ( @@ -136,9 +138,11 @@ export function EffectSpawnMenu(props: { visible: boolean; compact: boolean; eff
    -
    - Click on the map to generate a colored smoke effect. The color of the smoke will be the one selected above. -
    + {!props.compact && ( +
    + Click on the map to generate a colored smoke effect. The color of the smoke will be the one selected above. +
    + )}
    )} From de495cc71da249d759ee37de2f50223b9a0127f8 Mon Sep 17 00:00:00 2001 From: Davide Passoni Date: Mon, 31 Mar 2025 15:36:38 +0200 Subject: [PATCH 03/12] feat: added unit ranges on spawn menu --- .../src/map/markers/temporaryunitmarker.ts | 72 +++++++++++++++++-- .../react/src/ui/components/olunitsummary.tsx | 4 +- .../react/src/ui/panels/unitspawnmenu.tsx | 8 ++- 3 files changed, 76 insertions(+), 8 deletions(-) diff --git a/frontend/react/src/map/markers/temporaryunitmarker.ts b/frontend/react/src/map/markers/temporaryunitmarker.ts index 7d093645..a56ea45b 100644 --- a/frontend/react/src/map/markers/temporaryunitmarker.ts +++ b/frontend/react/src/map/markers/temporaryunitmarker.ts @@ -2,9 +2,11 @@ import { CustomMarker } from "./custommarker"; import { DivIcon, LatLng } from "leaflet"; import { SVGInjector } from "@tanem/svg-injector"; import { getApp } from "../../olympusapp"; -import { UnitBlueprint } from "../../interfaces"; -import { deg2rad, normalizeAngle, rad2deg } from "../../other/utils"; +import { adjustBrightness, normalizeAngle, rad2deg } from "../../other/utils"; import { SpawnHeadingChangedEvent } from "../../events"; +import { RangeCircle } from "../rangecircle"; +import { Map } from "../map"; +import { colors } from "../../constants/constants"; export class TemporaryUnitMarker extends CustomMarker { #name: string; @@ -12,6 +14,8 @@ export class TemporaryUnitMarker extends CustomMarker { #commandHash: string | undefined = undefined; #timer: number = 0; #headingHandle: boolean; + #acquisitionCircle: RangeCircle | undefined = undefined; + #engagementCircle: RangeCircle | undefined = undefined; constructor(latlng: LatLng, name: string, coalition: string, headingHandle: boolean, commandHash?: string) { super(latlng, { interactive: false }); @@ -51,6 +55,58 @@ export class TemporaryUnitMarker extends CustomMarker { }); this.setIcon(icon); + if (blueprint.acquisitionRange) { + this.#acquisitionCircle = new RangeCircle(this.getLatLng(), { + radius: blueprint.acquisitionRange, + weight: 2, + opacity: 1, + fillOpacity: 0, + dashArray: "8 12", + interactive: false, + bubblingMouseEvents: false, + }); + + switch (this.#coalition) { + case "red": + this.#acquisitionCircle.options.color = adjustBrightness(colors.RED_COALITION, -20); + break; + case "blue": + this.#acquisitionCircle.options.color = adjustBrightness(colors.BLUE_COALITION, -20); + break; + default: + this.#acquisitionCircle.options.color = adjustBrightness(colors.NEUTRAL_COALITION, -20); + break; + } + + getApp().getMap().addLayer(this.#acquisitionCircle); + } + + if (blueprint.engagementRange) { + this.#engagementCircle = new RangeCircle(this.getLatLng(), { + radius: blueprint.engagementRange, + weight: 4, + opacity: 1, + fillOpacity: 0, + dashArray: "4 8", + interactive: false, + bubblingMouseEvents: false, + }); + + switch (this.#coalition) { + case "red": + this.#engagementCircle.options.color = colors.RED_COALITION; + break; + case "blue": + this.#engagementCircle.options.color = colors.BLUE_COALITION + break; + default: + this.#engagementCircle.options.color = colors.NEUTRAL_COALITION; + break; + } + + getApp().getMap().addLayer(this.#engagementCircle); + } + var el = document.createElement("div"); el.classList.add("unit"); el.setAttribute("data-object", `unit-${blueprint.category}`); @@ -89,8 +145,7 @@ export class TemporaryUnitMarker extends CustomMarker { const rotateHandle = (heading) => { el.style.transform = `rotate(${heading}deg)`; unitIcon.style.transform = `rotate(-${heading}deg)`; - if (shortLabel) - shortLabel.style.transform = `rotate(-${heading}deg)`; + if (shortLabel) shortLabel.style.transform = `rotate(-${heading}deg)`; }; SpawnHeadingChangedEvent.on((heading) => rotateHandle(heading)); @@ -124,4 +179,13 @@ export class TemporaryUnitMarker extends CustomMarker { this.getElement()?.classList.add("ol-temporary-marker"); } } + + onRemove(map: Map): this { + super.onRemove(map); + + if (this.#acquisitionCircle) map.removeLayer(this.#acquisitionCircle); + if (this.#engagementCircle) map.removeLayer(this.#engagementCircle); + + return this; + } } diff --git a/frontend/react/src/ui/components/olunitsummary.tsx b/frontend/react/src/ui/components/olunitsummary.tsx index e597c984..04ea6f6e 100644 --- a/frontend/react/src/ui/components/olunitsummary.tsx +++ b/frontend/react/src/ui/components/olunitsummary.tsx @@ -85,7 +85,7 @@ export function OlUnitSummary(props: { blueprint: UnitBlueprint; coalition: Coal
    {props.blueprint.abilities?.split(" ").map((ability) => { return ( - <> +
    {ability.replaceAll(" ", "") !== "" && (
    )} - +
    ); })} diff --git a/frontend/react/src/ui/panels/unitspawnmenu.tsx b/frontend/react/src/ui/panels/unitspawnmenu.tsx index 34ff937d..ec9b8ba1 100644 --- a/frontend/react/src/ui/panels/unitspawnmenu.tsx +++ b/frontend/react/src/ui/panels/unitspawnmenu.tsx @@ -346,6 +346,7 @@ export function UnitSpawnMenu(props: { setSpawnLoadoutName(""); }} className={`w-full`} + key={role} > {role} @@ -380,6 +381,7 @@ export function UnitSpawnMenu(props: { setSpawnLoadoutName(loadout.name); }} className={`w-full`} + key={loadout.name} > - {spawnLoadout.items.map((item) => { + {spawnLoadout.items.map((item, idx) => { return ( -
    +
    Date: Mon, 31 Mar 2025 15:59:27 +0200 Subject: [PATCH 04/12] feat: Added threat rings to spawn tool --- frontend/react/src/map/markers/temporaryunitmarker.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/frontend/react/src/map/markers/temporaryunitmarker.ts b/frontend/react/src/map/markers/temporaryunitmarker.ts index a56ea45b..3b310a81 100644 --- a/frontend/react/src/map/markers/temporaryunitmarker.ts +++ b/frontend/react/src/map/markers/temporaryunitmarker.ts @@ -1,5 +1,5 @@ import { CustomMarker } from "./custommarker"; -import { DivIcon, LatLng } from "leaflet"; +import { DivIcon, LatLng, LatLngExpression } from "leaflet"; import { SVGInjector } from "@tanem/svg-injector"; import { getApp } from "../../olympusapp"; import { adjustBrightness, normalizeAngle, rad2deg } from "../../other/utils"; @@ -43,6 +43,14 @@ export class TemporaryUnitMarker extends CustomMarker { }, 1000); } + setLatLng(latlng: LatLngExpression): this { + super.setLatLng(latlng); + if (this.#acquisitionCircle) this.#acquisitionCircle.setLatLng(latlng); + if (this.#engagementCircle) this.#engagementCircle.setLatLng(latlng); + + return this; + } + createIcon() { const blueprint = getApp().getUnitsManager().getDatabase().getByName(this.#name); From 84b3e3dac4b8138623fb166fab7e785b4180e21e Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Mon, 31 Mar 2025 22:25:16 +0200 Subject: [PATCH 05/12] feat: Added more docs to ingame wiki --- .../react/public/images/training/step14.png | Bin 0 -> 50706 bytes .../public/images/training/unitmarker1.png | Bin 0 -> 16946 bytes .../public/images/training/unitmarker2.png | Bin 0 -> 17016 bytes .../public/images/training/unitmarker3.png | Bin 0 -> 17024 bytes .../public/images/training/unitmarker4.png | Bin 0 -> 17148 bytes .../public/images/training/unitmarker5.png | Bin 0 -> 16948 bytes .../public/images/training/unitmarker6.png | Bin 0 -> 16311 bytes .../public/images/training/unitmarker7.png | Bin 0 -> 17026 bytes .../react/src/ui/modals/trainingmodal.tsx | 137 +++++++++++++++--- frontend/react/src/ui/panels/airbasemenu.tsx | 26 +++- .../react/src/ui/panels/components/menu.tsx | 1 + frontend/react/src/ui/panels/mainmenu.tsx | 2 +- frontend/react/src/ui/panels/optionsmenu.tsx | 2 +- .../react/src/ui/panels/unitexplosionmenu.tsx | 2 +- 14 files changed, 143 insertions(+), 27 deletions(-) create mode 100644 frontend/react/public/images/training/step14.png create mode 100644 frontend/react/public/images/training/unitmarker1.png create mode 100644 frontend/react/public/images/training/unitmarker2.png create mode 100644 frontend/react/public/images/training/unitmarker3.png create mode 100644 frontend/react/public/images/training/unitmarker4.png create mode 100644 frontend/react/public/images/training/unitmarker5.png create mode 100644 frontend/react/public/images/training/unitmarker6.png create mode 100644 frontend/react/public/images/training/unitmarker7.png diff --git a/frontend/react/public/images/training/step14.png b/frontend/react/public/images/training/step14.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e5b15bd0ca9d688aff86d0a6015ce546f88cb9 GIT binary patch literal 50706 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 literal 0 HcmV?d00001 diff --git a/frontend/react/public/images/training/unitmarker1.png b/frontend/react/public/images/training/unitmarker1.png new file mode 100644 index 0000000000000000000000000000000000000000..e55116c5e2f06323fa4c5460a2890376a6b9dbc3 GIT binary patch literal 16946 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 P4+L2$CCPGelc4_vITSdk literal 0 HcmV?d00001 diff --git a/frontend/react/public/images/training/unitmarker2.png b/frontend/react/public/images/training/unitmarker2.png new file mode 100644 index 0000000000000000000000000000000000000000..932648d2e27f3dfbc4064e32811ed65b62127641 GIT binary patch literal 17016 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 bk7Pspr<~p1b2eFyUXA< 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 literal 0 HcmV?d00001 diff --git a/frontend/react/public/images/training/unitmarker4.png b/frontend/react/public/images/training/unitmarker4.png new file mode 100644 index 0000000000000000000000000000000000000000..99f91a1d70ad4225a8a3ffc3f32ad26dd8e1a770 GIT binary patch literal 17148 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%0D!IQ($3b>+nYlO7_1= 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 CzkiGX literal 0 HcmV?d00001 diff --git a/frontend/react/public/images/training/unitmarker6.png b/frontend/react/public/images/training/unitmarker6.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3d3740056c72379ef06cf2ea38720250d71877 GIT binary patch literal 16311 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 literal 0 HcmV?d00001 diff --git a/frontend/react/public/images/training/unitmarker7.png b/frontend/react/public/images/training/unitmarker7.png new file mode 100644 index 0000000000000000000000000000000000000000..5979783dbd3645bb8278783d5ac8111e60657acf GIT binary patch literal 17026 zcmeIZbyVEH_AU$*3Z=LgFGY(F?pl0+;>B8IfGG}xTk+!VR@@2{8yt!k28ZHKad(G1 z?f2-q_g(KjYu(>}2i8cEohN%g*~ujNWQV9K%VMIFq9Y(6V9Lu$tHD2);IDDCr|@?~ zp&o7cN3Xkv4n)n!h1$-+)(mU~qK3HHfv7>QU^4^+*I8>-J*-Y@jN45DAtYMi4ttC2 zF`I8|!@iJ@r7w&m$y0FnL=QV#2nce*isi}$Jg6siieKWijnJb~F{qq%*4Pa<4bkJM zkVwkNV->yh+L;QdG~vD#e5C&0cx7$Y{8i~Z^#u1!#-r! z5b8Q{G@Lz8t)XRNi}bT>Z;$FO@eivm$13-uzCv7O<7aA=3wcyTXEhe)Kj>}ph-z~A zG*SW>+zUfYwRy2Et>3?{oxjX{N8|RazzkQAoZTHnYe; ze~^r@6!}}8jFZ50*y~N!A>G<`!OLIl7{q4@7*pU#8eclv7(ZkbObyk*K*lmbCi<}& zs>`D&{s)2v0te0SKPo?wa{q{=y2JK%u_P)ioX@i(M{AzG=;g;iXR@Tts zbYXvkU|L+dPPV*^lg#+`qOrH>*2ClWQmL?w%KEiK-nX7$0NnGO!Eg`L0V)Za*jlq0 znc5nI*j%mc;I4;&AS~u;XJldtf>0ZS%)vGyG>1)XG}K^I5gKhCAP3M+3SXjVL;`u!E_YpqjMI-yq;A5gH2!#7>Z%-NnU)&4r82*1?>e zQ$Rp~odduQ0ItiF^!CEoggAKH1Klj zzw2jh2L%2D-p287EWr6-cQvwO=Vaqxx3*^g*BXwHH_mX7zbW*8tl_8uAE@kVAV*s# z2NTd6XOIo#)xScRn*5`_os)yrA9GAi*g;kxYq+Q*yj9MBYf@GosQQl@zbP;WTigAq z1tH4&7tb+9&q zcPH4|$Q;COXJh`S;5Xrd5~}hdGypb^f99xK89~h872sn4Y-4Kc;`q-Z4X`yx9b)vG zPfk8=E^ZzGfSXrI73BZ#eohOMoY2+eP$sDIb|M==mSpiGS*M$$$Q5FC^Pz$3`PCCJ680RRYc@(BWX zm^lD~9RDJ3YYH}V`~Q>vJ$$Hz|LSx(up_*Ew?A2bjVX1I{a>lSl2+h9gNd5@&#(|Q zGWp8{MOV@wt`i~g+kA(m0UH_%)KVslN68^7u{Xe4%{hymDkPUnV z$Q2^cWJmFyL1`yl+@xAKiX;zts(PByy@El zR#Zl?UV7JSH_^X(VbJ z9E&r=Gp{AhpH3~WE~84y%Xglb^OX-_=ZqNqJZy27^*+6Xy?+3xPmp^{=BP5-2&6Wm zpaeX8J1;qLQu32u~<@q6bR;POPf`5&Yk3RThx!5HS+e zCGLEP_Hz0Om+vm4S#~}Z2NKqc|Lh~&yrW`?(F8N$YWXX9`2x@FI{P)6qY;-5@uy*C0vrLRWla{RYOg{y%P^gRti+=_Nq(sQWLJfjbExN z$7K^To64}Ajg?{N4wYAFE|K^-dSnjp0FTXA0U ze!_a5bsC??4X3ppyhR{xpZ|H<(YiS5p4HY!{(MGv3|?LLQ<4H)t}fQ!kb2^cr21 zEUd?-;RvopU|{>V;*!jlc*pn=SBDL|mW=4cXv2xI&)4wvNwPGoMZ5Q_I6-WFGt)VjHsAz19RFl#m0pQ)0L&DZDMf*EXX>E-opka z^W4|(Wceti7-E$cyj7$Kh29u+A`>P!He4=b)XFg(C_iW8h9)Md?VLIY3TZ2dGQk=P zRzwv%L!El}IcK0=)R*3-Md9ra{Y}+CZT+tMp9xn6n zNoy&T4l)WhlP`xC$R?gaVfzUnx#fwYt*SOz_2Q<3hu6o})Q|SFVA$}h93rx!V{~>WS^n8H^oKi-Ro6F zmi6vU7RJKkSm~MQjt6HOdba!eY!7vbW*1XGe+8gM>jqak^`9_JM$FzYm6Q<68b?LM z>pNvV-%LddWKPLw5ZP~*O(SDEad$Y3OYH7jdD~-h3h#|3e{l}^xyaTxD-nqRZXNHR z_f~ps)*X5Zw_OCpJ@nu59EXL8=~^+xO$_H)Nsq@LB-W~|g$++5ciTLw3$r$2X>K-Y zU}IeeC>m+DPdEhCLf0&4<7|d97sJ;GL@#c7>_tz02#B6+3Fw#Wk(FGMJS_v|2M8a4 zd=z!)_wnN{^N!-z=cosif?Y4mGNz$H*2L%)P@B*)>y$g$sNTFH*UY|<96bj^Yr^$; z?RSycVE6!hbjvo868Wu`q+rY4TWzhuG3O;?Jv-5jCc2JN^r!r)?-jq-Zf&3gPD_$6 z@b30;~}aRL^I zu_riG?8ro7B)rwfgAXmXOxtEqM_9pF^Ma6g$Wm|jvHYG#(XM!i?Gtr9z65+q@z>j} zs~7vb$!uCXE~C>pD|d8M8?gvGcHI4T+>I+)Nq9>l6G3ySd^9a>b)gm$F0f%KV!!*j z@qmx)%NFuj$h^k~eR$`e;5ryMAMCst2e8f0TYWkhYJ9`2L6qI-oa*aDWU5{Zw46hT z^hiZ9A0tbD5`P63H_|^CAaE@J6JR)(eN8pm%%nts`)2d)SyP=gSRfN>o|a&(g0t;hE^YgJ&c3%I`6# ze*%ORJTC<+i=yDJ=XluJeY&^k@$4laUn~VOZf|t|b!7X3=Avo0lGR^*Q}HuHpgW_2 zCs|yX^^*qP4}g`8uG_guTKn0ym0BU;a4Ec?K_GMQ&k?=HeOr}Oy5quuu6)Jvfa8E0# zCn9C)Oz%40;bHN}4Fc|?bX4d5Om8R(C}dfBN`s?BptQd@r5*^Gta~^MBD&oR*w3#k zO;Nn}KIe$P;*Ac=5!h>NEBx~69^Sa9Pw4*Tc`g{sT&3<;B z$wA-GF!&UuotN{Gw=N(FOzLR|Me(8TdxF|%XD&2t`LS?ox41QXjTnUs7nbjq?3Me} zD_7{}6V=tG!1>UjmEA4$v{a0^&mKqD>gi%l&pN-kEsLAm%%YBSlaMhr9jM#AIQkxm z)?Q*L7kIs{H@Gvyd|XBm5#@bGisE7ty6bZqQHy&;*kzIO^svQ|in1aEwBxz8a*EO+ zbo`(dJ2ewkXQCcDn@CA6k|{uV$eq9PwBS{Lt;T8-NK3i=snjfZT!_M${k8X%J!ohl2fbTs^D2C3lXTyS5GdCTnmq) zL6Qh()x$jp!n(BfYKyUTT*K6^4Dc%0?6>hmno?NXYf$9%aQIMg)lJySaQRRaiMOKun@@ z4_52$W^1G%Ahqc@IpBrL7DkW$KtA#9Zpp{OnOWXweEq5Jn{Yb)PW|=wEqa(5%qa6R zHJHrJ+e~8>ZGK$5jY_W1CnhIP77o3Wo}gkO*d5=)l)}3Ky>{ewzxq4kwB6Rb(5s zhk*FgJ4~T1@U2(?D|z0l&x5x`#TgyDDkcS(i(Ve)^ttQkS|irqp9pQDX`ImnMj)5$ z1YdvgsD8ZWJuXX7<>b;LJosXbi7!kz3s*NUwV=M`)GDPQjN z+9(Syvo}YP!qiV{n;v1Q={cFu(E>Uo`5(z&s_t0H8IU4-uB(CkP=uGnuW}WU>vNs3 zWTV(;Cm_ier)eaastc$Jo-P4T=^R9#e!tkC+uq+dpch8ywRhb}F|UVgPV%>8eXRlDMToW=4PrCdc(&<$9Te9iGZg?+| zhea;QiP`j**OT5GLcQL;?dcAe2JC)P3CH5%Y@C)C;pMKmSnqLrf+Y;>U;^n?%J(X5 zWTUivbJ-*~SSFW^g5s#`pdh7(ZBH2<{bFUgTE)T}CCv!VwnSdA;eMH{%o4?Ti$UBr z14WTyX}gkp-NM;jXuA-}1&}s3XD~1@5PrNn6~6uz=eb6%5xhjKvwX9Hs1w;D!TSC!X9tz|Q14a0 zc56qRis-ZNr^8~y@K>AFt*Ha~+Dcg&wuV2)OA&^1nfTF~b?OPi{|l_6&}e+F2&e6?xPd_Jisd^*5| zjD+ZY5|{O>kpO`Ow%T&JxOR7air^|t`EWP<==m;k(_LMI9F-+hNo-sfBZY0n*!)%Q zxVwz8+rAicg6Ymy6aVB%Jm27Yhq`(gPRe|!9c)AYWyG02J?BX9(qUm^=S2&zzc4 zTrx`9$)CREWD^>i0Dj@{5zJ7R{dS5W~WDY(UH;$ zs0LFK<43%_Cax{gY=#I-V4IJ|kdL7UI^p|sb*Cdz*!C-X?-o4{MIfDDa&r8#vtQ!) zeXt~(n7{!Rpt;W{N5;9m@$sRyPs<_u)hVS@gAG|T$o!eG@d8caj}elA5llP7JG94GrgHy+=7OS!5m5x&EhPv zCt?@91Sh*bqPv$&vEXV`+i*SG%LDQ1*2jy<{DqohH8PLu1@>d|?1>t}Y6$Y<#Uk#I zle60Vn1a=ZPi1qnS7)}~ex|RxA8%cJRPvhQR6K9S$)_tR45o0u=da*;pXE{+1$ET> zWe;4l((-+_B=~~NjN6+|vN`j3q^bK60JclCb}T4O(>C;eF+8-8TuczM@>29MklpUR z9+@qbKqyF0dO1ptFpNe-lA=c?>B-?zD#4ObDQq%=F^^U<-sZJfOW=Gdq zq$a}g5Mp<{`bPA2W;pf-Z>m%0_aWU#cF&dP#Y?fRXr8vrJ&m`045r8I3363RB`I%}I^}I?^*R?RM_V1YFcFudhZr zvDMWHHa5j>U&uz1uM`(%8qYzk&nBiu^|d?M4SoFYZ!bqx^;W8VkAr$0MzN+8@FDO@HP!*8}JUUW-D*H|m)v*pE0d$6Bwy^2ybG*tHR5E@M5 zMf4j}MeAJ8scs5W^}_8{A>XX*j2cr_ADqcFkt;-eNs9-cxxSZ+B#neOe^-HiBO)Fq zeoBk?Y*Ex1*~2V#tv71TxvA2cjEOFC4JRd8ybgGAIN$eunVOK05Y3>_);P9A6=#8C zggYXm$(d6?sCW7ZXPP%{=VQafc<1P4l)A&CXbpns7r$=sb-Z$3MBTF^n5Ebc6YY_=Vjm4t23zVe2L%i7l7%+KYQGUrT z2;$mL;co6vB|TVL?CCCN+t}P34Og;znaLXiePdvaX|9}+W9>m^n1o$16=BvZF6h<) z)1Z{pYnPPsWryZ|`*7nKPsJZlQIiZ`t-uHf30KbD1)OfUDKau3*jOi5vSOiA`x|9- zOB-Bmm+!cNCPP&-n%YrfILk+CQLh5On~*fST#)ZGM6R7*lTcChYHBIxm1LfIk}U_jOqc#utmq0Of{Ygo~1Xb(Gkk>UuwGs zyq^xHDS&O*j2P{b11RgIcML(~sP0urTv}sWXyQzN?|BwTc!KV%RwU#WHXf zwo!zRtY#tI$W~=CtSox*Q?v7xkc*TfO=EW_QnH8PSR>qK36mNRTAL zdZisztn0!5(%<@nE>j+Iopy90p0EGFQ`Z1w>jF#>{y-R;WL-!7S2c|4_{b164(MLv z(&0V>FPD^w6CvjLxz%EGiXE7#I~!+?&vxS~1RnzvV_AnD3XUbESXp{{q@z^`jZ zrHH69H@*&CTs!%@AX*y`)fqbWJU7tLW1nXzLo90JboJQ_i`0+;Av8oATlY$$q}YZb zEK<@P0naTQ$5Hu*bz-qR<7!iFS7N<7s8K37(`(~}z73zR_@|}E`=w3dik6-wugmvE z#UcvtCbFrLJAUP(bc)Qq?-hf ze*QdNY~Ugvb>ijYIcdsz;BIo+`%>PT`GK+PV4-QI){>Zxj_!B&Kq`{nw>~_5=%HWr zzeij6VEi$(r-0sUb3=|EPeV&1nv!aL>hVN<@w$+h-|mPyO6-B(j0P()u&FAvdUMGB z;_O99Y3bD%aodlJM53N1cJn4;qDK3wp$*K&OtP_k76+m03{|vxp~R}#Fk|Km{;slt zBN`@TnzrLC>(gxT-tB_gjxI}HeDl2&Dpv}Hmskpo=(V%WZEP%FrsprC)zfE&t}AcM z%wm-=&~kp_YXpjY=fosOeccbUZ_*Esj8xNH`ko~E=;rR>aeW-+Ga!X6BF#Z!`~l); z&lONfi~gJ=Nscoqz4>Fnh`L6Xl!|EIP$KYdIO`!kjF?UJ-CN%R@Bjne*~LXHFOVG8 zG2+y*!ZAKRuA~AyJy!8d&nPQvzFG}CJ3CX=Hi!VFN*i;sVPiQwMp6i$9ChC9MDP`r zm96`>c!cyALoUuvx`%xtLu2tCdZWC%j+UvNYHRBkZ19Q+hC1qp^+7IAD!9{&4B{gmBz7;m1seRhb?)h?R)4R1W_%bT% zyPi7i7}hc!f_zT*hMSjfoR9xUN;#WCaFE4Ei(kK=M~vCa6{t0PpOM5|^S51H!>*7d zu&6`_*4mEAQYOBoyzoAroYR303du&DOfZPH``qnl$Ef9iNt1$uTz9A1dgkV<3b@ce zr*^7Xg|9z9EkAiUq3x#h7@e07iMQ*&C*dqhUXFRpbQF3#Q+b4Rcecz?t<)-V1qcg1 z!p~>>?^37(UePfGnKV0tgHof@*!Rl2$}DMt!P;yhJK4k`k0ayzca3WDYMJ$yUD`r=d0_ZjaS<&KXJlKsuSG9P zp0)aW?cN{LBv5O7tA(JtJZ?vFAncw%(zI3a^H0{Lj#u_pG+rXKH}0dD{yQZl%~*#6 z$8^-zX$=>rS7f9i*k||_Rx~_ZQXe5CZA&Wl_MDxaofbCOEBitmCY&4WF8=ZGlL7!2 zmlO?UFXL8e1TL(tcm-y@KTl{LSvBI@c+xHX6#sn+S69mPzR9k4i9oD0(P5MRUKyu@kIr091i^u&5#`|&kozRvp zU|Nz8eMkyX+l;QW0U}pS#&u`3Zh?!08M)9PXL2T+%;mHOIe$RBYU?2mMGL9Z_?*2J zs`htN*osnU+&cf1>N~?t;dDd|wPN9}NFXv`jsjK`R0(QBM z1Jd-+_^dlBS;i!Do3jP*7hM3G^aw^I@q4pz_L^Z_mTgU)Z;;bc+wJ9^NxZXuVmdws zslc{%Lz(7f0(QQi`y{3(fk0qAmpLnf(Ecl!1}t;T2kx1}))Y)Nn9_O*UgJ0Mk7p`9-9H=JCeE&PClZMkm<)|A$a5_iQ! zROM{Luv_iQXVJ$=w%zIJFmXr}%grl|`wWy@f2yxG0UC8?C|b1Gl)LT8`<~RkXg?p$ zPnOq>zrlFud>~~hJo@7A$dngvRdMzT`AVO3uK%vt9-KO=bJN&mKFe!@Zzyi(`8|Ub z+1V_h>C1;4l9ybk{-IWgNhr7lcVS5lR8#AMAu1?A97kSo{VT6Y@V2=Uxe^u^AY-fNV)3S1VRj6 z?eU)6q!2Mk=*_8G7)taJ&46;;}JZ4#Fdzr6J?yMEX`8*bl3 z!z}}!5PLY0%i{6v^Avf~t*pA?#F{0^&q7QJM5JjDm8wVl1fl)~mU6u^<7eFt3@5im zM2qaCQcM&9I)JZo3S%(>`t8(aEI~p9{ZGk=x--ORpKVhIv~D2@0WL+5V!%!If!VT( zeiC8jrYp*;=Oo?(vSqmx2j5phv3142@aSwJi z%Uio%$M0%N@I}6Q5tdS;`DtJ7shN7cJ}F)6t_Lz*KIc3ozMf+dbEeF=H2rFEXN-$; zEU&=;Hnw@tDv2PErY1%NMz#kxDb?)L1CHYQ_N$bz=@3`v&#JLwA|4@_7jfj|I^dlVWV^v2zG{W^R*oBegM$2~s0okuu$yV&w*h;Ad;uq?QKEpTX+)+uf8BHN) z7ax>?s#?0C@v+<6VBw#&1hqCW9vBf`=P62Z<*bAJ!A{Pm=b+(n0<@K=PWH2=7=B6C z;f>rZsp0+2eM`Xhh(OBsUCygn|JnxVY?_GU-Q6m!fqDpGcU|qgto`@y(uHvyH9!`0 zJ2SkxctF1trkPVUgQI zM%LGoXzg1Q-0Tk(k8iAuF?>KjcRC|a(CeB<0c`8%&v!|o2K0?&&$eu&kGpny;2{Kf zRKM>6bOY_BT5sf72Bin`cz+fAsMfKqO}w^iavF*pjH^l~oLBZ|KPaZz8g;8R33c%> z2Qwa@G#Df>Hx_HtkSM{QR@F0w44@>ZGa6gf1e}_u$#Xy0tMR!KIuyFDe>`}_-+0|cQ9VT4!q3$(urR*a zS~4pG`f`J@R+H(Mu7_N%(%P=c=8-5xT|fQ0(lO(0xJzlv*SFt6waB%wv82Y%5j92}GCV?*2KCbwkY&0|WD|wq6)T*h(@{ zYBsxIIx_}V>$dZWJ22llE_fk&74|;=YP0Cv6GieHz?b4*{ds@%_L@6&*O*;+K+=+MBLr=K3;8MSTFM=LbZA!Q?kT zluP44&QoHaR+1cysUg!lR*zfRfD0;HpUx$HckrBswp!U8m7v_a)0@P)BreC#fzdaB z)`PYiWgom36%SRP^+wtjlvYO`kK)M$!RjY8ldLbn7L5{L+oBp%X)=ZHkP|b0O$2J& zH^m9xEQ?Bdi?zA0MGSn`81Lc)8sE3b!OX7Ca0b(`j$%+nd$zi`#U8tHjYDWkUZ;Lz z4Qut4(D(gt&??VxI(sipMz`{@r$=_1YO5E@da*YfGPloW$K20sHp-0(bQ!@66Y*$r zJ$gm;&D!HpvgmvV#ZbT35#RDo7Z&Q8`^+}`(Sjx$7j4F6olvO@<+wgrx&t&X!;mpwLKo!s?n$nD(4vP08V#*#O>!8p_F*Q@XYsaO}$`tR3{ z=3py}jkjkdM*4FJu(t!87v_Kz3K+YTu{h zM2*xY&-^!{-Lwt+x0;~}Wo&Y?G^d=YX@Oa{UuapJL5L~qbSr2UBBUp?zfdDpea(pavprZ1_jO)OJyk)p_mo5va! zEu>^`&or*C9uGpz7-GN+509uUE{^%u3uIK4F#vLPnmmE;Daf}w07ho?1F7tiMO`kN zjhXn*{L!;&^;29p){Y18##5elp7`xx1-sqVW#)iR&GO>!ZYw-dvcbuTgB8m6sktJ( zA;7c&l^J38E$Veb!gOJeNO>6iqzlVDm@q~7a-J%e%&>>58WUMI1;@|3vVvmw}RZsWA=6b#?3G$?iRi45-A zwy8*3Zrs00_yWp_m9+W_sLvjUJvDxJ9MV+Sx}Pb|0<1d9U$Tj|8XJT-UfMFpc&O)552$FZ0DfN-VK04IRyke9#69#L#wK)^ck9( za$;3sM2u()&*@qt#tzaHEyH^-OYSEP>=$2gMl@)6Q-Qo!9X7bM8I^wKQVmAF9cZ>o zS6WJ`CV6lS?yOJ3=swoef?p}fh2LzkI~LAXO%HkCUNcGB7EA1T%B@YGGDm?ves=6m znkFkxFEucT95OJ8pW+w?ScsqGHB}qW%VQ)MlHuSg)RlSQ=XW6Na!2NY-vJnLrux1v zKul5O(jHgJ4uO~;J- zUQ1VKMJtDlm#w$Js|z?bNtB!Vl|$KPWmA%-YCr|1Yt1->?!R5tHVgH&4i+EA3SpiG za&V}2Cr+;DkI?Z+BrFZQgWiok4}x_Zs^ErPRlAwKD|9pZv;&Ncg0E&_`YL&*ri;|S z9B|&u_~k4-%vF6`{!C9^GiGmW0ur~YjHsCa;wuK>%cnduAS{{G@Ze%?dgd zduYm4`52EE(#jbmM>y9CXh;xS0=`52EpCqIF6QZ$=iH;wa3*?F#&Y(iDe{}DV~UGc zn-N9{=W9F>``@gDSh7t4Y+qF>oTC(Mn>qIk?kTw%MSDV#;uK%w`F_zY?EDU+>G9W8OT^LVHap=~dTv#`hZSta$D5GaRC>NyAAzKSQt+!k3 z-m`K|NrN(?5-qgcW%Kg^Fg6u1yEMN}e7r3jx4CgIEiO-K-&7>-3cG732(RFf-lUvb z?n!B}N(eRB$mf=q&3R$d|B=^ddq(r)a%v+2#Wqe@0g>%jdNh<4J{=~xvojWa|BS6J z_S|0 zf(P|vp9RI~Uwz;zuJKq0UzKlHRfy^?yK6ZTYA4gI%3LfkcFaxNY`(S@i^MZDo3V~XN z=Dux1){`Kggq5nwIqz%4pcS`_;s6=N=^Xm4U&!@p`!=Z#Ay;R+g26G#J?mhJF(O5? z2i>t4Hgtx=2D9Cl6}ewvX*dxY#_Bekz?%EjmXCGv+fHJCoACsWUf{aoKuZ6AlsF~A=Rx2LDl2=Ldq z-z4C~C&)5YB)`H@I{EIa{BgHXBSgz)b3xJF0T1Ew;n8(&Xl3RW|IX*}{5F}3%av?L z+iAFfp_3Nh#`8gGtJPYTs$DgG=;G-)b;7#(*L=%nyxu6ASAfmomI~YC591rSPQw~$ zhX&}Y? zS81t$YObYch)IpJmZd^@%Xc$G1@wjRi-!djg$g2apz8xsSY1su#Wu^sK>XQy>lftG zHsTjy8=_-msW|O{(pz^z-n9Z$r`1|I1Evjr>vLN#J$`O96_yrxaI=-KM*@t zJqNO<8)~w=2#JQR4tuNvj~cHGEFGU2RupIEItU$F?OnU!Npz~a>PrDLJ=)F2$?QkxZfpB)!77r8i@s7^ z-f!)~wI?YpjP_BvnF60o4z|bnw;6EDSL^&ce)i?V&QyYM?o&cYIce z{@KVYIc^B4dNTG+tZarB8rZj3;@GuT4~ZWSL7y)#mTB?!T73A1J&(bZH%IWpf<(OcZvr{ztB$7PG2k1&_WMMTo57birSzpGaW_1!yG zW2REkr7w@gON`KepQ;NDZ+w0%5XU?PoAcEm-H zy7#{G7E=*^7!9Wjl{x*Yw&BupAcdBMy>gO0<;7^yUDY?TMe5A$Y~34H?%f=C*gt_+ zWyjiVsgx(|0}YH>shYn%2^D}sF-wBWyIfp!`KdOB>816Z z?u#Ip+ORsD-j4{xfrzf>wNoLzYj9Hyz4p)b5loHrvv9FMv$j%)F9(swls;g$B(-D% z>QYN7(GAyKUvRSCwT>N!t6H>gE!2ErcbalIfb^g{8)z_D)RFxhPMYd9?=^-Yv86Q8 zo*>a8G2oiFmU_H-{tFMQaX4&rEHpzYx_+YCv&nA_gv7>7se*>2$D4coB=8j(_s^+9 zB(}>`vSkOOfH1o;a5{uE;5%CIF%R#r03@Up=N0ten8cJhWhrB{5PES}VGBCCl(j%f z{=|p@q0G8UM3FhC7$L*AE5}5w+NZaU{uW7?1qLR^ZeCy(MQs#`cddH1*XUJxC+6;k zcGo8i?t_+50@c+zULs*MSb?KtXS&R8WxjJX+Ws`H*`_`|3G@sWb?_CZ?pqcQ zBqg*jO%>Q7`Zn-W%8Z_~fAFjs;=FZN+dv0f&@f;pFl;|NxNZw2eA6)NQa<%{$go15 zI(j>_$TpdpM9JYoBdp5r^|C`4canAyvAODyPMTkQ)t*Pp5=Eox?bv z1&nU%MvnUVE%0M~D|TvO{Cf0R$K8JM^@ z(v5-rTMc=rwQH|!Om0>5SKha}=C%0EF`@hOmxdg>KP;fH7(7dw%PFuy&lV{8$_T5A zM2epp5!IizK&ew_(F-kA{p_;#b;#q=1s8+f!iscrB1CJ9Nz*faU5_2N{7kp+7V=dS z?tm6%wHE8Otv2|LHfyJ#MoOf1rHF(TNBYzqmrWbmdB>(P#lsi5CTKbp!pFv6x^Zwv{IKhjP$OgtI(!>khGod`io+mM0bB@5IoGFwbnr-P)CFq zlAo^B9VA;DKlS5gT^ee7)?OwTqy^_RyX<}Y1YW6A5%UUD{MF>>eRHfwaX_K!svat0 z$4=k00t61CM=Ke)N~(%T{Es+=KS2w>qZ|G|gBJe8J^YDo_#M0OJI3MvO8ifl#NUD; g{- @@ -43,10 +44,12 @@ export function TrainingModal(props: { open: boolean }) { Welcome to the Olympus quick start guide! This tour will guide you through the basics of DCS Olympus. You can navigate through the steps using the "Next" and "Previous" buttons at the bottom of the screen, or select a topic from the list below.

    -
    +
    setStep(1)}> @@ -92,7 +95,7 @@ export function TrainingModal(props: { open: boolean }) {
    setStep(15)}> - Game master mode + Commander mode
    @@ -364,8 +367,8 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > -

    The unit marker (1 of 2)

    @@ -374,7 +377,12 @@ export function TrainingModal(props: { open: boolean }) { players only). It has the following parts:

    -
    +
    setMarkerComponent(1)} + onMouseLeave={() => setMarkerComponent(null)} + onClick={() => setMarkerComponent(1)} + >

    Unit short label or type symbol

    -
    +
    setMarkerComponent(2)} + onMouseLeave={() => setMarkerComponent(null)} + onClick={() => setMarkerComponent(2)} + >

    Flight level

    -
    +
    setMarkerComponent(3)} + onMouseLeave={() => setMarkerComponent(null)} + onClick={() => setMarkerComponent(3)} + >

    Ground speed (knots)

    -
    +
    setMarkerComponent(4)} + onMouseLeave={() => setMarkerComponent(null)} + onClick={() => setMarkerComponent(4)} + >

    Bullseye position

    -
    +
    setMarkerComponent(5)} + onMouseLeave={() => setMarkerComponent(null)} + onClick={() => setMarkerComponent(5)} + >

    Fuel state (% of internal)

    -
    +
    setMarkerComponent(6)} + onMouseLeave={() => setMarkerComponent(null)} + onClick={() => setMarkerComponent(6)} + >

    A/A weapons (Fox 1/2/3 & guns)

    -
    +
    setMarkerComponent(7)} + onMouseLeave={() => setMarkerComponent(null)} + onClick={() => setMarkerComponent(7)} + >

    +

    Hover your cursor or click on the components to see them highlighted in the image.

    Most of these information is only available for air units. Ground units will show the type symbol, the name, and the coalition, and the fuel level is replace by the unit's health (%). @@ -666,13 +705,24 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Mission drawings

    -

    Mission drawings are useful to provide information from the mission creator. They can define borders, Areas of Operation, navigational points and more.

    -

    Mission drawings are automatically imported from the mission and can be shown using the drawing menu. You can enable or disable different sections, change the opacity, and look for specific drawings or navpoint using the shearch bar.

    +

    + Mission drawings are useful to provide information from the mission creator. They can define borders, Areas of Operation, navigational points + and more.{" "} +

    +

    + Mission drawings are automatically imported from the mission and can be shown using the drawing menu. You can enable or disable different + sections, change the opacity, and look for specific drawings or navpoint using the shearch bar. +

    You can also define your own drawings, which can be useful as reference, or as a way to automatically create IADS.

    -

    Use the button on the upper right of the drawings panel for more info.

    +

    + Use the button on the upper right of the drawings panel for more info.{" "} +

    )} @@ -687,10 +737,31 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > +

    The audio backend

    -

    -

    +

    + The audio backend is, for all intents and purposes, a client for the great open source mod{" "} + + DCS-SRS + {" "} + baked directly into DCS Olympus. +

    +

    + It allows you to talk on frequency with players operating in the mission, as well as other Olympus operators. Moreover, it allows to create fake + "loudspeakers", i.e. sound sources in game that people will only be able to hear if close enough. +

    +

    + The audio backend allows you to perform useful operations on audio sources: you can mix your microphone with one or multiple fire sources (e.g. + to play a background noise like a firefight sound), or you can play files directly, e.g. for playing METAR files, or to blast music for your + friends.{" "} +

    +

    + Use the button on the upper right of the audio backend panel for more info.{" "} +

    )} @@ -706,9 +777,29 @@ export function TrainingModal(props: { open: boolean }) { `} >
    -

    Game master mode

    -

    -

    +

    Commander mode

    +

    + The Commander mode is a special way of operation of Olympus that forces some limitations to the operator in order to create a more challenging + environment. This can be used to create "games" where players in DCS play against the operators, forcing them to carefully place and control + their units. +

    +

    + These limitations are of two types: +

  • + Spawning limitations: if enabled, spawning limitations force operators by proving an initial points "budget". Every unit costs a certain + amount of points, and once all points are used, no more units can be spawned. Moreover, the game is divided into two phases, the "setup" phase + and the "combat" phase. During the setup phase, operators can freely spawn units in the air and on the ground. Once the combat phase starts, + ground units can no longer be spawned, and aircraft/helicopters can only be spawned at airbases.{" "} +
  • +
  • + Detection limitations: always enabled, this mode forces operators to use the same detection methods as players. This means that units will not + be able to see each other unless they are in visual range, or if they are using a radar or other sensor. This is useful to create a more + realistic environment, where units have to rely on their sensors and must be placed with caution.{" "} +
  • {" "} +

    +

    + Use the button on the upper right of the game master option panel for more info.{" "} +

    )} diff --git a/frontend/react/src/ui/panels/airbasemenu.tsx b/frontend/react/src/ui/panels/airbasemenu.tsx index bfbcbfd4..b1a5d829 100644 --- a/frontend/react/src/ui/panels/airbasemenu.tsx +++ b/frontend/react/src/ui/panels/airbasemenu.tsx @@ -75,7 +75,31 @@ export function AirbaseMenu(props: { open: boolean; onClose: () => void; childre filteredBlueprints.sort((a, b) => a.label.localeCompare(b.label)); return ( - + { + return ( +
    +

    Airbase menu

    +
    + In the airbase menu, you can see the details of the selected airbase, including its ICAO name, elevation, runways, and TACAN (if present). You can also spawn units at the airbase. +
    +
    + The options available to you will be the same as in a normal spawn menu, but you will be able to only spawn aircraft or helicopters. Airplanes are spawned at available parking spots or on the runway, depending on the selected airbase. Not all aircraft can be spawned, so make sure the airbase is big enough. +
    +
    + You will only be able to spawn units that are of the same coalition as the airbase. If you are playing in commander mode and the airbase does not belong to your coalition, you will not be able to spawn units. +
    +
    + The coalition of an airbase depends on what ground units control it. A way to change the coalition of an airbase is to spawn a ground unit of the desired coalition at the airbase. The airbase will then change its coalition to the one of the unit. +
    +
    + ); + }}>
    void; children?: JSX.Element | JSX.Element[] }) { return ( - +
    void; childre }, []); return ( - +
    void; c }, []) return ( - +
    Explosion type From 5d274a3efba4c7cd1276b40049741ee1e37f347a Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Mon, 31 Mar 2025 22:43:27 +0200 Subject: [PATCH 06/12] chore: Bumped version number --- .../react/src/ui/modals/trainingmodal.tsx | 116 ++++++++++-------- notes.txt | 19 +++ version.json | 2 +- 3 files changed, 84 insertions(+), 53 deletions(-) diff --git a/frontend/react/src/ui/modals/trainingmodal.tsx b/frontend/react/src/ui/modals/trainingmodal.tsx index 427b810f..af946027 100644 --- a/frontend/react/src/ui/modals/trainingmodal.tsx +++ b/frontend/react/src/ui/modals/trainingmodal.tsx @@ -98,12 +98,13 @@ export function TrainingModal(props: { open: boolean }) { Commander mode
    -
    + {/* TODO
    {}}> Advanced topics
    + } */}
    Every panel has a dedicated integrated wiki. Click on the{" "} @@ -130,9 +131,10 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Main navbar

    @@ -154,9 +156,10 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Spawning units (1 of 3)

    @@ -182,9 +185,10 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Spawning units (2 of 3)

    @@ -193,9 +197,10 @@ export function TrainingModal(props: { open: boolean }) {

    You can edit the unit properties like in the previous method. Remember you can open the unit summary section to get more info on the unit.

    - + You can change the spawn heading of the unit by dragging the arrow on the map. This will also change the spawn heading in the unit properties.
    @@ -212,9 +217,10 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Spawning units (3 of 3)

    @@ -236,9 +242,10 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Controlling units (1 of 4)

    @@ -251,9 +258,10 @@ export function TrainingModal(props: { open: boolean }) { destinations will be shared between them.

    - + Holding down the right mouse button enters "group movement" mode. The units will hold their relative positions and move as a formation. Move the mouse to choose the formation heading. Ctrl can be pressed to create a path.
    @@ -271,9 +279,10 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Controlling units (2 of 4)

    @@ -305,9 +314,10 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Controlling units (3 of 4)

    @@ -333,9 +343,10 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Controlling units (4 of 4)

    @@ -367,9 +378,12 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - + `} + />

    The unit marker (1 of 2)

    @@ -671,9 +685,10 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Interacting with the map (2 of 2)

    @@ -685,9 +700,10 @@ export function TrainingModal(props: { open: boolean }) { flex w-full flex-col content-center justify-center gap-4 `} > - + On the bottom right corner of the map, you can find the coordinates panel, providing the coordinates of the mouse cursor, as well as its bullseye position and the ground elevation. Click on the coordinates to rotate format.

    @@ -705,10 +721,9 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    Mission drawings

    @@ -737,10 +752,9 @@ export function TrainingModal(props: { open: boolean }) { sm:gap-16 `} > - +

    The audio backend

    @@ -837,11 +851,9 @@ export function TrainingModal(props: { open: boolean }) { key={i + 1} className={` h-4 w-4 rounded-full - ${ - i + 1 === step - ? "bg-blue-700 shadow-white" - : `bg-gray-300/10` - } + ${i + 1 === step ? "bg-blue-700 shadow-white" : ` + bg-gray-300/10 + `} `} /> ))} diff --git a/notes.txt b/notes.txt index 89e678f3..491bde63 100644 --- a/notes.txt +++ b/notes.txt @@ -1,3 +1,22 @@ +v2.0.2 ==================== +feat: Added more docs to ingame wiki +feat: Added threat rings to spawn tool +feat: Added unit ranges on spawn menu +fix: Removed incorrect help string in compact effect spawn menu +fix: Added missing fire effect +feat: Added error message if admin password wrong +fix: Radio menu names being squashed when too long +fix: Added callback to close all tooltips on click +fix: "Follow roads" toggle available for navy units +fix: Not airborne units no longer targeted, racetracks not drawn for airborne units +feat: Added airborne variable +feat: Session data is now saving selected map source +fix: MGRS are now separed properly +fix: State buttons hovering styles will be applied instantly +feature: Added ability to exclusively show unit types +feat: Added header button to quick toggle navpoints drawing +refactor: Reduced the zoom of the go to drawing feature + v2.0.1 ==================== Changes: feat: Added starred spawns to spawn menu and ability to remove starred spawns diff --git a/version.json b/version.json index 5d528040..9be6c4fc 100644 --- a/version.json +++ b/version.json @@ -1,3 +1,3 @@ { - "version": "v2.0.1" + "version": "v2.0.2" } From ddab28f8743b4da929b7a00f863bbffd83dae61e Mon Sep 17 00:00:00 2001 From: MarcoJayUsai Date: Tue, 1 Apr 2025 14:46:56 +0200 Subject: [PATCH 07/12] fix(drawings): coalition commanders will not see enemy coalition drawings and navpoints --- .../react/src/map/drawings/drawingsmanager.ts | 64 +++++++++++++++++-- 1 file changed, 57 insertions(+), 7 deletions(-) diff --git a/frontend/react/src/map/drawings/drawingsmanager.ts b/frontend/react/src/map/drawings/drawingsmanager.ts index 108bda5e..19f739f7 100644 --- a/frontend/react/src/map/drawings/drawingsmanager.ts +++ b/frontend/react/src/map/drawings/drawingsmanager.ts @@ -1,9 +1,10 @@ import { decimalToRGBA } from "../../other/utils"; import { getApp } from "../../olympusapp"; -import { DrawingsInitEvent, DrawingsUpdatedEvent, MapOptionsChangedEvent, SessionDataLoadedEvent } from "../../events"; +import { CommandModeOptionsChangedEvent, DrawingsInitEvent, DrawingsUpdatedEvent, MapOptionsChangedEvent, SessionDataLoadedEvent } from "../../events"; import { MapOptions } from "../../types/types"; import { Circle, DivIcon, Layer, LayerGroup, layerGroup, Marker, Polygon, Polyline } from "leaflet"; import { NavpointMarker } from "../markers/navpointmarker"; +import { BLUE_COMMANDER, GAME_MASTER, NONE, RED_COMMANDER } from "../../constants/constants"; export abstract class DCSDrawing { #name: string; @@ -582,12 +583,6 @@ export class DCSDrawingsContainer { if (othersContainer.getDrawings().length === 0) this.removeSubContainer(othersContainer); // Remove empty container } - // initNavpoints(drawingsData) { - // const newContainer = new DCSDrawingsContainer('Navpoints', this); - // this.addSubContainer(newContainer); - // newContainer.initFromData(drawingsData); - // } - getLayerGroup() { return this.#layerGroup; } @@ -705,6 +700,7 @@ export class DrawingsManager { #sessionDataDrawings = {}; #sessionDataNavpoints = {}; #initialized: boolean = false; + #hiddenContainers: Record = {}; constructor() { const drawingsLayerGroup = new LayerGroup(); @@ -727,6 +723,13 @@ export class DrawingsManager { this.#drawingsContainer.setVisibility(getApp().getMap().getOptions().showMissionDrawings); this.#navpointsContainer.setVisibility(getApp().getMap().getOptions().showMissionNavpoints); }); + + CommandModeOptionsChangedEvent.on((commandOptions) => { + if (commandOptions.commandMode !== GAME_MASTER) { + this.restrictCoalitionLayers(commandOptions.commandMode) + } + this.restoreHiddenLayers(commandOptions.commandMode); + }) } initDrawings(data: { drawings: Record> }): boolean { @@ -747,6 +750,53 @@ export class DrawingsManager { } } + private restrictContainer(containerName: string, targetContainer: any, hiddenKey: string) { + const container = targetContainer.getSubContainers().find(c => c.getName().toLowerCase() === containerName.toLowerCase()); + if (container) { + this.#hiddenContainers[hiddenKey] = { + parent: container['#parent'], + container: container + }; + container.setVisibility(false); + targetContainer.removeSubContainer(container); + } + } + + restrictCoalitionLayers(playerRole: string) { + if (playerRole === RED_COMMANDER) { + this.restrictContainer('Blue', this.#drawingsContainer, 'blue_drawings'); + this.restrictContainer('blue', this.#navpointsContainer, 'blue_navpoints'); + } else { + this.restrictContainer('Red', this.#drawingsContainer, 'red_drawings'); + this.restrictContainer('red', this.#navpointsContainer, 'red_navpoints'); + } + } + + private restoreContainer(key: string, targetContainer: any) { + if (this.#hiddenContainers[key]) { + console.log('this.#hiddenContainers[key] esiste ', this.#hiddenContainers); + + const container = this.#hiddenContainers[key].container; + targetContainer.addSubContainer(container); + container.setVisibility(true); + } + } + + restoreHiddenLayers(playerRole: string) { + console.log('--- restoring hidden layers for role ', playerRole); + + const roleContainers: Record = { + [RED_COMMANDER]: ['red_drawings', 'red_navpoints'], + [BLUE_COMMANDER]: ['blue_drawings', 'blue_navpoints'], + [GAME_MASTER]: ['red_drawings', 'red_navpoints', 'blue_drawings', 'blue_navpoints'] + }; + + roleContainers[playerRole]?.forEach((key) => { + const targetContainer = key.includes('drawings') ? this.#drawingsContainer : this.#navpointsContainer; + this.restoreContainer(key, targetContainer); + }); + } + getDrawingsContainer() { return this.#drawingsContainer; } From e6ef6cd05be7f71a5e9c1eab9d06d22f69f8df8f Mon Sep 17 00:00:00 2001 From: MarcoJayUsai Date: Tue, 1 Apr 2025 15:01:51 +0200 Subject: [PATCH 08/12] fix(drawings): not initializing empty layers --- frontend/react/src/map/drawings/drawingsmanager.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/frontend/react/src/map/drawings/drawingsmanager.ts b/frontend/react/src/map/drawings/drawingsmanager.ts index 19f739f7..4210ca1a 100644 --- a/frontend/react/src/map/drawings/drawingsmanager.ts +++ b/frontend/react/src/map/drawings/drawingsmanager.ts @@ -528,7 +528,9 @@ export class DCSDrawingsContainer { initFromData(drawingsData) { let hasContainers = false; Object.keys(drawingsData).forEach((layerName: string) => { - if (drawingsData[layerName]["name"] === undefined && drawingsData[layerName]["callsignStr"] === undefined) { + const layerIsAContainer = drawingsData[layerName]["name"] === undefined && drawingsData[layerName]["callsignStr"] === undefined; + const layerIsNotEmpty = Object.keys(drawingsData[layerName]).length > 0; + if (layerIsAContainer && layerIsNotEmpty) { const newContainer = new DCSDrawingsContainer(layerName, this); this.addSubContainer(newContainer); newContainer.initFromData(drawingsData[layerName]); @@ -580,7 +582,10 @@ export class DCSDrawingsContainer { else this.addDrawing(newDrawing); }); - if (othersContainer.getDrawings().length === 0) this.removeSubContainer(othersContainer); // Remove empty container + if (othersContainer.getDrawings().length === 0) { + this.removeSubContainer(othersContainer); // Remove empty container + // FIXME: it's not working for main containers. + } } getLayerGroup() { From 874e01b031230db04091acaaf7156ddb1429826c Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Tue, 1 Apr 2025 21:04:35 +0200 Subject: [PATCH 09/12] Update audiomanager.ts fix: Audio menu frequencies list not working, radios reset when changing input/output --- frontend/react/src/audio/audiomanager.ts | 7 ++++++- frontend/react/src/sessiondata.ts | 6 ++++++ frontend/react/src/ui/panels/audiomenu.tsx | 19 ++++++++++++++++--- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/frontend/react/src/audio/audiomanager.ts b/frontend/react/src/audio/audiomanager.ts index d5b092ed..f11b4834 100644 --- a/frontend/react/src/audio/audiomanager.ts +++ b/frontend/react/src/audio/audiomanager.ts @@ -2,7 +2,7 @@ import { AudioManagerState, AudioMessageType, BLUE_COMMANDER, GAME_MASTER, Olymp import { MicrophoneSource } from "./microphonesource"; import { RadioSink } from "./radiosink"; import { getApp } from "../olympusapp"; -import { coalitionToEnum, makeID } from "../other/utils"; +import { coalitionToEnum, deepCopyTable, makeID } from "../other/utils"; import { FileSource } from "./filesource"; import { AudioSource } from "./audiosource"; import { Buffer } from "buffer"; @@ -465,7 +465,9 @@ export class AudioManager { if (this.#devices.includes(input)) { this.#input = input; AudioManagerInputChangedEvent.dispatch(input); + let sessionData = deepCopyTable(getApp().getSessionDataManager().getSessionData()); this.stop(); + getApp().getSessionDataManager().setSessionData(sessionData); this.start(); this.#options.input = input.deviceId; AudioOptionsChangedEvent.dispatch(this.#options); @@ -478,8 +480,11 @@ export class AudioManager { if (this.#devices.includes(output)) { this.#input = output; AudioManagerOutputChangedEvent.dispatch(output); + let sessionData = deepCopyTable(getApp().getSessionDataManager().getSessionData()); this.stop(); + getApp().getSessionDataManager().setSessionData(sessionData); this.start(); + this.#options.output = output.deviceId; AudioOptionsChangedEvent.dispatch(this.#options); } else { diff --git a/frontend/react/src/sessiondata.ts b/frontend/react/src/sessiondata.ts index d0d26479..763df95e 100644 --- a/frontend/react/src/sessiondata.ts +++ b/frontend/react/src/sessiondata.ts @@ -187,6 +187,12 @@ export class SessionDataManager { return this.#sessionData; } + setSessionData(sessionData: SessionData) { + this.#sessionData = sessionData; + + this.#saveSessionData(); + } + #saveSessionData() { if (getApp().getState() === OlympusState.SERVER) return; diff --git a/frontend/react/src/ui/panels/audiomenu.tsx b/frontend/react/src/ui/panels/audiomenu.tsx index d7a6e0bc..83b12cc0 100644 --- a/frontend/react/src/ui/panels/audiomenu.tsx +++ b/frontend/react/src/ui/panels/audiomenu.tsx @@ -281,7 +281,7 @@ export function AudioMenu(props: { open: boolean; onClose: () => void; children? /* Count how many radios have a non null frequency */ const activeRadios = clientData.radios.reduce((acc, radio) => { - if (radio.frequency > 10) acc++; + if (radio.frequency > 1000) acc++; return acc; }, 0); @@ -299,10 +299,23 @@ export function AudioMenu(props: { open: boolean; onClose: () => void; children?

    {clientData.name}
    {clientData.radios.map((radio, idx) => { - return radio.frequency > 10 ? + return radio.frequency > 1000 ? ( -
    +
    { + // Find if any radio is already tuned to this frequency + const alreadyTuned = sinks.find((sink) => { + if (sink instanceof RadioSink) { + return sink.getFrequency() === radio.frequency && sink.getModulation() === radio.modulation; + } + return false; + }); + if (!alreadyTuned) { + let newRadio = getApp().getAudioManager().addRadio(); + newRadio.setFrequency(radio.frequency); + newRadio.setModulation(radio.modulation); + } + }}> {`${zeroAppend(radio.frequency / 1e6, 3, true, 3)} ${radio.modulation ? "FM" : "AM"}`}
    From 77ceae21e125eaa903dceeae5d66f2ee9110c4fa Mon Sep 17 00:00:00 2001 From: MarcoJayUsai Date: Thu, 3 Apr 2025 09:25:52 +0200 Subject: [PATCH 10/12] chore: removed comments --- frontend/react/src/map/drawings/drawingsmanager.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/frontend/react/src/map/drawings/drawingsmanager.ts b/frontend/react/src/map/drawings/drawingsmanager.ts index 4210ca1a..1adf777e 100644 --- a/frontend/react/src/map/drawings/drawingsmanager.ts +++ b/frontend/react/src/map/drawings/drawingsmanager.ts @@ -779,8 +779,6 @@ export class DrawingsManager { private restoreContainer(key: string, targetContainer: any) { if (this.#hiddenContainers[key]) { - console.log('this.#hiddenContainers[key] esiste ', this.#hiddenContainers); - const container = this.#hiddenContainers[key].container; targetContainer.addSubContainer(container); container.setVisibility(true); @@ -788,8 +786,6 @@ export class DrawingsManager { } restoreHiddenLayers(playerRole: string) { - console.log('--- restoring hidden layers for role ', playerRole); - const roleContainers: Record = { [RED_COMMANDER]: ['red_drawings', 'red_navpoints'], [BLUE_COMMANDER]: ['blue_drawings', 'blue_navpoints'], From 24015686ead9bb46a00617b2ad4b6056c1e7c76a Mon Sep 17 00:00:00 2001 From: MarcoJayUsai Date: Thu, 3 Apr 2025 14:43:38 +0200 Subject: [PATCH 11/12] feature(navpoints): navpoint marked as TGT have a special icon. Styles reworked. --- .../public/images/markers/navpoint-tgt.svg | 4 +++ .../react/public/images/markers/navpoint.svg | 3 ++ .../react/src/map/drawings/drawingsmanager.ts | 2 +- .../react/src/map/markers/navpointmarker.ts | 33 +++++++++++++++++-- .../src/map/markers/stylesheets/navpoint.css | 10 +++--- 5 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 frontend/react/public/images/markers/navpoint-tgt.svg create mode 100644 frontend/react/public/images/markers/navpoint.svg diff --git a/frontend/react/public/images/markers/navpoint-tgt.svg b/frontend/react/public/images/markers/navpoint-tgt.svg new file mode 100644 index 00000000..7f7cd846 --- /dev/null +++ b/frontend/react/public/images/markers/navpoint-tgt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/frontend/react/public/images/markers/navpoint.svg b/frontend/react/public/images/markers/navpoint.svg new file mode 100644 index 00000000..b9075e11 --- /dev/null +++ b/frontend/react/public/images/markers/navpoint.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/frontend/react/src/map/drawings/drawingsmanager.ts b/frontend/react/src/map/drawings/drawingsmanager.ts index 4210ca1a..ccb208a0 100644 --- a/frontend/react/src/map/drawings/drawingsmanager.ts +++ b/frontend/react/src/map/drawings/drawingsmanager.ts @@ -460,7 +460,7 @@ export class DCSNavpoint extends DCSDrawing { constructor(drawingData, parent) { super(drawingData, parent); - this.#point = new NavpointMarker([drawingData.lat, drawingData.lng], drawingData.callsignStr, drawingData.comment); + this.#point = new NavpointMarker([drawingData.lat, drawingData.lng], drawingData.callsignStr, drawingData.comment, drawingData.tag); this.setVisibility(true); } diff --git a/frontend/react/src/map/markers/navpointmarker.ts b/frontend/react/src/map/markers/navpointmarker.ts index f7092794..2ffba311 100644 --- a/frontend/react/src/map/markers/navpointmarker.ts +++ b/frontend/react/src/map/markers/navpointmarker.ts @@ -1,14 +1,35 @@ import { DivIcon, LatLngExpression, MarkerOptions } from "leaflet"; import { CustomMarker } from "./custommarker"; +import { SVGInjector } from "@tanem/svg-injector"; export class NavpointMarker extends CustomMarker { #callsignStr: string; #comment: string; + #tag: string; - constructor(latlng: LatLngExpression, callsignStr: string, comment?: string) { + constructor(latlng: LatLngExpression, callsignStr: string, comment: string, tag: string) { super(latlng, { interactive: false, draggable: false }); this.#callsignStr = callsignStr; comment ? this.#comment = comment : null; + tag ? this.#tag = tag : null; + } + + private getImage() { + switch (this.#tag) { + case 'TGT': + return 'images/markers/navpoint-tgt.svg' + default: + return 'images/markers/navpoint.svg' + } + } + + private getSize() { + switch (this.#tag) { + case 'TGT': + return '20px' + default: + return '8px' + } } createIcon() { @@ -16,7 +37,7 @@ export class NavpointMarker extends CustomMarker { let icon = new DivIcon({ className: "leaflet-navpoint-icon", iconAnchor: [0, 0], - iconSize: [50, 50], + iconSize: [2, 2], }); this.setIcon(icon); @@ -26,6 +47,14 @@ export class NavpointMarker extends CustomMarker { // Main icon let pointIcon = document.createElement("div"); pointIcon.classList.add("navpoint-icon"); + var img = document.createElement("img"); + img.src = this.getImage(); + img.onload = () => { + SVGInjector(img); + }; + img.style.width = this.getSize(); + img.style.height = this.getSize(); + pointIcon.appendChild(img); el.append(pointIcon); // Label diff --git a/frontend/react/src/map/markers/stylesheets/navpoint.css b/frontend/react/src/map/markers/stylesheets/navpoint.css index a3e30eb9..52cd8082 100644 --- a/frontend/react/src/map/markers/stylesheets/navpoint.css +++ b/frontend/react/src/map/markers/stylesheets/navpoint.css @@ -5,11 +5,7 @@ gap: 10px; } .ol-navpoint-marker>.navpoint>.navpoint-icon { - height: 8px; - width: 8px; - background: white; - flex: none; - transform: rotate3d(0, 0, 1, 45deg); + filter: drop-shadow(1px 1px 1px rgba(0, 0, 0, 1)); } .ol-navpoint-marker>.navpoint>.navpoint-main-label { @@ -17,6 +13,8 @@ flex-direction: column; font-size: 10px; color: white; + text-shadow: -1px -1px 2px rgb(113, 113, 113), 1px -1px 2px rgb(113, 113, 113), -1px 1px 2px rgb(113, 113, 113), 1px 1px 2px rgb(113, 113, 113); + } .ol-navpoint-marker .navpoint-comment-box { @@ -24,4 +22,6 @@ font-style: italic; color: white; max-width: 50px; + text-shadow: -1px -1px 2px rgb(113, 113, 113), 1px -1px 2px rgb(113, 113, 113), -1px 1px 2px rgb(113, 113, 113), 1px 1px 2px rgb(113, 113, 113); + } \ No newline at end of file From 3964dafb9eaf18204ddf89b73035bd5dac212da8 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Sat, 5 Apr 2025 20:27:40 +0200 Subject: [PATCH 12/12] fix: Commander mode not working if AWACS reference coalition different from commanded coalition --- frontend/react/src/mission/missionmanager.ts | 11 +++ frontend/react/src/ui/panels/header.tsx | 74 +++++++++++++------- frontend/react/src/ui/panels/optionsmenu.tsx | 71 +++++++++++-------- frontend/react/src/unit/unit.ts | 10 ++- 4 files changed, 109 insertions(+), 57 deletions(-) diff --git a/frontend/react/src/mission/missionmanager.ts b/frontend/react/src/mission/missionmanager.ts index 68812ceb..190696f7 100644 --- a/frontend/react/src/mission/missionmanager.ts +++ b/frontend/react/src/mission/missionmanager.ts @@ -291,6 +291,17 @@ export class MissionManager { this.setSpentSpawnPoints(0); this.refreshSpawnPoints(); + if (commandModeOptions.commandMode === BLUE_COMMANDER && getApp().getMap().getOptions().AWACSCoalition !== "blue") { + getApp() + .getMap() + .setOption("AWACSCoalition", "blue" as Coalition); + } + else if (commandModeOptions.commandMode === RED_COMMANDER && getApp().getMap().getOptions().AWACSCoalition !== "red") { + getApp() + .getMap() + .setOption("AWACSCoalition", "red" as Coalition); + } + if (commandModeOptionsChanged) { CommandModeOptionsChangedEvent.dispatch(this.#commandModeOptions); } diff --git a/frontend/react/src/ui/panels/header.tsx b/frontend/react/src/ui/panels/header.tsx index 794d3e6e..eebf2bd7 100644 --- a/frontend/react/src/ui/panels/header.tsx +++ b/frontend/react/src/ui/panels/header.tsx @@ -272,12 +272,19 @@ export function Header() { {commandModeOptions.commandMode === GAME_MASTER && (
    1 + ? ` + cursor-pointer + hover:bg-olympus-400 + ` + : "" + } `} onClick={() => { - if (enabledCommandModes.length > 0) { + if (enabledCommandModes.length > 1) { let blueCommandModeIndex = enabledCommandModes.indexOf(BLUE_COMMANDER); let redCommandModeIndex = enabledCommandModes.indexOf(RED_COMMANDER); if (blueCommandModeIndex >= 0) getApp().getServerManager().setActiveCommandMode(BLUE_COMMANDER); @@ -287,14 +294,18 @@ export function Header() { }} > Game Master - {enabledCommandModes.length > 0 && ( + {enabledCommandModes.length > 1 && ( <> {loadingNewCommandMode ? ( ) : ( - + )} )} @@ -303,12 +314,19 @@ export function Header() { {commandModeOptions.commandMode === BLUE_COMMANDER && (
    1 + ? ` + cursor-pointer + hover:bg-blue-500 + ` + : "" + } + flex h-full rounded-md border-2 border-transparent bg-blue-600 + px-4 text-gray-200 `} onClick={() => { - if (enabledCommandModes.length > 0) { + if (enabledCommandModes.length > 1) { let gameMasterCommandModeIndex = enabledCommandModes.indexOf(GAME_MASTER); let redCommandModeIndex = enabledCommandModes.indexOf(RED_COMMANDER); if (redCommandModeIndex >= 0) getApp().getServerManager().setActiveCommandMode(RED_COMMANDER); @@ -318,12 +336,10 @@ export function Header() { }} > BLUE Commander - {enabledCommandModes.length > 0 && ( + {enabledCommandModes.length > 1 && ( <> {loadingNewCommandMode ? ( - + ) : ( )} @@ -334,12 +350,20 @@ export function Header() { {commandModeOptions.commandMode === RED_COMMANDER && (
    1 + ? ` + cursor-pointer + hover:bg-red-500 + ` + : "" + } + rounded-md border-2 border-transparent bg-red-600 px-4 + text-gray-200 `} onClick={() => { - if (enabledCommandModes.length > 0) { + if (enabledCommandModes.length > 1) { let gameMasterCommandModeIndex = enabledCommandModes.indexOf(GAME_MASTER); let blueCommandModeIndex = enabledCommandModes.indexOf(BLUE_COMMANDER); if (gameMasterCommandModeIndex >= 0) getApp().getServerManager().setActiveCommandMode(GAME_MASTER); @@ -349,12 +373,10 @@ export function Header() { }} > RED Commander - {enabledCommandModes.length > 0 && ( + {enabledCommandModes.length > 1 && ( <> {loadingNewCommandMode ? ( - + ) : ( )} @@ -463,7 +485,11 @@ export function Header() { onClick={(event) => unitTypeFilterClickHandler(event, entry[0])} checked={!mapHiddenTypes[entry[0]]} icon={entry[1]} - tooltip={"Hide/show " + entry[0] + " units. Tip: holding ctrl key while clicking will hide other unit categories. To show all units again, hold ctrl while clicking a displayed unit category."} + tooltip={ + "Hide/show " + + entry[0] + + " units. Tip: holding ctrl key while clicking will hide other unit categories. To show all units again, hold ctrl while clicking a displayed unit category." + } /> ); })} diff --git a/frontend/react/src/ui/panels/optionsmenu.tsx b/frontend/react/src/ui/panels/optionsmenu.tsx index 0f5eaa06..98fec5b0 100644 --- a/frontend/react/src/ui/panels/optionsmenu.tsx +++ b/frontend/react/src/ui/panels/optionsmenu.tsx @@ -4,8 +4,8 @@ import { OlCheckbox } from "../components/olcheckbox"; import { OlRangeSlider } from "../components/olrangeslider"; import { OlNumberInput } from "../components/olnumberinput"; import { getApp } from "../../olympusapp"; -import { MAP_OPTIONS_DEFAULTS, OlympusState, OptionsSubstate } from "../../constants/constants"; -import { BindShortcutRequestEvent, MapOptionsChangedEvent, ShortcutsChangedEvent } from "../../events"; +import { COMMAND_MODE_OPTIONS_DEFAULTS, GAME_MASTER, MAP_OPTIONS_DEFAULTS, OlympusState, OptionsSubstate } from "../../constants/constants"; +import { BindShortcutRequestEvent, CommandModeOptionsChangedEvent, MapOptionsChangedEvent, ShortcutsChangedEvent } from "../../events"; import { OlAccordion } from "../components/olaccordion"; import { Shortcut } from "../../shortcut/shortcut"; import { OlSearchBar } from "../components/olsearchbar"; @@ -29,6 +29,7 @@ export function OptionsMenu(props: { open: boolean; onClose: () => void; childre const [filterString, setFilterString] = useState(""); const [admin, setAdmin] = useState(false); const [password, setPassword] = useState(""); + const [commandModeOptions, setCommandModeOptions] = useState(COMMAND_MODE_OPTIONS_DEFAULTS); const checkPassword = (password: string) => { var hash = sha256.create(); @@ -56,6 +57,10 @@ export function OptionsMenu(props: { open: boolean; onClose: () => void; childre useEffect(() => { MapOptionsChangedEvent.on((mapOptions) => setMapOptions({ ...mapOptions })); ShortcutsChangedEvent.on((shortcuts) => setShortcuts({ ...shortcuts })); + + CommandModeOptionsChangedEvent.on((commandModeOptions) => { + setCommandModeOptions(commandModeOptions); + }); }, []); return ( @@ -222,36 +227,40 @@ export function OptionsMenu(props: { open: boolean; onClose: () => void; childre {}}> Show racetracks
    -
    { - mapOptions.AWACSCoalition === "blue" && getApp().getMap().setOption("AWACSCoalition", "neutral"); - mapOptions.AWACSCoalition === "neutral" && getApp().getMap().setOption("AWACSCoalition", "red"); - mapOptions.AWACSCoalition === "red" && getApp().getMap().setOption("AWACSCoalition", "blue"); - }} - > -
    -
    - { - mapOptions.AWACSCoalition === "blue" && getApp().getMap().setOption("AWACSCoalition", "neutral"); - mapOptions.AWACSCoalition === "neutral" && getApp().getMap().setOption("AWACSCoalition", "red"); - mapOptions.AWACSCoalition === "red" && getApp().getMap().setOption("AWACSCoalition", "blue"); - }} - coalition={mapOptions.AWACSCoalition} - /> - Coalition of unit bullseye info + <> + {commandModeOptions.commandMode === GAME_MASTER && ( +
    { + mapOptions.AWACSCoalition === "blue" && getApp().getMap().setOption("AWACSCoalition", "neutral"); + mapOptions.AWACSCoalition === "neutral" && getApp().getMap().setOption("AWACSCoalition", "red"); + mapOptions.AWACSCoalition === "red" && getApp().getMap().setOption("AWACSCoalition", "blue"); + }} + > +
    +
    + { + mapOptions.AWACSCoalition === "blue" && getApp().getMap().setOption("AWACSCoalition", "neutral"); + mapOptions.AWACSCoalition === "neutral" && getApp().getMap().setOption("AWACSCoalition", "red"); + mapOptions.AWACSCoalition === "red" && getApp().getMap().setOption("AWACSCoalition", "blue"); + }} + coalition={mapOptions.AWACSCoalition} + /> + Coalition of unit bullseye info +
    +
    + {" "} +
    Change the coalition of the bullseye to use to provide bullseye information in the unit tooltip.
    +
    +
    -
    - {" "} -
    Change the coalition of the bullseye to use to provide bullseye information in the unit tooltip.
    -
    -
    -
    + )} + { + this.#redrawMarker(); + }); } /********************** Abstract methods *************************/ @@ -881,7 +886,7 @@ export abstract class Unit extends CustomMarker { targetingRange: this.#targetingRange, aimMethodRange: this.#aimMethodRange, acquisitionRange: this.#acquisitionRange, - airborne: this.#airborne + airborne: this.#airborne, }; } @@ -1782,7 +1787,8 @@ export abstract class Unit extends CustomMarker { element.querySelector(".unit-vvi")?.setAttribute("style", `height: ${15 + this.#speed / 5}px;`); /* Set the unit name or callsign */ - if (element.querySelector(".unit-callsign")) (element.querySelector(".unit-callsign") as HTMLElement).innerText = getApp().getMap().getOptions().showUnitCallsigns? this.#callsign: this.#unitName; + if (element.querySelector(".unit-callsign")) + (element.querySelector(".unit-callsign") as HTMLElement).innerText = getApp().getMap().getOptions().showUnitCallsigns ? this.#callsign : this.#unitName; /* Set fuel data */ element.querySelector(".unit-fuel-level")?.setAttribute("style", `width: ${this.#fuel}%`);