mirror of
https://github.com/akaAgar/the-universal-mission-for-dcs-world.git
synced 2026-08-17 03:11:21 +00:00
Initial commit
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
-- ====================================================================================
|
||||
-- TUM.AMBIENTWORLD - HANDLES LITTLE DETAILS DESIGNED TO MAKE THE GAME WORLD MORE ALIVE
|
||||
-- ====================================================================================
|
||||
-- ====================================================================================
|
||||
|
||||
TUM.ambientWorld = {}
|
||||
|
||||
do
|
||||
local groupIDs = {}
|
||||
|
||||
---------------
|
||||
-- CONSTANTS --
|
||||
---------------
|
||||
local ESCAPING_CREW_ONE_TIME_OUT_OF = 6 -- one time of out this number, crew will flee destroyed vehicles
|
||||
|
||||
local function doSpawnEscapingCrew(point3)
|
||||
local options = {
|
||||
disableWeapons = true,
|
||||
hidden = true,
|
||||
invisible = true,
|
||||
moveBy = 250,
|
||||
spreadDistance = math.random(2, 3),
|
||||
}
|
||||
|
||||
local unitTypes = Library.factions.getUnits(TUM.settings.getEnemyFaction(), DCSEx.enums.unitFamily.GROUND_INFANTRY, math.random(1, 3))
|
||||
if not unitTypes or #unitTypes == 0 then return end
|
||||
|
||||
local groupInfo = DCSEx.unitGroupMaker.create(TUM.settings.getEnemyCoalition(), Group.Category.GROUND, DCSEx.math.vec3ToVec2(point3), unitTypes, options)
|
||||
if groupInfo then
|
||||
table.insert(groupIDs, groupInfo.groupID)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Called when a unit is destroyed
|
||||
local function onEventDead(event)
|
||||
if not event.initiator then return end -- Nothing was hit
|
||||
|
||||
-- TODO: spawn from target scenery buildings and static structures
|
||||
|
||||
if Object.getCategory(event.initiator) ~= Object.Category.UNIT then return end -- Target wasn't an unit
|
||||
if event.initiator:getDesc().category ~= Unit.Category.GROUND_UNIT then return end -- Wasn't a ground unit
|
||||
if not event.initiator:hasAttribute("Vehicles") then return end -- Wasn't a vehicle
|
||||
if event.initiator:getCoalition() ~= TUM.settings.getEnemyCoalition() then return end -- Only spawn escaping crew from enemy vehicles
|
||||
|
||||
if math.random(1, ESCAPING_CREW_ONE_TIME_OUT_OF) ~= 1 then return end -- Do not spawn every time
|
||||
|
||||
TUM.log("Spawning crew escaping from destroyed unit "..event.initiator:getName())
|
||||
timer.scheduleFunction(
|
||||
doSpawnEscapingCrew,
|
||||
event.initiator:getPoint(),
|
||||
timer.getTime() + math.random(4, 7)
|
||||
)
|
||||
end
|
||||
|
||||
function TUM.ambientWorld.removeAll()
|
||||
for _,id in ipairs(groupIDs) do
|
||||
DCSEx.world.destroyGroupByID(id)
|
||||
end
|
||||
|
||||
groupIDs = {}
|
||||
end
|
||||
|
||||
-------------------------------------
|
||||
-- Called when an event is raised
|
||||
-- @param event The DCS World event
|
||||
-------------------------------------
|
||||
function TUM.ambientWorld.onEvent(event)
|
||||
if not event then return end -- No event
|
||||
|
||||
if event.id == world.event.S_EVENT_DEAD then
|
||||
onEventDead(event)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user