- Load:{" "}
+
+ Load:
{load}
- {" "}
+
-
- {showMissionTime ? "MT" : "ET"}: {timeString}{" "}
+
+ {showMissionTime ? "MT" : "ET"}: {timeString}
>
diff --git a/frontend/react/src/ui/panels/unitcontrolmenu.tsx b/frontend/react/src/ui/panels/unitcontrolmenu.tsx
index 912b953e..db48de17 100644
--- a/frontend/react/src/ui/panels/unitcontrolmenu.tsx
+++ b/frontend/react/src/ui/panels/unitcontrolmenu.tsx
@@ -49,11 +49,18 @@ import {
mToFt,
msToKnots,
} from "../../other/utils";
-import { FaGasPump, FaQuestionCircle } from "react-icons/fa";
+import {
+ FaCog,
+ FaGasPump,
+ FaQuestionCircle,
+ FaSignal,
+ FaTag,
+} from "react-icons/fa";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { OlSearchBar } from "../components/olsearchbar";
import { OlDropdown, OlDropdownItem } from "../components/oldropdown";
import { UnitBlueprint } from "../../interfaces";
+import { FaRadio } from "react-icons/fa6";
export function UnitControlMenu(props: { open: boolean; onClose: () => void }) {
var [selectedUnits, setSelectedUnits] = useState([] as Unit[]);
@@ -280,8 +287,9 @@ export function UnitControlMenu(props: { open: boolean; onClose: () => void }) {
Selection tool
- The selection tools allows you to select units depending on their category, coalition, and control mode. You can also
- select units depending on their specific type by using the search input.
+ The selection tools allows you to select units depending on their
+ category, coalition, and control mode. You can also select units
+ depending on their specific type by using the search input.
void }) {
return;
if (
- unit.getControlled() &&
+ unit.isControlledByOlympus() &&
!selectionFilter["control"]["olympus"]
)
return;
if (
- !unit.getHuman() &&
- !unit.getControlled() &&
+ !unit.isControlledByDCS() &&
!selectionFilter["control"]["dcs"]
)
return;
@@ -744,45 +751,47 @@ export function UnitControlMenu(props: { open: boolean; onClose: () => void }) {
step={speedStep}
/>
-
-
- Rules of engagement
-
-
- {[
- olButtonsRoeHold,
- olButtonsRoeReturn,
- olButtonsRoeDesignated,
- olButtonsRoeFree,
- ].map((icon, idx) => {
- return (
- {
- selectedUnits.forEach((unit) => {
- unit.setROE(ROEs[idx]);
- setSelectedUnitsData({
- ...selectedUnitsData,
- ROE: ROEs[idx],
- });
- });
- }}
- active={selectedUnitsData.ROE === ROEs[idx]}
- icon={icon}
- />
- );
- })}
-
-
+ {!(selectedUnits.length === 1 && selectedUnits[0].isTanker()) &&
+ !(selectedUnits.length === 1 && selectedUnits[0].isAWACS()) && (
+
+
+ Rules of engagement
+
+
+ {[
+ olButtonsRoeHold,
+ olButtonsRoeReturn,
+ olButtonsRoeDesignated,
+ olButtonsRoeFree,
+ ].map((icon, idx) => {
+ return (
+ {
+ selectedUnits.forEach((unit) => {
+ unit.setROE(ROEs[idx]);
+ setSelectedUnitsData({
+ ...selectedUnitsData,
+ ROE: ROEs[idx],
+ });
+ });
+ }}
+ active={selectedUnitsData.ROE === ROEs[idx]}
+ icon={icon}
+ />
+ );
+ })}
+
+
+ )}
{selectedCategories.every((category) => {
return ["Aircraft", "Helicopter"].includes(category);
}) && (
<>
- {" "}
void }) {
dark:text-white
`}
>
- {" "}
- Act as tanker{" "}
+ Make tanker available
void }) {
dark:text-white
`}
>
- {" "}
- Act as AWACS{" "}
+ Make AWACS available
void }) {
/>
)}
+ {selectedUnits.length === 1 && selectedUnits[0].isTanker() && (
+
+
+
+ )}
{selectedCategories.every((category) => {
return ["GroundUnit", "NavyUnit"].includes(category);
}) && (
<>
- {" "}
void }) {
dark:text-white
`}
>
- {" "}
- Operate as{" "}
+ Operate as
void }) {
dark:text-white
`}
>
- {" "}
- Follow roads{" "}
+ Follow roads
void }) {
dark:text-white
`}
>
- {" "}
- Unit active{" "}
+ Unit active
void }) {
- {selectedUnits[0].getAmmo().map((ammo) => {
- return (
-
-
- {ammo.quantity}
+ {selectedUnits[0].isControlledByOlympus() &&
+ selectedUnits[0].isTanker() && (
+ <>
+
+
+
+
+
+
+ {`${["Texaco", "Arco", "Shell"][selectedUnits[0].getRadio().callsign]}-${
+ selectedUnits[0].getRadio().callsignNumber
+ }`}
+
+
-
- {ammo.name}
+
+
+
+
+
+
+ {`${(
+ selectedUnits[0].getRadio().frequency /
+ 1000000
+ ).toFixed(3)} MHz`}
+
+
-
- );
- })}
+
+
+
+
+
+
+
+ {selectedUnits[0].getTACAN().isOn
+ ? `${selectedUnits[0].getTACAN().channel}${selectedUnits[0].getTACAN().XY} ${selectedUnits[0].getTACAN().callsign}`
+ : "TACAN OFF"}
+
+
+
+ >
+ )}
+ {!selectedUnits[0].isTanker() &&
+ !selectedUnits[0].isAWACS() &&
+ selectedUnits[0].getAmmo().map((ammo) => {
+ return (
+
+
+ {ammo.quantity}
+
+
+ {ammo.name}
+
+
+ );
+ })}
)}
diff --git a/frontend/react/src/ui/panels/unitmousecontrolbar.tsx b/frontend/react/src/ui/panels/unitmousecontrolbar.tsx
index 39ca6417..78d214e7 100644
--- a/frontend/react/src/ui/panels/unitmousecontrolbar.tsx
+++ b/frontend/react/src/ui/panels/unitmousecontrolbar.tsx
@@ -71,8 +71,7 @@ export function UnitMouseControlBar(props: {}) {
function onScroll(el) {
const sl = el.scrollLeft;
- const sr =
- el.scrollWidth - el.scrollLeft - el.clientWidth;
+ const sr = el.scrollWidth - el.scrollLeft - el.clientWidth;
sl < 1 && !scrolledLeft && setScrolledLeft(true);
sl > 1 && scrolledLeft && setScrolledLeft(false);
@@ -83,7 +82,6 @@ export function UnitMouseControlBar(props: {}) {
return (
<>
- {" "}
{open && (
<>