mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2026-08-21 02:31:39 +00:00
xx
This commit is contained in:
@@ -184,6 +184,7 @@ EVENT = {
|
|||||||
ClassName = "EVENT",
|
ClassName = "EVENT",
|
||||||
ClassID = 0,
|
ClassID = 0,
|
||||||
MissionEnd = false,
|
MissionEnd = false,
|
||||||
|
CreateMarkCoordinateOnEvent = false,
|
||||||
}
|
}
|
||||||
|
|
||||||
world.event.S_EVENT_NEW_CARGO = world.event.S_EVENT_MAX + 1000
|
world.event.S_EVENT_NEW_CARGO = world.event.S_EVENT_MAX + 1000
|
||||||
@@ -1345,7 +1346,9 @@ function EVENT:onEvent( Event )
|
|||||||
Event.IniDCSUnit = Event.initiator
|
Event.IniDCSUnit = Event.initiator
|
||||||
Event.IniDCSUnitName = ( Event.IniDCSUnit and Event.IniDCSUnit.getName ) and Event.IniDCSUnit:getName() or "Scenery no name "..math.random(1,20000)
|
Event.IniDCSUnitName = ( Event.IniDCSUnit and Event.IniDCSUnit.getName ) and Event.IniDCSUnit:getName() or "Scenery no name "..math.random(1,20000)
|
||||||
Event.IniUnitName = Event.IniDCSUnitName
|
Event.IniUnitName = Event.IniDCSUnitName
|
||||||
Event.IniUnit = SCENERY:Register( Event.IniDCSUnitName, Event.initiator )
|
local ID = (Event.IniDCSUnit and Event.IniDCSUnit.getID) and Event.IniDCSUnit:getID() or Event.IniDCSUnitName
|
||||||
|
Event.IniUnit = (_SCENERY ~= nil) and _SCENERY[ID] or nil
|
||||||
|
--Event.IniUnit = SCENERY:Register( Event.IniDCSUnitName, Event.initiator )
|
||||||
Event.IniCategory = (Event.IniDCSUnit and Event.IniDCSUnit.getDesc ) and Event.IniDCSUnit:getDesc().category
|
Event.IniCategory = (Event.IniDCSUnit and Event.IniDCSUnit.getDesc ) and Event.IniDCSUnit:getDesc().category
|
||||||
Event.IniTypeName = (Event.initiator and Event.initiator.isExist
|
Event.IniTypeName = (Event.initiator and Event.initiator.isExist
|
||||||
and Event.initiator:isExist() and Event.IniDCSUnit and Event.IniDCSUnit.getTypeName) and Event.IniDCSUnit:getTypeName() or "SCENERY"
|
and Event.initiator:isExist() and Event.IniDCSUnit and Event.IniDCSUnit.getTypeName) and Event.IniDCSUnit:getTypeName() or "SCENERY"
|
||||||
@@ -1449,11 +1452,11 @@ function EVENT:onEvent( Event )
|
|||||||
Event.TgtDCSUnitName = Event.TgtDCSUnit.getName and Event.TgtDCSUnit:getName() or nil
|
Event.TgtDCSUnitName = Event.TgtDCSUnit.getName and Event.TgtDCSUnit:getName() or nil
|
||||||
if Event.TgtDCSUnitName~=nil then
|
if Event.TgtDCSUnitName~=nil then
|
||||||
Event.TgtUnitName = Event.TgtDCSUnitName
|
Event.TgtUnitName = Event.TgtDCSUnitName
|
||||||
Event.TgtUnit = SCENERY:Register( Event.TgtDCSUnitName, Event.target )
|
local ID = (Event.TgtDCSUnit and Event.TgtDCSUnit.getID) and Event.TgtDCSUnit:getID() or Event.TgtDCSUnitName
|
||||||
|
--Event.TgtUnit = SCENERY:Register( Event.TgtDCSUnitName, Event.target )
|
||||||
|
Event.TgtUnit = (_SCENERY ~= nil) and _SCENERY[ID] or nil
|
||||||
Event.TgtCategory = Event.TgtDCSUnit:getDesc().category
|
Event.TgtCategory = Event.TgtDCSUnit:getDesc().category
|
||||||
Event.TgtTypeName = Event.TgtDCSUnit:getTypeName()
|
Event.TgtTypeName = Event.TgtDCSUnit:getTypeName()
|
||||||
--self:I("Event Registered for Scenery Object ".. Event.TgtDCSUnitName)
|
|
||||||
--UTILS.PrintTableToLog(Event.TgtUnit)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1492,7 +1495,9 @@ function EVENT:onEvent( Event )
|
|||||||
if Event.idx then
|
if Event.idx then
|
||||||
Event.MarkID=Event.idx
|
Event.MarkID=Event.idx
|
||||||
Event.MarkVec3=Event.pos
|
Event.MarkVec3=Event.pos
|
||||||
Event.MarkCoordinate=COORDINATE:NewFromVec3(Event.pos)
|
if self.CreateMarkCoordinateOnEvent == true then
|
||||||
|
Event.MarkCoordinate=COORDINATE:NewFromVec3(Event.pos)
|
||||||
|
end
|
||||||
Event.MarkText=Event.text
|
Event.MarkText=Event.text
|
||||||
Event.MarkCoalition=Event.coalition
|
Event.MarkCoalition=Event.coalition
|
||||||
Event.IniCoalition=Event.coalition
|
Event.IniCoalition=Event.coalition
|
||||||
|
|||||||
@@ -3725,25 +3725,6 @@ do -- COORDINATE
|
|||||||
|
|
||||||
local ModeA2A = nil
|
local ModeA2A = nil
|
||||||
|
|
||||||
--[[
|
|
||||||
if Task then
|
|
||||||
if Task:IsInstanceOf( TASK_A2A ) then
|
|
||||||
ModeA2A = true
|
|
||||||
else
|
|
||||||
if Task:IsInstanceOf( TASK_A2G ) then
|
|
||||||
ModeA2A = false
|
|
||||||
else
|
|
||||||
if Task:IsInstanceOf( TASK_CARGO ) then
|
|
||||||
ModeA2A = false
|
|
||||||
end
|
|
||||||
if Task:IsInstanceOf( TASK_CAPTURE_ZONE ) then
|
|
||||||
ModeA2A = false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
--]]
|
|
||||||
|
|
||||||
if ModeA2A == nil then
|
if ModeA2A == nil then
|
||||||
local IsAir = Controllable and ( Controllable:IsAirPlane() or Controllable:IsHelicopter() ) or false
|
local IsAir = Controllable and ( Controllable:IsAirPlane() or Controllable:IsHelicopter() ) or false
|
||||||
if IsAir then
|
if IsAir then
|
||||||
|
|||||||
@@ -4605,6 +4605,14 @@ function WAREHOUSE:onafterRequest(From, Event, To, Request)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function WAREHOUSE:_CallbackLoaded()
|
||||||
|
MESSAGE:New("TaskEmbarking",30,"Task"):ToAll()
|
||||||
|
end
|
||||||
|
|
||||||
|
function WAREHOUSE:_CallbackUnloaded()
|
||||||
|
MESSAGE:New("TaskDisembarking",30,"Task"):ToAll()
|
||||||
|
end
|
||||||
|
|
||||||
--- On after "RequestSpawned" event. Initiates the transport of the assets to the requesting warehouse.
|
--- On after "RequestSpawned" event. Initiates the transport of the assets to the requesting warehouse.
|
||||||
-- @param #WAREHOUSE self
|
-- @param #WAREHOUSE self
|
||||||
-- @param #string From From state.
|
-- @param #string From From state.
|
||||||
@@ -4713,55 +4721,33 @@ function WAREHOUSE:onafterRequestSpawned(From, Event, To, Request, CargoGroupSet
|
|||||||
_boardradius=6000
|
_boardradius=6000
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Empty cargo group set.
|
|
||||||
local CargoGroups=SET_CARGO:New()
|
|
||||||
|
|
||||||
-- Add cargo groups to set.
|
|
||||||
for _,_group in pairs(CargoGroupSet:GetSetObjects()) do
|
|
||||||
|
|
||||||
-- Find asset belonging to this group.
|
|
||||||
local asset=self:FindAssetInDB(_group)
|
|
||||||
-- New cargo group object.
|
|
||||||
local cargogroup=CARGO_GROUP:New(_group, _cargotype,_group:GetName(),_boardradius, asset.loadradius)
|
|
||||||
|
|
||||||
-- Set weight for this group.
|
|
||||||
cargogroup:SetWeight(asset.weight)
|
|
||||||
|
|
||||||
-- Add group to group set.
|
|
||||||
CargoGroups:AddCargo(cargogroup)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
------------------------
|
------------------------
|
||||||
-- Create Dispatchers --
|
-- Create Dispatchers --
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
-- Cargo dispatcher.
|
-- Cargo dispatcher.
|
||||||
local CargoTransport --AI.AI_Cargo_Dispatcher#AI_CARGO_DISPATCHER
|
local CargoTransport --Ops.Auftrag#AUFTRAG
|
||||||
|
|
||||||
if Request.transporttype==WAREHOUSE.TransportType.AIRPLANE then
|
if Request.transporttype==WAREHOUSE.TransportType.AIRPLANE or Request.transporttype==WAREHOUSE.TransportType.HELICOPTER then
|
||||||
|
|
||||||
-- Pickup and deploy zones.
|
-- Pickup and deploy zones.
|
||||||
local PickupAirbaseSet = SET_ZONE:New():AddZone(ZONE_AIRBASE:New(self.airbase:GetName()))
|
local PickupZone = ZONE_AIRBASE:New(self.airbase:GetName())
|
||||||
local DeployAirbaseSet = SET_ZONE:New():AddZone(ZONE_AIRBASE:New(Request.airbase:GetName()))
|
local DeployZone = ZONE_AIRBASE:New(Request.airbase:GetName())
|
||||||
|
|
||||||
-- Define dispatcher for this task.
|
local DropoffCoordinate = DeployZone:GetRandomCoordinate(50,200,{land.SurfaceType.LAND, land.SurfaceType.ROAD})
|
||||||
CargoTransport = AI_CARGO_DISPATCHER_AIRPLANE:New(TransportGroupSet, CargoGroups, PickupAirbaseSet, DeployAirbaseSet)
|
local PickupCoordinate = PickupZone:GetRandomCoordinate(50,200,{land.SurfaceType.LAND, land.SurfaceType.ROAD})
|
||||||
|
|
||||||
-- Set home zone.
|
local Auftrag = AUFTRAG:NewTROOPTRANSPORT(CargoGroupSet,DropoffCoordinate,PickupCoordinate,500)
|
||||||
CargoTransport:SetHomeZone(ZONE_AIRBASE:New(self.airbase:GetName()))
|
|
||||||
|
|
||||||
elseif Request.transporttype==WAREHOUSE.TransportType.HELICOPTER then
|
CargoGroupSet:SetProperty("WAREHOUSE_REQUEST",Request)
|
||||||
|
|
||||||
-- Pickup and deploy zones.
|
for _,_Group in pairs (TransportGroupSet.Set) do
|
||||||
local PickupZoneSet = SET_ZONE:New():AddZone(self.spawnzone)
|
local FlightGroup = FLIGHTGROUP:New(_Group)
|
||||||
local DeployZoneSet = SET_ZONE:New():AddZone(Request.warehouse.spawnzone)
|
FlightGroup:AddMission(Auftrag)
|
||||||
|
Auftrag:AddOpsGroup(FlightGroup)
|
||||||
-- Define dispatcher for this task.
|
FlightGroup:SetHomebase(self.airbase)
|
||||||
CargoTransport = AI_CARGO_DISPATCHER_HELICOPTER:New(TransportGroupSet, CargoGroups, PickupZoneSet, DeployZoneSet)
|
end
|
||||||
|
CargoTransport=Auftrag
|
||||||
-- Home zone.
|
|
||||||
CargoTransport:SetHomeZone(self.spawnzone)
|
|
||||||
|
|
||||||
elseif Request.transporttype==WAREHOUSE.TransportType.APC then
|
elseif Request.transporttype==WAREHOUSE.TransportType.APC then
|
||||||
|
|
||||||
@@ -4824,8 +4810,6 @@ function WAREHOUSE:onafterRequestSpawned(From, Event, To, Request, CargoGroupSet
|
|||||||
deployinner=20
|
deployinner=20
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
CargoTransport:SetPickupRadius(pickupouter, pickupinner)
|
|
||||||
CargoTransport:SetDeployRadius(deployouter, deployinner)
|
|
||||||
|
|
||||||
|
|
||||||
-- Adjust carrier units. This has to come AFTER the dispatchers have been defined because they set the cargobay free weight!
|
-- Adjust carrier units. This has to come AFTER the dispatchers have been defined because they set the cargobay free weight!
|
||||||
@@ -4851,107 +4835,77 @@ function WAREHOUSE:onafterRequestSpawned(From, Event, To, Request, CargoGroupSet
|
|||||||
-- Dispatcher Event Functions --
|
-- Dispatcher Event Functions --
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
--- Function called after carrier picked up something.
|
--- Function called when cargo is loading.
|
||||||
function CargoTransport:OnAfterPickedUp(From, Event, To, Carrier, PickupZone)
|
function CargoTransport:OnBeforeExecuting(From,Event,To)
|
||||||
|
-- Cargo loaded
|
||||||
-- Get warehouse state.
|
-- Get warehouse state.
|
||||||
local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE
|
local opsgroups = CargoTransport:GetOpsGroups()
|
||||||
|
|
||||||
-- Debug message.
|
for _,_group in pairs(opsgroups) do
|
||||||
local text=string.format("Carrier group %s picked up at pickup zone %s.", Carrier:GetName(), PickupZone:GetName())
|
|
||||||
warehouse:T(warehouse.lid..text)
|
|
||||||
|
|
||||||
end
|
local Carrier = _group:GetGroup()
|
||||||
|
local Element = Carrier:GetUnit(1)
|
||||||
|
local warehouse=Carrier:GetProperty("WAREHOUSE") --#WAREHOUSE
|
||||||
|
|
||||||
--- Function called if something was deployed.
|
for _,Cargo in pairs(CargoGroupSet.Set) do
|
||||||
function CargoTransport:OnAfterDeployed(From, Event, To, Carrier, DeployZone)
|
|
||||||
|
|
||||||
-- Get warehouse state.
|
-- Debug message.
|
||||||
local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE
|
local text=string.format("Carrier group %s loaded cargo %s into unit %s in pickup zone", Carrier:GetName(), Cargo:GetName(), Element.UnitName)
|
||||||
|
warehouse:T(warehouse.lid..text)
|
||||||
|
|
||||||
-- Debug message.
|
-- Get cargo group object.
|
||||||
-- TODO: Depoloy zone is nil!
|
local group=Cargo --Wrapper.Group#GROUP
|
||||||
--local text=string.format("Carrier group %s deployed at deploy zone %s.", Carrier:GetName(), DeployZone:GetName())
|
|
||||||
--warehouse:T(warehouse.lid..text)
|
|
||||||
|
|
||||||
end
|
-- Get request.
|
||||||
|
local request = CargoGroupSet:GetProperty("WAREHOUSE_REQUEST")
|
||||||
|
|
||||||
--- Function called if carrier group is going home.
|
-- Add cargo group to this carrier.
|
||||||
function CargoTransport:OnAfterHome(From, Event, To, Carrier, Coordinate, Speed, Height, HomeZone)
|
table.insert(request.carriercargo[Element.UnitName], warehouse:_GetNameWithOut(Cargo:GetName()))
|
||||||
|
|
||||||
-- Get warehouse state.
|
|
||||||
local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE
|
|
||||||
|
|
||||||
-- Debug message.
|
|
||||||
local text=string.format("Carrier group %s going home to zone %s.", Carrier:GetName(), HomeZone:GetName())
|
|
||||||
warehouse:T(warehouse.lid..text)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Function called when a carrier unit has loaded a cargo group.
|
|
||||||
function CargoTransport:OnAfterLoaded(From, Event, To, Carrier, Cargo, CarrierUnit, PickupZone)
|
|
||||||
|
|
||||||
-- Get warehouse state.
|
|
||||||
local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE
|
|
||||||
|
|
||||||
-- Debug message.
|
|
||||||
local text=string.format("Carrier group %s loaded cargo %s into unit %s in pickup zone %s", Carrier:GetName(), Cargo:GetName(), CarrierUnit:GetName(), PickupZone:GetName())
|
|
||||||
warehouse:T(warehouse.lid..text)
|
|
||||||
|
|
||||||
-- Get cargo group object.
|
|
||||||
local group=Cargo:GetObject() --Wrapper.Group#GROUP
|
|
||||||
|
|
||||||
-- Get request.
|
|
||||||
local request=warehouse:_GetRequestOfGroup(group, warehouse.pending)
|
|
||||||
|
|
||||||
-- Add cargo group to this carrier.
|
|
||||||
table.insert(request.carriercargo[CarrierUnit:GetName()], warehouse:_GetNameWithOut(Cargo:GetName()))
|
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Function called when cargo has arrived and was unloaded.
|
--- Function called when cargo has arrived and was unloaded.
|
||||||
function CargoTransport:OnAfterUnloaded(From, Event, To, Carrier, Cargo, CarrierUnit, DeployZone)
|
function CargoTransport:OnBeforeDone(From,Event,To)
|
||||||
|
|
||||||
|
-- Cargo unloading
|
||||||
-- Get warehouse state.
|
-- Get warehouse state.
|
||||||
local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE
|
local opsgroups = CargoTransport:GetOpsGroups()
|
||||||
|
|
||||||
-- Get group obejet.
|
for _,_group in pairs(opsgroups) do
|
||||||
local group=Cargo:GetObject() --Wrapper.Group#GROUP
|
|
||||||
|
|
||||||
-- Debug message.
|
local Carrier = _group:GetGroup()
|
||||||
local text=string.format("Cargo group %s was unloaded from carrier unit %s.", tostring(group:GetName()), tostring(CarrierUnit:GetName()))
|
local Element = Carrier:GetUnit(1)
|
||||||
warehouse:T(warehouse.lid..text)
|
local warehouse=Carrier:GetProperty("WAREHOUSE") --#WAREHOUSE
|
||||||
|
|
||||||
-- Load the cargo in the warehouse.
|
for _,Cargo in pairs(CargoGroupSet.Set) do
|
||||||
--Cargo:Load(warehouse.warehouse)
|
|
||||||
|
|
||||||
-- Trigger Arrived event.
|
-- Debug message.
|
||||||
warehouse:Arrived(group)
|
local text=string.format("Cargo group %s was unloaded from carrier unit", tostring(Element:GetName()))
|
||||||
|
warehouse:T(warehouse.lid..text)
|
||||||
|
|
||||||
|
-- Trigger Arrived event.
|
||||||
|
warehouse:Arrived(Cargo)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function _group:OnAfterLanded(From,Event,To,airbase)
|
||||||
|
local mybase = warehouse.airbasename
|
||||||
|
if airbase:GetName() == mybase then
|
||||||
|
-- Debug info.
|
||||||
|
local text=string.format("Carrier %s is back home at warehouse %s.", tostring(Carrier:GetName()), tostring(warehouse.warehouse:GetName()))
|
||||||
|
MESSAGE:New(text, 5):ToAllIf(warehouse.Debug)
|
||||||
|
warehouse:I(warehouse.lid..text)
|
||||||
|
|
||||||
|
-- Call arrived event for carrier.
|
||||||
|
warehouse:__Arrived(1, Carrier)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after BackHome event.
|
|
||||||
function CargoTransport:OnAfterBackHome(From, Event, To, Carrier)
|
|
||||||
|
|
||||||
-- Intellisense.
|
|
||||||
local carrier=Carrier --Wrapper.Group#GROUP
|
|
||||||
|
|
||||||
-- Get warehouse state.
|
|
||||||
local warehouse=carrier:GetState(carrier, "WAREHOUSE") --#WAREHOUSE
|
|
||||||
carrier:SmokeWhite()
|
|
||||||
|
|
||||||
-- Debug info.
|
|
||||||
local text=string.format("Carrier %s is back home at warehouse %s.", tostring(Carrier:GetName()), tostring(warehouse.warehouse:GetName()))
|
|
||||||
MESSAGE:New(text, 5):ToAllIf(warehouse.Debug)
|
|
||||||
warehouse:I(warehouse.lid..text)
|
|
||||||
|
|
||||||
-- Call arrived event for carrier.
|
|
||||||
warehouse:__Arrived(1, Carrier)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Start dispatcher.
|
|
||||||
CargoTransport:__Start(5)
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
@@ -5453,7 +5407,8 @@ function WAREHOUSE:onafterAssetSpawned(From, Event, To, group, asset, request)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Set warehouse state.
|
-- Set warehouse state.
|
||||||
group:SetState(group, "WAREHOUSE", self)
|
--group:SetState(group, "WAREHOUSE", self)
|
||||||
|
group:SetProperty("WAREHOUSE",self)
|
||||||
|
|
||||||
-- Check if all assets groups are spawned and trigger events.
|
-- Check if all assets groups are spawned and trigger events.
|
||||||
local n=0
|
local n=0
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
do -- ZoneGoal
|
do -- ZoneGoal
|
||||||
|
|
||||||
-- @type ZONE_GOAL_CARGO
|
--- @type ZONE_GOAL_CARGO
|
||||||
-- @extends Functional.ZoneGoal#ZONE_GOAL
|
-- @extends Functional.ZoneGoal#ZONE_GOAL
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -511,7 +511,7 @@ function OPSTRANSPORT:New(CargoGroups, PickupZone, DeployZone)
|
|||||||
-- @param Ops.OpsGroup#OPSGROUP OpsGroupCarrier Carrier OPSGROUP that unloaded the cargo.
|
-- @param Ops.OpsGroup#OPSGROUP OpsGroupCarrier Carrier OPSGROUP that unloaded the cargo.
|
||||||
|
|
||||||
|
|
||||||
--TODO: Psydofunctions
|
--TODO: Pseudofunctions
|
||||||
|
|
||||||
-- Call status update.
|
-- Call status update.
|
||||||
self:__StatusUpdate(-1)
|
self:__StatusUpdate(-1)
|
||||||
|
|||||||
Reference in New Issue
Block a user