mirror of
https://github.com/Pax1601/DCSOlympus.git
synced 2025-10-29 16:56:34 +00:00
Committing to merge.
This commit is contained in:
15
client/src/atc/ATCAPI.ts
Normal file
15
client/src/atc/ATCAPI.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { firestore } from "../firebase";
|
||||
|
||||
export interface ATCAPIInterface {
|
||||
get: CallableFunction
|
||||
}
|
||||
|
||||
export abstract class ATCAPI {
|
||||
|
||||
firestore;
|
||||
|
||||
constructor() {
|
||||
this.firestore = firestore;
|
||||
}
|
||||
|
||||
}
|
||||
1
client/src/atc/FlightBoard.ts
Normal file
1
client/src/atc/FlightBoard.ts
Normal file
@@ -0,0 +1 @@
|
||||
export class ATCFlightBoard {}
|
||||
24
client/src/atc/api/Flights.ts
Normal file
24
client/src/atc/api/Flights.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { ATCAPI, ATCAPIInterface } from "../ATCAPI";
|
||||
import { collection, getDocs } from "firebase/firestore";
|
||||
import { firebase } from "../../firebase";
|
||||
|
||||
export class ATCAPI_Flights extends ATCAPI implements ATCAPIInterface {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
get() {
|
||||
|
||||
async () => {
|
||||
const snapshot = await getDocs( collection( this.firestore, "flights" ) );
|
||||
|
||||
snapshot.forEach( doc => {
|
||||
console.log( doc.data() );
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -20,10 +20,10 @@ export class Dropdown {
|
||||
open() {
|
||||
if (this.#container != null) {
|
||||
this.#open = true;
|
||||
this.#container.classList.add("olympus-dropdown-open");
|
||||
this.#container.classList.remove("olympus-dropdown-closed");
|
||||
this.#container.classList.add("ol-dropdown-open");
|
||||
this.#container.classList.remove("ol-dropdown-closed");
|
||||
this.#content = document.createElement("div");
|
||||
this.#content.classList.add("olympus-dropdown-content");
|
||||
this.#content.classList.add("ol-dropdown-content");
|
||||
this.#content.style.width = (this.#container.offsetWidth - this.#container.offsetHeight) + "px";
|
||||
|
||||
this.#content.style.left = this.#container.offsetLeft + "px";
|
||||
@@ -34,7 +34,7 @@ export class Dropdown {
|
||||
var height = 2;
|
||||
for (let optionID in this.#options) {
|
||||
var node = document.createElement("div");
|
||||
node.classList.add("olympus-dropdown-element");
|
||||
node.classList.add("ol-dropdown-element");
|
||||
node.appendChild(document.createTextNode(this.#options[optionID]));
|
||||
this.#content.appendChild(node);
|
||||
height += node.offsetHeight + 2;
|
||||
@@ -53,8 +53,8 @@ export class Dropdown {
|
||||
close() {
|
||||
if (this.#container != null) {
|
||||
this.#open = false;
|
||||
this.#container?.classList.remove("olympus-dropdown-open");
|
||||
this.#container?.classList.add("olympus-dropdown-closed");
|
||||
this.#container?.classList.remove("ol-dropdown-open");
|
||||
this.#container?.classList.add("ol-dropdown-closed");
|
||||
if (this.#content != null)
|
||||
document.body.removeChild(this.#content);
|
||||
}
|
||||
|
||||
@@ -20,18 +20,17 @@ export class SelectionScroll {
|
||||
this.hide();
|
||||
|
||||
if (this.#container != null && options.length >= 1) {
|
||||
var titleDiv = this.#container.querySelector("#olympus-selection-scroll-top-bar")?.querySelector(".olympus-selection-scroll-title");
|
||||
var titleDiv = this.#container.querySelector("#ol-selection-scroll-top-bar")?.querySelector(".ol-selection-scroll-title");
|
||||
if (titleDiv)
|
||||
titleDiv.innerHTML = title;
|
||||
this.#container.style.display = this.#display;
|
||||
this.#container.style.left = x - this.#container.offsetWidth / 2 + "px";
|
||||
this.#container.style.top = y - 20 + "px";
|
||||
var scroll = this.#container.querySelector(".olympus-selection-scroll");
|
||||
|
||||
var scroll = this.#container.querySelector(".ol-selection-scroll");
|
||||
if (scroll != null)
|
||||
{
|
||||
for (let optionID in options) {
|
||||
var node = document.createElement("div");
|
||||
node.classList.add("olympus-selection-scroll-element");
|
||||
node.classList.add("ol-selection-scroll-element");
|
||||
if (typeof options[optionID] === 'string' || options[optionID] instanceof String){
|
||||
node.appendChild(document.createTextNode(options[optionID]));
|
||||
node.addEventListener('click', () => callback(options[optionID]));
|
||||
@@ -45,7 +44,7 @@ export class SelectionScroll {
|
||||
}
|
||||
|
||||
/* Hide the coalition switch if required */
|
||||
var switchContainer = <HTMLElement>this.#container.querySelector("#olympus-selection-scroll-top-bar")?.querySelector("#coalition-switch-container");
|
||||
var switchContainer = <HTMLElement>this.#container.querySelector("#ol-selection-scroll-top-bar")?.querySelector("#coalition-switch-container");
|
||||
if (showCoalition == false) {
|
||||
switchContainer.style.display = "none";
|
||||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(this.#container).getPropertyValue("--neutral-coalition-color"));
|
||||
@@ -57,14 +56,26 @@ export class SelectionScroll {
|
||||
else
|
||||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(this.#container).getPropertyValue("--red-coalition-color"));
|
||||
}
|
||||
|
||||
if (x - this.#container.offsetWidth / 2 + this.#container.offsetWidth < window.innerWidth)
|
||||
this.#container.style.left = x - this.#container.offsetWidth / 2 + "px";
|
||||
else
|
||||
this.#container.style.left = window.innerWidth - this.#container.offsetWidth + "px";
|
||||
|
||||
console.log(y - 20 + this.#container.offsetHeight)
|
||||
if (y - 20 + this.#container.offsetHeight < window.innerHeight)
|
||||
this.#container.style.top = y - 20 + "px";
|
||||
else
|
||||
this.#container.style.top = window.innerHeight - this.#container.offsetHeight + "px";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
hide() {
|
||||
if (this.#container != null) {
|
||||
this.#container.style.display = "none";
|
||||
var buttons = this.#container.querySelectorAll(".olympus-selection-scroll-element");
|
||||
var scroll = this.#container.querySelector(".olympus-selection-scroll");
|
||||
var buttons = this.#container.querySelectorAll(".ol-selection-scroll-element");
|
||||
var scroll = this.#container.querySelector(".ol-selection-scroll");
|
||||
if (scroll != null)
|
||||
{
|
||||
for (let child of buttons) {
|
||||
|
||||
28
client/src/firebase.ts
Normal file
28
client/src/firebase.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
// Import the functions you need from the SDKs you need
|
||||
import { initializeApp } from "firebase/app";
|
||||
import { getAnalytics } from "firebase/analytics";
|
||||
import { getFirestore } from "firebase/firestore";
|
||||
|
||||
// TODO: Add SDKs for Firebase products that you want to use
|
||||
// https://firebase.google.com/docs/web/setup#available-libraries
|
||||
|
||||
// Your web app's Firebase configuration
|
||||
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
|
||||
const firebaseConfig = {
|
||||
apiKey: "AIzaSyArFxFtLvZqV6RKMxZR-zCH-TT3LV43aVg",
|
||||
authDomain: "dcs-olympus.firebaseapp.com",
|
||||
projectId: "dcs-olympus",
|
||||
storageBucket: "dcs-olympus.appspot.com",
|
||||
messagingSenderId: "393187308632",
|
||||
appId: "1:393187308632:web:545dc9551716a84d3c462d",
|
||||
measurementId: "G-10E10S2WBN"
|
||||
};
|
||||
|
||||
// Initialize Firebase
|
||||
const firebase = initializeApp( firebaseConfig );
|
||||
|
||||
const analytics = getAnalytics( firebase );
|
||||
const firestore = getFirestore( firebase );
|
||||
|
||||
|
||||
export { firebase, analytics, firestore };
|
||||
@@ -13,6 +13,7 @@ import { MouseInfoPanel } from "./panels/mouseInfoPanel";
|
||||
import { Slider } from "./controls/slider";
|
||||
import { AIC } from "./aic/AIC";
|
||||
|
||||
import { VisibilityControlPanel } from "./panels/visibilitycontrolpanel";
|
||||
|
||||
/* TODO: should this be a class? */
|
||||
var map: Map;
|
||||
@@ -26,6 +27,7 @@ var unitInfoPanel: UnitInfoPanel;
|
||||
var connectionStatusPanel: ConnectionStatusPanel;
|
||||
var unitControlPanel: UnitControlPanel;
|
||||
var mouseInfoPanel: MouseInfoPanel;
|
||||
var visibilityControlPanel: VisibilityControlPanel;
|
||||
|
||||
var scenarioDropdown: Dropdown;
|
||||
var mapSourceDropdown: Dropdown;
|
||||
@@ -34,11 +36,6 @@ var slowButton: Button;
|
||||
var fastButton: Button;
|
||||
var climbButton: Button;
|
||||
var descendButton: Button;
|
||||
var userVisibilityButton: Button;
|
||||
var aiVisibilityButton: Button;
|
||||
var uncontrolledVisibilityButton: Button;
|
||||
var weaponVisibilityButton: Button;
|
||||
var deadVisibilityButton: Button;
|
||||
|
||||
var aic: AIC;
|
||||
var aicToggleButton: Button;
|
||||
@@ -53,15 +50,22 @@ var activeCoalition: string;
|
||||
function setup() {
|
||||
/* Initialize */
|
||||
map = new Map('map-container');
|
||||
unitsManager = new UnitsManager();
|
||||
|
||||
selectionWheel = new SelectionWheel("selection-wheel");
|
||||
selectionScroll = new SelectionScroll("selection-scroll");
|
||||
unitsManager = new UnitsManager();
|
||||
|
||||
unitInfoPanel = new UnitInfoPanel("unit-info-panel");
|
||||
unitControlPanel = new UnitControlPanel("unit-control-panel");
|
||||
scenarioDropdown = new Dropdown("scenario-dropdown", ["Caucasus", "Marianas", "Nevada", "South Atlantic", "Syria", "The Channel"], () => { });
|
||||
mapSourceDropdown = new Dropdown("map-source-dropdown", map.getLayers(), (option: string) => map.setLayer(option));
|
||||
connectionStatusPanel = new ConnectionStatusPanel("connection-status-panel");
|
||||
mouseInfoPanel = new MouseInfoPanel("mouse-info-panel");
|
||||
visibilityControlPanel = new VisibilityControlPanel("visibility-control-panel");
|
||||
|
||||
scenarioDropdown = new Dropdown("scenario-dropdown", ["Caucasus", "Syria", "Marianas", "Nevada", "South Atlantic", "The channel"], () => { });
|
||||
mapSourceDropdown = new Dropdown("map-source-dropdown", map.getLayers(), (option: string) => map.setLayer(option));
|
||||
|
||||
missionData = new MissionData();
|
||||
|
||||
/* Unit control buttons */
|
||||
@@ -74,18 +78,6 @@ function setup() {
|
||||
altitudeSlider = new Slider("altitude-slider", 0, 100, "ft", (value: number) => getUnitsManager().selectedUnitsSetAltitude(value * 0.3048));
|
||||
airspeedSlider = new Slider("airspeed-slider", 0, 100, "kts", (value: number) => getUnitsManager().selectedUnitsSetSpeed(value / 1.94384));
|
||||
|
||||
/* Visibility buttons */
|
||||
userVisibilityButton = new Button("user-visibility-button", ["images/buttons/user-full.svg", "images/buttons/user-partial.svg", "images/buttons/user-none.svg", "images/buttons/user-hidden.svg"], () => { getUnitsManager().forceUpdate() });
|
||||
aiVisibilityButton = new Button("ai-visibility-button", ["images/buttons/ai-full.svg", "images/buttons/ai-partial.svg", "images/buttons/ai-none.svg", "images/buttons/ai-hidden.svg"], () => { getUnitsManager().forceUpdate() });
|
||||
uncontrolledVisibilityButton = new Button("uncontrolled-visibility-button", ["images/buttons/ai-full.svg", "images/buttons/ai-partial.svg", "images/buttons/ai-none.svg", "images/buttons/ai-hidden.svg"], () => { getUnitsManager().forceUpdate() });
|
||||
weaponVisibilityButton = new Button("weapon-visibility-button", ["images/buttons/weapon-partial.svg", "images/buttons/weapon-none.svg", "images/buttons/weapon-hidden.svg"], () => { getUnitsManager().forceUpdate() });
|
||||
deadVisibilityButton = new Button("dead-visibility-button", ["images/buttons/dead.svg", "images/buttons/dead-hidden.svg"], () => { getUnitsManager().forceUpdate() });
|
||||
|
||||
aiVisibilityButton.setState(1);
|
||||
uncontrolledVisibilityButton.setState(3);
|
||||
weaponVisibilityButton.setState(1);
|
||||
deadVisibilityButton.setState(1);
|
||||
|
||||
/* AIC */
|
||||
aic = new AIC();
|
||||
|
||||
@@ -193,70 +185,6 @@ export function getConnected() {
|
||||
return connected;
|
||||
}
|
||||
|
||||
export function getVisibilitySettings() {
|
||||
var visibility = {
|
||||
user: "",
|
||||
ai: "",
|
||||
uncontrolled: "",
|
||||
weapon: "",
|
||||
dead: ""
|
||||
};
|
||||
|
||||
switch (userVisibilityButton.getState()) {
|
||||
case 0:
|
||||
visibility.user = "full"; break;
|
||||
case 1:
|
||||
visibility.user = "partial"; break;
|
||||
case 2:
|
||||
visibility.user = "none"; break;
|
||||
case 3:
|
||||
visibility.user = "hidden"; break;
|
||||
}
|
||||
|
||||
switch (aiVisibilityButton.getState()) {
|
||||
case 0:
|
||||
visibility.ai = "full"; break;
|
||||
case 1:
|
||||
visibility.ai = "partial"; break;
|
||||
case 2:
|
||||
visibility.ai = "none"; break;
|
||||
case 3:
|
||||
visibility.ai = "hidden"; break;
|
||||
}
|
||||
|
||||
switch (uncontrolledVisibilityButton.getState()) {
|
||||
case 0:
|
||||
visibility.uncontrolled = "full"; break;
|
||||
case 1:
|
||||
visibility.uncontrolled = "partial"; break;
|
||||
case 2:
|
||||
visibility.uncontrolled = "none"; break;
|
||||
case 3:
|
||||
visibility.uncontrolled = "hidden"; break;
|
||||
}
|
||||
|
||||
switch (weaponVisibilityButton.getState()) {
|
||||
case 0:
|
||||
visibility.weapon = "partial"; break;
|
||||
case 1:
|
||||
visibility.weapon = "none"; break;
|
||||
case 2:
|
||||
visibility.weapon = "hidden"; break;
|
||||
}
|
||||
|
||||
switch (deadVisibilityButton.getState()) {
|
||||
case 0:
|
||||
visibility.dead = "none"; break;
|
||||
case 1:
|
||||
visibility.dead = "hidden"; break;
|
||||
}
|
||||
return visibility;
|
||||
}
|
||||
|
||||
export function getVisibilityButtons() {
|
||||
return {user: userVisibilityButton, ai: aiVisibilityButton, weapon: weaponVisibilityButton, dead: deadVisibilityButton}
|
||||
}
|
||||
|
||||
export function getUnitControlSliders() {
|
||||
return {altitude: altitudeSlider, airspeed: airspeedSlider}
|
||||
}
|
||||
|
||||
@@ -11,13 +11,13 @@ export class ConnectionStatusPanel {
|
||||
if (div != null) {
|
||||
if (connected) {
|
||||
div.innerHTML = "Connected";
|
||||
div.classList.add("olympus-status-connected");
|
||||
div.classList.remove("olympus-status-disconnected");
|
||||
div.classList.add("ol-status-connected");
|
||||
div.classList.remove("ol-status-disconnected");
|
||||
}
|
||||
else {
|
||||
div.innerHTML = "Disconnected";
|
||||
div.classList.add("olympus-status-disconnected");
|
||||
div.classList.remove("olympus-status-connected");
|
||||
div.classList.add("ol-status-disconnected");
|
||||
div.classList.remove("ol-status-connected");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ export class UnitInfoPanel {
|
||||
if (this.#element != null) {
|
||||
var els = this.#element.getElementsByClassName("js-loadout-element");
|
||||
while (els.length > 0)
|
||||
this.#element.querySelector("#loadout-data")?.removeChild(els[0]);
|
||||
this.#element.querySelector("#loadout-container")?.removeChild(els[0]);
|
||||
|
||||
for (let index in unit.ammo) {
|
||||
var ammo = unit.ammo[index];
|
||||
@@ -35,7 +35,7 @@ export class UnitInfoPanel {
|
||||
var el = document.createElement("div")
|
||||
el.classList.add("js-loadout-element", "rectangular-container-dark")
|
||||
el.innerHTML = amount + "x" + displayName;
|
||||
this.#element.querySelector("#loadout-data")?.appendChild(el);
|
||||
this.#element.querySelector("#loadout-container")?.appendChild(el);
|
||||
}
|
||||
|
||||
this.#element.querySelector("#unit-name")!.innerHTML = unit.unitName;
|
||||
|
||||
80
client/src/panels/visibilitycontrolpanel.ts
Normal file
80
client/src/panels/visibilitycontrolpanel.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import { AirUnit, GroundUnit, NavyUnit, Weapon } from "../units/unit";
|
||||
|
||||
export class VisibilityControlPanel {
|
||||
#element: HTMLElement
|
||||
|
||||
constructor(ID: string) {
|
||||
this.#element = <HTMLElement>document.getElementById(ID);
|
||||
|
||||
if (this.#element != null)
|
||||
{
|
||||
var airVisibilityCheckbox = this.#element.querySelector("#air-visibility");
|
||||
var groundVisibilityCheckbox = this.#element.querySelector("#ground-visibility");
|
||||
var navyVisibilityCheckbox = this.#element.querySelector("#navy-visibility");
|
||||
var weaponVisibilityCheckbox = this.#element.querySelector("#weapon-visibility");
|
||||
|
||||
airVisibilityCheckbox?.addEventListener("change", () => this.#onChange());
|
||||
groundVisibilityCheckbox?.addEventListener("change", () => this.#onChange());
|
||||
navyVisibilityCheckbox?.addEventListener("change", () => this.#onChange());
|
||||
weaponVisibilityCheckbox?.addEventListener("change", () => this.#onChange());
|
||||
|
||||
var fullVisibilitySelection = this.#element.querySelector("#full-visibility");
|
||||
var partialVisibilitySelection = this.#element.querySelector("#partial-visibility");
|
||||
var minimalVisibilitySelection = this.#element.querySelector("#minimal-visibility");
|
||||
|
||||
fullVisibilitySelection?.addEventListener("change", () => this.#onChange());
|
||||
partialVisibilitySelection?.addEventListener("change", () => this.#onChange());
|
||||
minimalVisibilitySelection?.addEventListener("change", () => this.#onChange());
|
||||
|
||||
var uncontrolledVisibilityCheckbox = this.#element.querySelector("#uncontrolled-visibility");
|
||||
uncontrolledVisibilityCheckbox?.addEventListener("change", () => this.#onChange());
|
||||
}
|
||||
}
|
||||
|
||||
#onChange(){
|
||||
if (this.#element != null)
|
||||
{
|
||||
var fullVisibilitySelection = <HTMLInputElement> this.#element.querySelector("#full-visibility");
|
||||
var partialVisibilitySelection = <HTMLInputElement> this.#element.querySelector("#partial-visibility");
|
||||
var minimalVisibilitySelection = <HTMLInputElement> this.#element.querySelector("#minimal-visibility");
|
||||
|
||||
var activeVisibility = "";
|
||||
if (fullVisibilitySelection.checked)
|
||||
activeVisibility = "full";
|
||||
else if (partialVisibilitySelection.checked)
|
||||
activeVisibility = "partial";
|
||||
else if (minimalVisibilitySelection.checked)
|
||||
activeVisibility = "minimal";
|
||||
|
||||
var uncontrolledVisibilityCheckbox = <HTMLInputElement> this.#element.querySelector("#uncontrolled-visibility");
|
||||
var uncontrolledVisibility = !uncontrolledVisibilityCheckbox.checked;
|
||||
|
||||
var airVisibilityCheckbox = <HTMLInputElement> this.#element.querySelector("#air-visibility");
|
||||
if (airVisibilityCheckbox.checked)
|
||||
AirUnit.setVisibility({human: activeVisibility, ai: activeVisibility, uncontrolled: uncontrolledVisibility? activeVisibility: "hidden", dead: "hidden"});
|
||||
else
|
||||
AirUnit.setVisibility({human: "hidden", ai: "hidden", uncontrolled: "hidden", dead: "hidden"});
|
||||
|
||||
var groundVisibilityCheckbox = <HTMLInputElement> this.#element.querySelector("#ground-visibility");
|
||||
if (groundVisibilityCheckbox.checked)
|
||||
GroundUnit.setVisibility({human: activeVisibility, ai: activeVisibility, uncontrolled: uncontrolledVisibility? activeVisibility: "hidden", dead: "hidden"});
|
||||
else
|
||||
GroundUnit.setVisibility({human: "hidden", ai: "hidden", uncontrolled: "hidden", dead: "hidden"});
|
||||
|
||||
var navyVisibilityCheckbox = <HTMLInputElement> this.#element.querySelector("#navy-visibility");
|
||||
if (navyVisibilityCheckbox.checked)
|
||||
NavyUnit.setVisibility({human: activeVisibility, ai: activeVisibility, uncontrolled: uncontrolledVisibility? activeVisibility: "hidden", dead: "hidden"});
|
||||
else
|
||||
NavyUnit.setVisibility({human: "hidden", ai: "hidden", uncontrolled: "hidden", dead: "hidden"});
|
||||
|
||||
var weaponVisibilityCheckbox = <HTMLInputElement> this.#element.querySelector("#weapon-visibility");
|
||||
if (weaponVisibilityCheckbox.checked)
|
||||
Weapon.setVisibility({human: activeVisibility, ai: activeVisibility, uncontrolled: uncontrolledVisibility? activeVisibility: "hidden", dead: "hidden"});
|
||||
else
|
||||
Weapon.setVisibility({human: "hidden", ai: "hidden", uncontrolled: "hidden", dead: "hidden"});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,9 +1,15 @@
|
||||
import { Marker, LatLng, Polyline, Icon } from 'leaflet';
|
||||
import { ConvertDDToDMS } from '../other/utils';
|
||||
import { getMap, getUnitsManager, getVisibilitySettings } from '..';
|
||||
import { getMap, getUnitsManager} from '..';
|
||||
import { UnitMarker, MarkerOptions, AircraftMarker, HelicopterMarker, GroundUnitMarker, NavyUnitMarker, WeaponMarker } from './unitmarker';
|
||||
import { addDestination, attackUnit, changeAltitude, changeSpeed, createFormation as setLeader, landAt, setAltitude, setReactionToThreat, setROE, setSpeed } from '../dcs/dcs';
|
||||
|
||||
interface visibilityOptions {
|
||||
dead: string;
|
||||
ai: string;
|
||||
uncontrolled: string;
|
||||
human: string;
|
||||
}
|
||||
|
||||
var pathIcon = new Icon({
|
||||
iconUrl: 'images/marker-icon.png',
|
||||
shadowUrl: 'images/marker-shadow.png',
|
||||
@@ -387,20 +393,33 @@ export class Unit {
|
||||
}
|
||||
|
||||
export class AirUnit extends Unit {
|
||||
getHidden() {
|
||||
if (this.AI == false && getVisibilitySettings().uncontrolled === "hidden")
|
||||
return true
|
||||
static visibility: visibilityOptions = {dead: "hidden", ai: "partial", uncontrolled: "partial", human: "partial"}
|
||||
static setVisibility(visibility: visibilityOptions)
|
||||
{
|
||||
getUnitsManager().forceUpdate();
|
||||
AirUnit.visibility = visibility;
|
||||
}
|
||||
|
||||
static getVisibility()
|
||||
{
|
||||
return AirUnit.visibility;
|
||||
}
|
||||
|
||||
getHidden() {
|
||||
if (this.alive)
|
||||
{
|
||||
if (this.flags.user && getVisibilitySettings().user === "hidden")
|
||||
return true
|
||||
else if (!this.flags.user && getVisibilitySettings().ai === "hidden")
|
||||
return true
|
||||
if (this.flags.user)
|
||||
return AirUnit.getVisibility().human === "hidden"
|
||||
|
||||
if (this.AI)
|
||||
return AirUnit.getVisibility().ai === "hidden"
|
||||
else
|
||||
return AirUnit.getVisibility().uncontrolled === "hidden"
|
||||
}
|
||||
else
|
||||
return getVisibilitySettings().dead === "hidden"
|
||||
return false;
|
||||
{
|
||||
return AirUnit.getVisibility().dead === "hidden"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -419,52 +438,87 @@ export class Helicopter extends AirUnit {
|
||||
}
|
||||
|
||||
export class GroundUnit extends Unit {
|
||||
static visibility: visibilityOptions = {dead: "hidden", ai: "partial", uncontrolled: "partial", human: "partial"}
|
||||
static setVisibility(visibility: visibilityOptions)
|
||||
{
|
||||
getUnitsManager().forceUpdate();
|
||||
GroundUnit.visibility = visibility;
|
||||
}
|
||||
|
||||
static getVisibility()
|
||||
{
|
||||
return GroundUnit.visibility;
|
||||
}
|
||||
|
||||
constructor(ID: number, options: MarkerOptions) {
|
||||
var marker = new GroundUnitMarker(options);
|
||||
super(ID, marker);
|
||||
}
|
||||
|
||||
getHidden() {
|
||||
if (this.AI == false && getVisibilitySettings().uncontrolled === "hidden")
|
||||
return true
|
||||
|
||||
if (this.alive)
|
||||
{
|
||||
if (this.flags.user && getVisibilitySettings().user === "hidden")
|
||||
return true
|
||||
else if (!this.flags.user && getVisibilitySettings().ai === "hidden")
|
||||
return true
|
||||
if (this.flags.user)
|
||||
return GroundUnit.getVisibility().human === "hidden"
|
||||
|
||||
if (this.AI)
|
||||
return GroundUnit.getVisibility().ai === "hidden"
|
||||
else
|
||||
return GroundUnit.getVisibility().uncontrolled === "hidden"
|
||||
}
|
||||
else
|
||||
return getVisibilitySettings().dead === "hidden"
|
||||
return false;
|
||||
{
|
||||
return GroundUnit.getVisibility().dead === "hidden"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class NavyUnit extends Unit {
|
||||
static visibility: visibilityOptions = {dead: "hidden", ai: "partial", uncontrolled: "partial", human: "partial"}
|
||||
static setVisibility(visibility: visibilityOptions)
|
||||
{
|
||||
getUnitsManager().forceUpdate();
|
||||
NavyUnit.visibility = visibility;
|
||||
}
|
||||
|
||||
static getVisibility()
|
||||
{
|
||||
return NavyUnit.visibility;
|
||||
}
|
||||
|
||||
constructor(ID: number, options: MarkerOptions) {
|
||||
var marker = new NavyUnitMarker(options);
|
||||
super(ID, marker);
|
||||
}
|
||||
|
||||
getHidden() {
|
||||
if (this.AI == false && getVisibilitySettings().uncontrolled === "hidden")
|
||||
return true
|
||||
|
||||
if (this.alive)
|
||||
{
|
||||
if (this.flags.user && getVisibilitySettings().user === "hidden")
|
||||
return true
|
||||
else if (!this.flags.user && getVisibilitySettings().ai === "hidden")
|
||||
return true
|
||||
if (this.AI)
|
||||
return NavyUnit.getVisibility().ai === "hidden"
|
||||
else
|
||||
return NavyUnit.getVisibility().uncontrolled === "hidden"
|
||||
}
|
||||
else
|
||||
return getVisibilitySettings().dead === "hidden"
|
||||
return false;
|
||||
{
|
||||
return NavyUnit.getVisibility().dead === "hidden"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class Weapon extends Unit {
|
||||
static visibility: visibilityOptions = {dead: "hidden", ai: "partial", uncontrolled: "partial", human: "partial"}
|
||||
static setVisibility(visibility: visibilityOptions)
|
||||
{
|
||||
getUnitsManager().forceUpdate();
|
||||
Weapon.visibility = visibility;
|
||||
}
|
||||
|
||||
static getVisibility()
|
||||
{
|
||||
return Weapon.visibility;
|
||||
}
|
||||
|
||||
constructor(ID: number, marker: UnitMarker)
|
||||
{
|
||||
super(ID, marker);
|
||||
@@ -473,13 +527,9 @@ export class Weapon extends Unit {
|
||||
|
||||
getHidden() {
|
||||
if (this.alive)
|
||||
{
|
||||
if (!this.flags.user && getVisibilitySettings().weapon === "hidden")
|
||||
return true
|
||||
}
|
||||
return Weapon.getVisibility().uncontrolled === "hidden"
|
||||
else
|
||||
return getVisibilitySettings().dead === "hidden"
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import * as L from 'leaflet'
|
||||
import { Symbol } from 'milsymbol'
|
||||
import { getVisibilitySettings } from '..'
|
||||
import { AirUnit, GroundUnit, NavyUnit, Weapon } from './unit'
|
||||
|
||||
export interface MarkerOptions {
|
||||
unitName: string
|
||||
@@ -88,13 +88,13 @@ export class UnitMarker extends L.Marker {
|
||||
speedDiv.style.display = '';
|
||||
|
||||
/* If visibility is partial shown only icon and unit name. If none, shown only icon. */
|
||||
if (this.getVisibility() === "partial" || this.getVisibility() === "none")
|
||||
if (this.getVisibility() === "partial" || this.getVisibility() === "minimal")
|
||||
{
|
||||
unitNameDiv.style.display = 'none';
|
||||
altitudeDiv.style.display = 'none';
|
||||
speedDiv.style.display = 'none';
|
||||
}
|
||||
if (this.getVisibility() === "none" && nameDiv.style.display != 'none')
|
||||
if (this.getVisibility() === "minimal" && nameDiv.style.display != 'none')
|
||||
nameDiv.style.display = 'none';
|
||||
|
||||
nameDiv.style.left = (-(nameDiv.offsetWidth - container.offsetWidth) / 2) + "px";
|
||||
@@ -225,15 +225,19 @@ export class UnitMarker extends L.Marker {
|
||||
|
||||
export class AirUnitMarker extends UnitMarker {
|
||||
getVisibility() {
|
||||
if (this.getSelected())
|
||||
return "full";
|
||||
|
||||
if (this.getHuman())
|
||||
return getVisibilitySettings().user;
|
||||
else if (!this.getAlive())
|
||||
return "none";
|
||||
else
|
||||
return this.getAI()? getVisibilitySettings().ai: getVisibilitySettings().uncontrolled;
|
||||
if (this.getAlive())
|
||||
{
|
||||
if (this.getSelected())
|
||||
return "full";
|
||||
else if (this.getHuman())
|
||||
return AirUnit.getVisibility().human;
|
||||
else if (this.getAI())
|
||||
return AirUnit.getVisibility().ai;
|
||||
else
|
||||
return AirUnit.getVisibility().uncontrolled;
|
||||
}
|
||||
else
|
||||
return "minimal";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,38 +250,54 @@ export class HelicopterMarker extends AirUnitMarker {
|
||||
export class GroundUnitMarker extends UnitMarker {
|
||||
/* Are user driven units recognized as human? */
|
||||
getVisibility() {
|
||||
if (this.getSelected())
|
||||
return "full";
|
||||
|
||||
if (this.getHuman())
|
||||
return getVisibilitySettings().user;
|
||||
else if (!this.getAlive())
|
||||
return "none";
|
||||
else
|
||||
return this.getAI()? getVisibilitySettings().ai: getVisibilitySettings().uncontrolled;
|
||||
if (this.getAlive())
|
||||
{
|
||||
if (this.getSelected())
|
||||
return "full";
|
||||
else if (this.getHuman())
|
||||
return GroundUnit.getVisibility().human;
|
||||
else if (this.getAI())
|
||||
return GroundUnit.getVisibility().ai;
|
||||
else
|
||||
return GroundUnit.getVisibility().uncontrolled;
|
||||
}
|
||||
else
|
||||
return "minimal";
|
||||
}
|
||||
}
|
||||
|
||||
export class NavyUnitMarker extends UnitMarker {
|
||||
getVisibility() {
|
||||
if (this.getSelected())
|
||||
return "full";
|
||||
|
||||
if (!this.getAlive())
|
||||
return "none";
|
||||
else
|
||||
return this.getAI()? getVisibilitySettings().ai: getVisibilitySettings().uncontrolled;
|
||||
if (this.getAlive())
|
||||
{
|
||||
if (this.getSelected())
|
||||
return "full";
|
||||
else if (this.getHuman())
|
||||
return NavyUnit.getVisibility().human;
|
||||
else if (this.getAI())
|
||||
return NavyUnit.getVisibility().ai;
|
||||
else
|
||||
return NavyUnit.getVisibility().uncontrolled;
|
||||
}
|
||||
else
|
||||
return "minimal";
|
||||
}
|
||||
}
|
||||
|
||||
export class WeaponMarker extends UnitMarker {
|
||||
getVisibility() {
|
||||
if (this.getSelected())
|
||||
return "full";
|
||||
|
||||
if (!this.getAlive())
|
||||
return "none";
|
||||
else
|
||||
return getVisibilitySettings().weapon;
|
||||
if (this.getAlive())
|
||||
{
|
||||
if (this.getSelected())
|
||||
return "full";
|
||||
else if (this.getHuman())
|
||||
return Weapon.getVisibility().human;
|
||||
else if (this.getAI())
|
||||
return Weapon.getVisibility().ai;
|
||||
else
|
||||
return Weapon.getVisibility().uncontrolled;
|
||||
}
|
||||
else
|
||||
return "minimal";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user