diff --git a/client/src/unit/unitsmanager.ts b/client/src/unit/unitsmanager.ts index 28652824..c0c30a5b 100644 --- a/client/src/unit/unitsmanager.ts +++ b/client/src/unit/unitsmanager.ts @@ -664,28 +664,28 @@ export class UnitsManager { spawnUnits(category: string, units: any, coalition: string = "blue", immediate: boolean = true, airbase: string = "") { var spawnPoints = 0; if (category === "Aircraft") { - if (airbase == "" && getMissionHandler().getRemainingSetupTime() < 0 && getMissionHandler().getCommandModeOptions().commandMode !== GAME_MASTER) { + if (airbase == "" && getMissionHandler().getCommandModeOptions().restrictSpawns && getMissionHandler().getRemainingSetupTime() < 0 && getMissionHandler().getCommandModeOptions().commandMode !== GAME_MASTER) { getInfoPopup().setText("Aircrafts can be air spawned during the SETUP phase only"); return false; } spawnPoints = units.reduce((points: number, unit: any) => {return points + aircraftDatabase.getSpawnPointsByName(unit.unitType)}, 0); spawnAircrafts(units, coalition, airbase, immediate, spawnPoints); } else if (category === "Helicopter") { - if (airbase == "" && getMissionHandler().getRemainingSetupTime() < 0 && getMissionHandler().getCommandModeOptions().commandMode !== GAME_MASTER) { + if (airbase == "" && getMissionHandler().getCommandModeOptions().restrictSpawns && getMissionHandler().getRemainingSetupTime() < 0 && getMissionHandler().getCommandModeOptions().commandMode !== GAME_MASTER) { getInfoPopup().setText("Helicopters can be air spawned during the SETUP phase only"); return false; } spawnPoints = units.reduce((points: number, unit: any) => {return points + helicopterDatabase.getSpawnPointsByName(unit.unitType)}, 0); spawnHelicopters(units, coalition, airbase, immediate, spawnPoints); } else if (category === "GroundUnit") { - if (getMissionHandler().getRemainingSetupTime() < 0 && getMissionHandler().getCommandModeOptions().commandMode !== GAME_MASTER) { + if (getMissionHandler().getCommandModeOptions().restrictSpawns && getMissionHandler().getRemainingSetupTime() < 0 && getMissionHandler().getCommandModeOptions().commandMode !== GAME_MASTER) { getInfoPopup().setText("Ground units can be spawned during the SETUP phase only"); return false; } spawnPoints = units.reduce((points: number, unit: any) => {return points + groundUnitDatabase.getSpawnPointsByName(unit.unitType)}, 0); spawnGroundUnits(units, coalition, immediate, spawnPoints); } else if (category === "NavyUnit") { - if (getMissionHandler().getRemainingSetupTime() < 0 && getMissionHandler().getCommandModeOptions().commandMode !== GAME_MASTER) { + if (getMissionHandler().getCommandModeOptions().restrictSpawns && getMissionHandler().getRemainingSetupTime() < 0 && getMissionHandler().getCommandModeOptions().commandMode !== GAME_MASTER) { getInfoPopup().setText("Navy units can be spawned during the SETUP phase only"); return false; } diff --git a/scripts/OlympusCommand.lua b/scripts/OlympusCommand.lua index 183f8ff2..28abaddb 100644 --- a/scripts/OlympusCommand.lua +++ b/scripts/OlympusCommand.lua @@ -704,17 +704,18 @@ function Olympus.setUnitsData(arg, time) -- Get the targets detected by the group controller local group = unit:getGroup() local controller = group:getController() - local controllerTargets = controller:getDetectedTargets() + local contacts = {} - for i, target in ipairs(controllerTargets) do - for det, enum in pairs(Controller.Detection) do - if target.object ~= nil then + for det, enum in pairs(Controller.Detection) do + local controllerTargets = unit:getController():getDetectedTargets(enum) + for i, target in ipairs(controllerTargets) do + if target.object ~= nil and target.visible then target["detectionMethod"] = det contacts[#contacts + 1] = target end end end - + table["country"] = unit:getCountry() table["unitName"] = unit:getName() table["groupName"] = group:getName() @@ -756,7 +757,7 @@ function Olympus.setWeaponsData(arg, time) local startIndex = Olympus.weaponIndex local endIndex = startIndex + Olympus.weaponStep local index = 0 - for ID, unit in pairs(Olympus.weapons) do + for ID, weapon in pairs(Olympus.weapons) do index = index + 1 if index > startIndex then if weapon ~= nil then @@ -817,7 +818,7 @@ function Olympus.setWeaponsData(arg, time) Olympus.weaponsData["weapons"] = weapons Olympus.OlympusDLL.setWeaponsData() - return time + 0.05 + return time + 0.25 end function Olympus.setMissionData(arg, time) @@ -875,7 +876,7 @@ function Olympus.initializeUnits() Olympus.units[unit["id_"]] = unit end end - Olympus.debug("Olympus units table initialized", 2) + Olympus.notify("Olympus units table initialized", 2) else Olympus.debug("MIST DBs not ready", 2) timer.scheduleFunction(Olympus.initializeUnits, {}, timer.getTime() + 1) @@ -946,7 +947,6 @@ end ------------------------------------------------------------------------------------------------------ -- Olympus startup script ------------------------------------------------------------------------------------------------------ - local OlympusName = 'Olympus ' .. version .. ' C++ module'; Olympus.DLLsloaded = Olympus.loadDLLs() if Olympus.DLLsloaded then @@ -962,7 +962,6 @@ if handler ~= nil then end handler = {} function handler:onEvent(event) - Olympus.debug(Olympus.serializeTable(event), 2) if event.id == 1 then local weapon = event.weapon Olympus.weapons[weapon["id_"]] = weapon @@ -977,6 +976,7 @@ world.addEventHandler(handler) -- Start the periodic functions timer.scheduleFunction(Olympus.setUnitsData, {}, timer.getTime() + 0.05) +timer.scheduleFunction(Olympus.setWeaponsData, {}, timer.getTime() + 0.25) timer.scheduleFunction(Olympus.setMissionData, {}, timer.getTime() + 1) -- Initialize the ME units diff --git a/src/core/src/core.cpp b/src/core/src/core.cpp index d8fefd44..3fc42753 100644 --- a/src/core/src/core.cpp +++ b/src/core/src/core.cpp @@ -115,7 +115,7 @@ extern "C" DllExport int coreUnitsData(lua_State * L) return(0); } -extern "C" DllExport int coreWeaponssData(lua_State * L) +extern "C" DllExport int coreWeaponsData(lua_State * L) { if (!initialized) return (0); diff --git a/src/core/src/unit.cpp b/src/core/src/unit.cpp index 7859fae9..3edd5625 100644 --- a/src/core/src/unit.cpp +++ b/src/core/src/unit.cpp @@ -72,7 +72,7 @@ void Unit::update(json::value json, double dt) if (json.has_boolean_field(L"isAlive")) setAlive(json[L"isAlive"].as_bool()); - if (json.has_object_field(L"isHuman")) + if (json.has_boolean_field(L"isHuman")) setHuman(json[L"isHuman"].as_bool()); if (json.has_number_field(L"fuel")) { @@ -109,7 +109,7 @@ void Unit::update(json::value json, double dt) contactItem.ID = contactJson[L"object"][L"id_"].as_number().to_uint32(); string detectionMethod = to_string(contactJson[L"detectionMethod"]); - if (detectionMethod.compare("VISUAL") == 0) contactItem.detectionMethod = 1; + if (detectionMethod.compare("VISUAL") == 0) contactItem.detectionMethod = 1; else if (detectionMethod.compare("OPTIC") == 0) contactItem.detectionMethod = 2; else if (detectionMethod.compare("RADAR") == 0) contactItem.detectionMethod = 4; else if (detectionMethod.compare("IRST") == 0) contactItem.detectionMethod = 8; diff --git a/src/core/src/unitsmanager.cpp b/src/core/src/unitsmanager.cpp index 068abccc..f9de0af0 100644 --- a/src/core/src/unitsmanager.cpp +++ b/src/core/src/unitsmanager.cpp @@ -110,10 +110,6 @@ void UnitsManager::update(json::value& json, double dt) units[ID] = dynamic_cast(new GroundUnit(p.second, ID)); else if (category.compare("NavyUnit") == 0) units[ID] = dynamic_cast(new NavyUnit(p.second, ID)); - else if (category.compare("Missile") == 0) - units[ID] = dynamic_cast(new Missile(p.second, ID)); - else if (category.compare("Bomb") == 0) - units[ID] = dynamic_cast(new Bomb(p.second, ID)); /* Initialize the unit if creation was successfull */ if (units.count(ID) != 0) { diff --git a/src/olympus/src/olympus.cpp b/src/olympus/src/olympus.cpp index 3a8de24e..601a3ebb 100644 --- a/src/olympus/src/olympus.cpp +++ b/src/olympus/src/olympus.cpp @@ -69,21 +69,21 @@ static int onSimulationStart(lua_State* L) goto error; } - coreUnitsData = (f_coreFrame)GetProcAddress(hGetProcIDDLL, "coreUnitsData"); + coreUnitsData = (f_coreUnitsData)GetProcAddress(hGetProcIDDLL, "coreUnitsData"); if (!coreUnitsData) { LogError(L, "Error getting coreUnitsData ProcAddress from DLL"); goto error; } - coreWeaponsData = (f_coreFrame)GetProcAddress(hGetProcIDDLL, "coreWeaponsData"); + coreWeaponsData = (f_coreWeaponsData)GetProcAddress(hGetProcIDDLL, "coreWeaponsData"); if (!coreWeaponsData) { LogError(L, "Error getting coreWeaponsData ProcAddress from DLL"); goto error; } - coreMissionData = (f_coreFrame)GetProcAddress(hGetProcIDDLL, "coreMissionData"); + coreMissionData = (f_coreMissionData)GetProcAddress(hGetProcIDDLL, "coreMissionData"); if (!coreMissionData) { LogError(L, "Error getting coreMissionData ProcAddress from DLL");