mirror of
https://github.com/Pax1601/DCSOlympus.git
synced 2025-10-29 16:56:34 +00:00
Multiple minor fixes
This commit is contained in:
parent
16b5e89a3e
commit
9ed4189c28
@ -1,44 +0,0 @@
|
||||
:root {
|
||||
--airbase-marker-height: 63px;
|
||||
--airbase-marker-width: 63px;
|
||||
}
|
||||
|
||||
[data-object|="airbase"] {
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
[data-hide-airbase] #map-container [data-object|="airbase"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/******************************
|
||||
Marker
|
||||
******************************/
|
||||
|
||||
[data-object|="airbase"] .airbase {
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
position: absolute;
|
||||
transform-origin: center;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
/* Airbase */
|
||||
[data-object|="airbase"] .airbase-marker {
|
||||
background-image: var(--airbase-marker-neutral-url);
|
||||
height: var(--airbase-marker-height);
|
||||
width: var(--airbase-marker-width);
|
||||
}
|
||||
|
||||
[data-object|="airbase"][data-coalition="red"] .airbase-marker {
|
||||
background-image: var(--airbase-marker-red-url);
|
||||
}
|
||||
|
||||
[data-object|="airbase"][data-coalition="blue"] .airbase-marker {
|
||||
background-image: var(--airbase-marker-blue-url);
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
@import url("layout.css");
|
||||
@import url("airbases.css");
|
||||
@import url("airbase.css");
|
||||
@import url("contextmenus.css");
|
||||
@import url("units.css");
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@ import { AIC } from "./aic/aic";
|
||||
import { ATC } from "./atc/ATC";
|
||||
import { FeatureSwitches } from "./FeatureSwitches";
|
||||
import { LogPanel } from "./panels/logpanel";
|
||||
import { getAirbases, getBulllseye as getBulllseyes, getUnits, toggleDemoEnabled } from "./server/server";
|
||||
import { getAirbases, getBulllseye as getBulllseyes, getMission, getUnits, toggleDemoEnabled } from "./server/server";
|
||||
|
||||
var map: Map;
|
||||
|
||||
@ -68,6 +68,7 @@ function setup() {
|
||||
/* On the first connection, force request of full data */
|
||||
getAirbases((data: AirbasesData) => getMissionData()?.update(data));
|
||||
getBulllseyes((data: BullseyesData) => getMissionData()?.update(data));
|
||||
getMission((data: any) => {getMissionData()?.update(data)});
|
||||
getUnits((data: UnitsData) => getUnitsManager()?.update(data), true /* Does a full refresh */);
|
||||
|
||||
/* Start periodically requesting updates */
|
||||
@ -95,6 +96,7 @@ function requestRefresh() {
|
||||
getUnits((data: UnitsData) => {
|
||||
getAirbases((data: AirbasesData) => getMissionData()?.update(data));
|
||||
getBulllseyes((data: BullseyesData) => getMissionData()?.update(data));
|
||||
getMission((data: any) => {getMissionData()?.update(data)});
|
||||
checkSessionHash(data.sessionHash);
|
||||
}, true);
|
||||
setTimeout(() => requestRefresh(), 5000);
|
||||
|
||||
@ -24,7 +24,8 @@ export class Airbase extends L.Marker
|
||||
<div class="airbase-marker"> </div>
|
||||
</div>`,
|
||||
className: 'leaflet-airbase-marker',
|
||||
iconSize: [63, 63]
|
||||
iconSize: [40, 40],
|
||||
iconAnchor: [20, 20]
|
||||
}); // Set the marker, className must be set to avoid white square
|
||||
this.setIcon(icon);
|
||||
}
|
||||
|
||||
@ -14,6 +14,7 @@ export class MissionHandler
|
||||
#bullseyeMarkers: any;
|
||||
#airbases : any; //TODO declare interface
|
||||
#airbasesMarkers: {[name: string]: Airbase};
|
||||
#theatre : string = "";
|
||||
|
||||
constructor()
|
||||
{
|
||||
@ -26,7 +27,7 @@ export class MissionHandler
|
||||
this.#airbasesMarkers = {};
|
||||
}
|
||||
|
||||
update(data: BullseyesData | AirbasesData)
|
||||
update(data: BullseyesData | AirbasesData | any)
|
||||
{
|
||||
if ("bullseyes" in data)
|
||||
{
|
||||
@ -39,6 +40,17 @@ export class MissionHandler
|
||||
this.#airbases = data.airbases;
|
||||
this.#drawAirbases();
|
||||
}
|
||||
|
||||
if ("mission" in data)
|
||||
{
|
||||
var foo = 1;
|
||||
if (data.mission.theatre != this.#theatre)
|
||||
{
|
||||
this.#theatre = data.mission.theatre
|
||||
if (this.#theatre == "Syria")
|
||||
getMap().setView(new LatLng(34.5, 36.0), 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getBullseyes()
|
||||
@ -51,7 +63,7 @@ export class MissionHandler
|
||||
for (let idx in this.#bullseyes)
|
||||
{
|
||||
var bullseye = this.#bullseyes[idx];
|
||||
this.#bullseyeMarkers[idx].setLatLng(new LatLng(bullseye.lat, bullseye.lng));
|
||||
this.#bullseyeMarkers[idx].setLatLng(new LatLng(bullseye.latitude, bullseye.longitude));
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,14 +75,14 @@ export class MissionHandler
|
||||
if (this.#airbasesMarkers[idx] === undefined)
|
||||
{
|
||||
this.#airbasesMarkers[idx] = new Airbase({
|
||||
position: new LatLng(airbase.lat, airbase.lng),
|
||||
position: new LatLng(airbase.latitude, airbase.longitude),
|
||||
name: airbase.callsign,
|
||||
src: "images/airbase.png"}).addTo(getMap());
|
||||
this.#airbasesMarkers[idx].on('contextmenu', (e) => this.#onAirbaseClick(e));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.#airbasesMarkers[idx].setLatLng(new LatLng(airbase.lat, airbase.lng));
|
||||
this.#airbasesMarkers[idx].setLatLng(new LatLng(airbase.latitude, airbase.longitude));
|
||||
this.#airbasesMarkers[idx].setCoalition(airbase.coalition);
|
||||
this.#airbasesMarkers[idx].setProperties(["test1", "test2"]);
|
||||
this.#airbasesMarkers[idx].setParkings(["2x big", "5x small"]);
|
||||
|
||||
@ -36,8 +36,8 @@ export class MouseInfoPanel extends Panel {
|
||||
var el = <HTMLElement>this.getElement().querySelector(`#bullseye-${idx}`);
|
||||
|
||||
if ( el != null ) {
|
||||
var dist = distance(bullseyes[idx].lat, bullseyes[idx].lng, mousePosition.lat, mousePosition.lng);
|
||||
var bear = bearing(bullseyes[idx].lat, bullseyes[idx].lng, mousePosition.lat, mousePosition.lng);
|
||||
var dist = distance(bullseyes[idx].latitude, bullseyes[idx].longitude, mousePosition.lat, mousePosition.lng);
|
||||
var bear = bearing(bullseyes[idx].latitude, bullseyes[idx].longitude, mousePosition.lat, mousePosition.lng);
|
||||
|
||||
el.dataset.bearing = zeroAppend(Math.floor(bear), 3);
|
||||
el.dataset.distance = zeroAppend(Math.floor(dist*0.000539957), 3);
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import { getUnitsManager } from "..";
|
||||
import { Slider } from "../controls/slider";
|
||||
import { Unit } from "../units/unit";
|
||||
import { aircraftDatabase } from "../units/aircraftdatabase";
|
||||
import { groundUnitsDatabase } from "../units/groundunitsdatabase";
|
||||
import { Aircraft, GroundUnit, Unit } from "../units/unit";
|
||||
import { Panel } from "./panel";
|
||||
|
||||
const ROEs: string[] = ["Free", "Designated free", "Designated", "Return", "Hold"];
|
||||
@ -69,7 +71,14 @@ export class UnitControlPanel extends Panel {
|
||||
{
|
||||
var button = document.createElement("button");
|
||||
button.innerText = unit.getBaseData().unitName;
|
||||
button.setAttribute( "data-short-label", unit.getBaseData().name );
|
||||
|
||||
if (unit instanceof Aircraft)
|
||||
button.setAttribute( "data-short-label", aircraftDatabase.getShortLabelByName(unit.getBaseData().name));
|
||||
else if (unit instanceof GroundUnit)
|
||||
button.setAttribute( "data-short-label", groundUnitsDatabase.getShortLabelByName(unit.getBaseData().name));
|
||||
else
|
||||
button.setAttribute( "data-short-label", "");
|
||||
|
||||
button.setAttribute( "data-coalition", unit.getMissionData().coalition );
|
||||
button.classList.add( "pill", "highlight-coalition" )
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ const UNITS_URI = "units";
|
||||
const LOGS_URI = "logs";
|
||||
const AIRBASES_URI = "airbases";
|
||||
const BULLSEYE_URI = "bullseyes";
|
||||
const MISSION_URI = "mission";
|
||||
|
||||
var lastUpdateTime = 0;
|
||||
var demoEnabled = false;
|
||||
@ -56,6 +57,10 @@ export function getLogs(callback: CallableFunction) {
|
||||
GET(callback, LOGS_URI);
|
||||
}
|
||||
|
||||
export function getMission(callback: CallableFunction) {
|
||||
GET(callback, MISSION_URI);
|
||||
}
|
||||
|
||||
export function getUnits(callback: CallableFunction, refresh: boolean = false) {
|
||||
GET(callback, `${UNITS_URI}?time=${refresh? 0: lastUpdateTime}`);
|
||||
}
|
||||
|
||||
@ -383,7 +383,7 @@ export class Unit extends Marker {
|
||||
unitAltitudeDiv.innerHTML = String(Math.floor(this.getFlightData().altitude / 0.3048 / 1000));
|
||||
}
|
||||
var pos = getMap().latLngToLayerPoint(this.getLatLng()).round();
|
||||
this.setZIndexOffset(Math.floor(this.getFlightData().altitude) - pos.y);
|
||||
this.setZIndexOffset(1000 + Math.floor(this.getFlightData().altitude) - pos.y);
|
||||
}
|
||||
|
||||
this.#forceUpdate = false;
|
||||
@ -503,7 +503,10 @@ export class Helicopter extends AirUnit {
|
||||
|
||||
export class GroundUnit extends Unit {
|
||||
constructor(ID: number, data: UnitData) {
|
||||
// TODO this is very messy
|
||||
var role = groundUnitsDatabase.getByName(data.baseData.name)?.loadouts[0].roles[0];
|
||||
if (role == undefined)
|
||||
role = "U";
|
||||
var roleType = (role === "SAM") ? "sam" : "mi";
|
||||
|
||||
super(ID, data, `
|
||||
|
||||
@ -101,6 +101,6 @@ export class UnitDatabase {
|
||||
|
||||
getShortLabelByName(name: string)
|
||||
{
|
||||
return this.units[name] === undefined? name: this.units[name].shortLabel;
|
||||
return this.units[name] === undefined? "U": this.units[name].shortLabel;
|
||||
}
|
||||
}
|
||||
@ -218,6 +218,8 @@ function Olympus.spawnAircraft(coalition, unitType, lat, lng, spawnOptions)
|
||||
["type"] = unitType,
|
||||
["x"] = spawnLocation.x,
|
||||
["y"] = spawnLocation.z,
|
||||
["alt"] = 20000 * 0.3048,
|
||||
["alt_type"] = "BARO",
|
||||
["skill"] = "Excellent",
|
||||
["payload"] =
|
||||
{
|
||||
@ -262,6 +264,7 @@ function Olympus.spawnAircraft(coalition, unitType, lat, lng, spawnOptions)
|
||||
["ETA_locked"] = true,
|
||||
["x"] = spawnLocation.x,
|
||||
["y"] = spawnLocation.z,
|
||||
["alt_type"] = "BARO",
|
||||
["formation_template"] = "",
|
||||
["airdromeId"] = airbaseID,
|
||||
["speed_locked"] = true,
|
||||
|
||||
@ -16,8 +16,8 @@ function Olympus.setMissionData(arg, time)
|
||||
local bullseyeVec3 = coalition.getMainRefPoint(i)
|
||||
local bullseyeLatitude, bullseyeLongitude, bullseyeAltitude = coord.LOtoLL(bullseyeVec3)
|
||||
bullseyes[i] = {}
|
||||
bullseyes[i]["lat"] = bullseyeLatitude
|
||||
bullseyes[i]["lng"] = bullseyeLongitude
|
||||
bullseyes[i]["latitude"] = bullseyeLatitude
|
||||
bullseyes[i]["longitude"] = bullseyeLongitude
|
||||
end
|
||||
|
||||
-- Units tactical data
|
||||
@ -63,24 +63,35 @@ function Olympus.setMissionData(arg, time)
|
||||
|
||||
-- Airbases data
|
||||
local base = world.getAirbases()
|
||||
local basesData = {}
|
||||
local airbases = {}
|
||||
for i = 1, #base do
|
||||
local info = {}
|
||||
local latitude, longitude, altitude = coord.LOtoLL(Airbase.getPoint(base[i]))
|
||||
info["callsign"] = Airbase.getCallsign(base[i])
|
||||
info["coalition"] = Airbase.getCoalition(base[i])
|
||||
info["lat"] = latitude
|
||||
info["lng"] = longitude
|
||||
local coalitionID = Airbase.getCoalition(base[i])
|
||||
if coalitionID == 0 then
|
||||
info["coalition"] = "neutral"
|
||||
elseif coalitionID == 1 then
|
||||
info["coalition"] = "red"
|
||||
else
|
||||
info["coalition"] = "blue"
|
||||
end
|
||||
info["latitude"] = latitude
|
||||
info["longitude"] = longitude
|
||||
if Airbase.getUnit(base[i]) then
|
||||
info["unitId"] = Airbase.getUnit(base[i]):getID()
|
||||
end
|
||||
basesData[i] = info
|
||||
airbases[i] = info
|
||||
end
|
||||
|
||||
local mission = {}
|
||||
mission.theatre = env.mission.theatre
|
||||
|
||||
-- Assemble missionData table
|
||||
missionData["bullseyes"] = bullseyes
|
||||
missionData["unitsData"] = unitsData
|
||||
missionData["airbases"] = basesData
|
||||
missionData["airbases"] = airbases
|
||||
missionData["mission"] = mission
|
||||
|
||||
local command = "Olympus.missionData = " .. Olympus.serializeTable(missionData) .. "\n" .. "Olympus.OlympusDLL.setMissionData()"
|
||||
net.dostring_in("export", command)
|
||||
|
||||
@ -17,6 +17,8 @@ Aircraft::Aircraft(json::value json, int ID) : AirUnit(json, ID)
|
||||
{
|
||||
log("New Aircraft created with ID: " + to_string(ID));
|
||||
addMeasure(L"category", json::value(getCategory()));
|
||||
setTargetSpeed(targetSpeed);
|
||||
setTargetAltitude(targetAltitude);
|
||||
};
|
||||
|
||||
void Aircraft::changeSpeed(wstring change)
|
||||
|
||||
@ -15,7 +15,7 @@ extern UnitsManager* unitsManager;
|
||||
/* Air unit */
|
||||
AirUnit::AirUnit(json::value json, int ID) : Unit(json, ID)
|
||||
{
|
||||
|
||||
|
||||
};
|
||||
|
||||
void AirUnit::setState(int newState)
|
||||
@ -203,7 +203,6 @@ void AirUnit::taskWingmen()
|
||||
|
||||
void AirUnit::AIloop()
|
||||
{
|
||||
log(L"AILoop");
|
||||
/* State machine */
|
||||
switch (state) {
|
||||
case State::IDLE: {
|
||||
|
||||
@ -11,8 +11,9 @@ auto before = std::chrono::system_clock::now();
|
||||
UnitsManager* unitsManager = nullptr;
|
||||
Server* server = nullptr;
|
||||
Scheduler* scheduler = nullptr;
|
||||
json::value airbasesData;
|
||||
json::value bullseyesData;
|
||||
json::value airbases;
|
||||
json::value bullseyes;
|
||||
json::value mission;
|
||||
mutex mutexLock;
|
||||
bool initialized = false;
|
||||
string sessionHash;
|
||||
@ -93,9 +94,11 @@ extern "C" DllExport int coreMissionData(lua_State * L)
|
||||
if (missionData.has_object_field(L"unitsData"))
|
||||
unitsManager->updateMissionData(missionData[L"unitsData"]);
|
||||
if (missionData.has_object_field(L"airbases"))
|
||||
airbasesData = missionData[L"airbases"];
|
||||
airbases = missionData[L"airbases"];
|
||||
if (missionData.has_object_field(L"bullseyes"))
|
||||
bullseyesData = missionData[L"bullseyes"];
|
||||
bullseyes = missionData[L"bullseyes"];
|
||||
if (missionData.has_object_field(L"mission"))
|
||||
mission = missionData[L"mission"];
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
@ -17,6 +17,8 @@ GroundUnit::GroundUnit(json::value json, int ID) : Unit(json, ID)
|
||||
{
|
||||
log("New Ground Unit created with ID: " + to_string(ID));
|
||||
addMeasure(L"category", json::value(getCategory()));
|
||||
setTargetSpeed(targetSpeed);
|
||||
setTargetAltitude(targetAltitude);
|
||||
};
|
||||
|
||||
void GroundUnit::AIloop()
|
||||
|
||||
@ -17,6 +17,8 @@ Helicopter::Helicopter(json::value json, int ID) : AirUnit(json, ID)
|
||||
{
|
||||
log("New Helicopter created with ID: " + to_string(ID));
|
||||
addMeasure(L"category", json::value(getCategory()));
|
||||
setTargetSpeed(targetSpeed);
|
||||
setTargetAltitude(targetAltitude);
|
||||
};
|
||||
|
||||
void Helicopter::changeSpeed(wstring change)
|
||||
|
||||
@ -17,6 +17,8 @@ NavyUnit::NavyUnit(json::value json, int ID) : Unit(json, ID)
|
||||
{
|
||||
log("New Navy Unit created with ID: " + to_string(ID));
|
||||
addMeasure(L"category", json::value(getCategory()));
|
||||
setTargetSpeed(targetSpeed);
|
||||
setTargetAltitude(targetAltitude);
|
||||
};
|
||||
|
||||
void NavyUnit::AIloop()
|
||||
|
||||
@ -12,8 +12,9 @@ using namespace std::chrono;
|
||||
|
||||
extern UnitsManager* unitsManager;
|
||||
extern Scheduler* scheduler;
|
||||
extern json::value airbasesData;
|
||||
extern json::value bullseyesData;
|
||||
extern json::value airbases;
|
||||
extern json::value bullseyes;
|
||||
extern json::value mission;
|
||||
extern mutex mutexLock;
|
||||
extern string sessionHash;
|
||||
|
||||
@ -101,9 +102,11 @@ void Server::handle_get(http_request request)
|
||||
answer[L"logs"] = logs;
|
||||
}
|
||||
else if (path[0] == AIRBASES_URI)
|
||||
answer[L"airbases"] = airbasesData;
|
||||
answer[L"airbases"] = airbases;
|
||||
else if (path[0] == BULLSEYE_URI)
|
||||
answer[L"bullseyes"] = bullseyesData;
|
||||
answer[L"bullseyes"] = bullseyes;
|
||||
else if (path[0] == MISSION_URI)
|
||||
answer[L"mission"] = mission;
|
||||
|
||||
milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
|
||||
answer[L"time"] = json::value::string(to_wstring(ms.count()));
|
||||
|
||||
@ -10,5 +10,6 @@
|
||||
#define LOGS_URI L"logs"
|
||||
#define AIRBASES_URI L"airbases"
|
||||
#define BULLSEYE_URI L"bullseyes"
|
||||
#define MISSION_URI L"mission"
|
||||
|
||||
#define UPDATE_TIME_INTERVAL 0.25
|
||||
Loading…
x
Reference in New Issue
Block a user