Merge branch 'main' into 94-missiles-icon-not-rotating

This commit is contained in:
PeekabooSteam
2023-03-20 18:47:52 +00:00
committed by GitHub
12 changed files with 253 additions and 17 deletions

View File

@@ -10,6 +10,7 @@ import { ATC } from "./atc/atc";
import { FeatureSwitches } from "./featureswitches";
import { LogPanel } from "./panels/logpanel";
import { getAirbases, getBulllseye as getBulllseyes, getMission, getUnits, toggleDemoEnabled } from "./server/server";
import { UnitDataTable } from "./units/unitdatatable";
var map: Map;
@@ -29,6 +30,7 @@ var connected: boolean = false;
var activeCoalition: string = "blue";
var sessionHash: string | null = null;
var unitDataTable = new UnitDataTable();
var featureSwitches;
@@ -75,6 +77,7 @@ function setup() {
startPeriodicUpdate();
}
function startPeriodicUpdate() {
requestUpdate();
requestRefresh();
@@ -84,6 +87,7 @@ function requestUpdate() {
/* Main update rate = 250ms is minimum time, equal to server update time. */
getUnits((data: UnitsData) => {
getUnitsManager()?.update(data);
getUnitDataTable().update( data.units )
checkSessionHash(data.sessionHash);
}, false);
setTimeout(() => requestUpdate(), getConnected() ? 250 : 1000);
@@ -137,13 +141,21 @@ function setupEvents() {
/* Keyup events */
document.addEventListener("keyup", ev => {
switch (ev.code) {
case "KeyL":
document.body.toggleAttribute("data-hide-labels");
break;
case "KeyD":
toggleDemoEnabled();
break;
case "Quote":
unitDataTable.toggle();
}
});
/*
@@ -154,7 +166,6 @@ function setupEvents() {
unitName.setAttribute( "readonly", "true" );
// Do something with this:
console.log( unitName.value );
});
document.addEventListener( "editUnitName", ev => {
@@ -214,6 +225,10 @@ export function getMissionData() {
return missionHandler;
}
export function getUnitDataTable() {
return unitDataTable;
}
export function getUnitsManager() {
return unitsManager;
}

View File

@@ -72,6 +72,41 @@ export class MouseInfoPanel extends Panel {
el.dataset.distanceUnits = "nm";
}
}
const refMouseLat = <HTMLElement>document.getElementById( "ref-mouse-position-latitude" );
const mouseLat = <HTMLElement>document.getElementById( "mouse-position-latitude" );
if ( refMouseLat && mouseLat ) {
let matches = String( mousePosition.lat ).match( /^\-?(\d+)\.(\d{2})(\d{2})(\d{2})/ );
if ( matches && matches.length ) {
mouseLat.dataset.dd = matches[1];
mouseLat.dataset.mm = matches[2];
mouseLat.dataset.ss = matches[3];
mouseLat.dataset.sss = matches[4];
}
refMouseLat.dataset.label = ( mousePosition.lat < 0 ) ? "S" : "N";
}
const refMouseLng = <HTMLElement>document.getElementById( "ref-mouse-position-longitude" );
const mouseLng = <HTMLElement>document.getElementById( "mouse-position-longitude" );
if ( refMouseLng && mouseLng ) {
let matches = String( mousePosition.lng ).match( /^\-?(\d+)\.(\d{2})(\d{2})(\d{2})/ );
if ( matches && matches.length ) {
mouseLng.dataset.dd = matches[1];
mouseLng.dataset.mm = matches[2];
mouseLng.dataset.ss = matches[3];
mouseLng.dataset.sss = matches[4];
}
refMouseLng.dataset.label = ( mousePosition.lng < 0 ) ? "W" : "E";
}
}
#onMapClick(e: any)
@@ -155,13 +190,30 @@ export class MouseInfoPanel extends Panel {
#onUnitsSelection(units: Unit[])
{
if (units.length == 1)
this.getElement().querySelector(`#unit-position`)?.classList.toggle("hide", false);
const pos = this.getElement().querySelector(`#unit-position`);
if ( units.length > 1 ) {
pos?.setAttribute( "data-message", "(multiple units)" );
} else {
pos?.removeAttribute( "data-message" );
}
}
#onClearSelection()
{
this.#measureBox.classList.toggle("hide", true);
this.getElement().querySelector(`#unit-position`)?.classList.toggle("hide", true);
const pos = this.getElement().querySelector(`#unit-position`);
if ( pos instanceof HTMLElement ) {
pos?.removeAttribute( "data-message" );
pos.dataset.bearing = "---";
pos.dataset.distance = "---";
pos.dataset.distanceUnits = "nm";
}
}
}

View File

@@ -383,6 +383,7 @@ export class Unit extends Marker {
var unitAltitudeDiv = element.querySelector(".unit-altitude");
if (unitAltitudeDiv != null) {
unitAltitudeDiv.innerHTML = String(Math.floor(this.getFlightData().altitude / 0.3048 / 1000));
}
const headingDeg = rad2deg( this.getFlightData().heading );
@@ -392,7 +393,10 @@ export class Unit extends Marker {
el.setAttribute( "style", currentStyle + `transform:rotate(${headingDeg}deg);` );
});
var unitSpeedDiv = element.querySelector(".unit-speed");
if (unitSpeedDiv != null)
unitSpeedDiv.innerHTML = String(Math.floor(this.getFlightData().speed * 1.94384 ) );
}
var pos = getMap().latLngToLayerPoint(this.getLatLng()).round();
this.setZIndexOffset(1000 + Math.floor(this.getFlightData().altitude) - pos.y);
@@ -499,8 +503,8 @@ export class Aircraft extends AirUnit {
</div>
<div class="unit-summary">
<div class="unit-callsign">${data.baseData.unitName}</div>
<div class="unit-heading"></div>
<div class="unit-altitude"></div>
<div class="unit-speed"></div>
</div>
</div>`);
}

View File

@@ -0,0 +1,103 @@
export class UnitDataTable {
#element;
#tableId = "unit-data-table";
constructor() {
const table = document.getElementById( this.#tableId );
if ( table instanceof HTMLElement ) {
this.#element = table;
} else {
return;
}
}
getElement() {
return this.#element;
}
hide() {
this.getElement()?.closest( ".ol-dialog" )?.classList.add( "hide" );
}
show() {
this.getElement()?.closest( ".ol-dialog" )?.classList.remove( "hide" );
}
toggle() {
this.getElement()?.closest( ".ol-dialog" )?.classList.toggle( "hide" );
}
update( units:object ) {
const unitsArray = Object.values( units ).sort( ( a, b ) => {
const aVal = a.baseData.unitName.toLowerCase();
const bVal = b.baseData.unitName.toLowerCase();
if ( aVal > bVal ) {
return 1;
} else if ( bVal > aVal ) {
return -1;
} else {
return 0;
}
});
function addRow( parentEl:HTMLElement, columns:string[] ) {
const rowDiv = document.createElement( "div" );
for ( const item of columns ) {
const div = document.createElement( "div" );
div.innerText = item;
rowDiv.appendChild( div );
}
parentEl.appendChild( rowDiv );
}
const el = this.getElement();
if ( el ) {
el.innerHTML = "";
addRow( el, [ "Callsign", "Name", "Category", "AI/Human" ] )
for ( const unit of unitsArray ) {
const dataset = [ unit.baseData.unitName, unit.baseData.name, unit.baseData.category, ( unit.baseData.AI ) ? "AI" : "Human" ];
if ( this.getElement() ) {
}
addRow( el, dataset );
}
}
}
}