mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
OPS
This commit is contained in:
parent
242462b9ba
commit
bcf8973eed
@ -353,10 +353,10 @@ end
|
||||
function ARMYGROUP:onbeforeStatus(From, Event, To)
|
||||
|
||||
if self:IsDead() then
|
||||
self:T(self.lid..string.format("Onbefore Status DEAD ==> false"))
|
||||
self:I(self.lid..string.format("Onbefore Status DEAD ==> false"))
|
||||
return false
|
||||
elseif self:IsStopped() then
|
||||
self:T(self.lid..string.format("Onbefore Status STOPPED ==> false"))
|
||||
self:I(self.lid..string.format("Onbefore Status STOPPED ==> false"))
|
||||
return false
|
||||
end
|
||||
|
||||
@ -476,7 +476,7 @@ function ARMYGROUP:onafterStatus(From, Event, To)
|
||||
---
|
||||
|
||||
if self.cargoTransport then
|
||||
|
||||
|
||||
local text=string.format("Cargo: %s %s --> %s", self.carrierStatus, self.cargoTransport.pickupzone:GetName(), self.cargoTransport.deployzone:GetName())
|
||||
|
||||
for _,_cargo in pairs(self.cargoTransport.cargos) do
|
||||
@ -484,19 +484,57 @@ function ARMYGROUP:onafterStatus(From, Event, To)
|
||||
local name=cargo.opsgroup:GetName()
|
||||
local gstatus=cargo.opsgroup:GetState()
|
||||
local cstatus=cargo.opsgroup.cargoStatus
|
||||
text=text..string.format("\n- %s [%s]: %s", name, gstatus, cstatus)
|
||||
|
||||
if self:IsPickingup() then
|
||||
|
||||
elseif self:IsLoading() then
|
||||
|
||||
elseif self:IsLoaded() then
|
||||
|
||||
end
|
||||
|
||||
text=text..string.format("\n- %s [%s]: %s", name, gstatus, cstatus)
|
||||
end
|
||||
|
||||
self:I(self.lid..text)
|
||||
self:I(self.lid..text)
|
||||
|
||||
|
||||
if self:IsNotCarrier() then
|
||||
|
||||
env.info("FF not carrier ==> pickup")
|
||||
|
||||
-- Initiate the cargo transport process.
|
||||
self:Pickup(self.cargoTransport.pickupzone)
|
||||
|
||||
elseif self:IsPickingup() then
|
||||
|
||||
env.info("FF picking up")
|
||||
|
||||
elseif self:IsLoading() then
|
||||
|
||||
env.info("FF loading")
|
||||
|
||||
local boarding=false
|
||||
for _,_cargo in pairs(self.cargoTransport.cargos) do
|
||||
local cargo=_cargo --Ops.OpsGroup#OPSGROUP.CargoGroup
|
||||
|
||||
if cargo.opsgroup.carrierGroup:GetName()==self:GetName() and cargo.opsgroup.cargoStatus==OPSGROUP.CargoStatus.BOARDING then
|
||||
boarding=true
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
-- Boarding finished ==> Transport cargo.
|
||||
if not boarding then
|
||||
env.info("FF boarding finished ==> Loaded")
|
||||
self:Loaded()
|
||||
end
|
||||
|
||||
elseif self:IsLoaded() then
|
||||
|
||||
env.info("FF loaded")
|
||||
|
||||
elseif self:IsTransporting() then
|
||||
|
||||
env.info("FF transporting")
|
||||
|
||||
elseif self:IsUnloading() then
|
||||
|
||||
env.info("FF unloading")
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
@ -1190,7 +1228,7 @@ function ARMYGROUP:_InitGroup()
|
||||
self.actype=units[1]:GetTypeName()
|
||||
|
||||
-- Debug info.
|
||||
if self.verbose>=1 then
|
||||
if self.verbose>=0 then
|
||||
local text=string.format("Initialized Army Group %s:\n", self.groupname)
|
||||
text=text..string.format("Unit type = %s\n", self.actype)
|
||||
text=text..string.format("Speed max = %.1f Knots\n", UTILS.KmphToKnots(self.speedMax))
|
||||
|
||||
@ -1010,6 +1010,7 @@ function FLIGHTGROUP:onafterStatus(From, Event, To)
|
||||
-- Engage Detected Targets
|
||||
---
|
||||
if self:IsAirborne() and self.detectionOn and self.engagedetectedOn and not (self.fuellow or self.fuelcritical) then
|
||||
env.info("FF 100")
|
||||
|
||||
-- Target.
|
||||
local targetgroup=nil --Wrapper.Group#GROUP
|
||||
@ -1019,8 +1020,12 @@ function FLIGHTGROUP:onafterStatus(From, Event, To)
|
||||
for _,_group in pairs(self.detectedgroups:GetSet()) do
|
||||
local group=_group --Wrapper.Group#GROUP
|
||||
|
||||
env.info("FF 200")
|
||||
|
||||
if group and group:IsAlive() then
|
||||
|
||||
env.info("FF 300")
|
||||
|
||||
-- Get 3D vector of target.
|
||||
local targetVec3=group:GetVec3()
|
||||
|
||||
@ -1029,11 +1034,13 @@ function FLIGHTGROUP:onafterStatus(From, Event, To)
|
||||
|
||||
if distance<=self.engagedetectedRmax and distance<targetdist then
|
||||
|
||||
env.info("FF 400")
|
||||
|
||||
-- Check type attribute.
|
||||
local righttype=false
|
||||
for _,attribute in pairs(self.engagedetectedTypes) do
|
||||
local gotit=group:HasAttribute(attribute, false)
|
||||
--self:I(self.lid..string.format("Group %s has attribute %s = %s", group:GetName(), attribute, tostring(gotit)))
|
||||
self:I(self.lid..string.format("Group %s has attribute %s = %s", group:GetName(), attribute, tostring(gotit)))
|
||||
if gotit then
|
||||
righttype=true
|
||||
break
|
||||
@ -1085,7 +1092,7 @@ function FLIGHTGROUP:onafterStatus(From, Event, To)
|
||||
|
||||
-- If we found a group, we engage it.
|
||||
if targetgroup then
|
||||
--self:I(self.lid..string.format("Engaging target group %s at distance %d meters", targetgroup:GetName(), targetdist))
|
||||
self:I(self.lid..string.format("Engaging target group %s at distance %d meters", targetgroup:GetName(), targetdist))
|
||||
self:EngageTarget(targetgroup)
|
||||
end
|
||||
|
||||
@ -1871,7 +1878,7 @@ function FLIGHTGROUP:onafterUpdateRoute(From, Event, To, n)
|
||||
if #wp>1 then
|
||||
|
||||
-- Route group to all defined waypoints remaining.
|
||||
self:Route(wp, 1)
|
||||
self:Route(wp)
|
||||
|
||||
else
|
||||
|
||||
|
||||
@ -362,17 +362,21 @@ OPSGROUP.TaskType={
|
||||
|
||||
--- Cargo Carrier status.
|
||||
-- @type OPSGROUP.CarrierStatus
|
||||
-- @field #string NOTCARRIER This group is not a carrier yet.
|
||||
-- @field #string EMPTY Carrier is empty and ready for cargo transport.
|
||||
-- @field #string PICKUP Carrier is on its way to pickup cargo.
|
||||
-- @field #string LOADING Carrier is loading cargo.
|
||||
-- @field #string LOADED Carrier has loaded cargo.
|
||||
-- @field #string TRANSPORTING Carrier is transporting cargo.
|
||||
-- @field #string UNLOADING Carrier is unloading cargo.
|
||||
OPSGROUP.CarrierStatus={
|
||||
NOTCARRIER="not carrier",
|
||||
EMPTY="empty",
|
||||
PICKUP="pickup",
|
||||
LOADING="loading",
|
||||
LOADED="loaded",
|
||||
TRANSPORTING="transporting",
|
||||
UNLOADING="unloading",
|
||||
}
|
||||
|
||||
--- Cargo status.
|
||||
@ -468,7 +472,7 @@ function OPSGROUP:New(group)
|
||||
self.spot.Coordinate=COORDINATE:New(0, 0, 0)
|
||||
self:SetLaser(1688, true, false, 0.5)
|
||||
self.cargoStatus=OPSGROUP.CargoStatus.NOTCARGO
|
||||
self.carrierStatus=OPSGROUP.CarrierStatus.EMPTY
|
||||
self.carrierStatus=OPSGROUP.CarrierStatus.NOTCARRIER
|
||||
|
||||
-- Init task counter.
|
||||
self.taskcurrent=0
|
||||
@ -1519,6 +1523,13 @@ function OPSGROUP:IsEngaging()
|
||||
return self:is("Engaging")
|
||||
end
|
||||
|
||||
--- Check if the group is not a carrier yet.
|
||||
-- @param #OPSGROUP self
|
||||
-- @return #boolean If true, group is not a carrier.
|
||||
function OPSGROUP:IsNotCarrier()
|
||||
return self.carrierStatus==OPSGROUP.CarrierStatus.NOTCARRIER
|
||||
end
|
||||
|
||||
--- Check if the group is picking up cargo.
|
||||
-- @param #OPSGROUP self
|
||||
-- @return #boolean If true, group is picking up.
|
||||
@ -1548,7 +1559,12 @@ function OPSGROUP:IsTransporting()
|
||||
return self.carrierStatus==OPSGROUP.CarrierStatus.TRANSPORTING
|
||||
end
|
||||
|
||||
|
||||
--- Check if the group is unloading cargo.
|
||||
-- @param #OPSGROUP self
|
||||
-- @return #boolean If true, group is unloading.
|
||||
function OPSGROUP:IsUnloading()
|
||||
return self.carrierStatus==OPSGROUP.CarrierStatus.UNLOADING
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- Waypoint Functions
|
||||
@ -4556,22 +4572,16 @@ end
|
||||
-- @param #string From From state.
|
||||
-- @param #string Event Event.
|
||||
-- @param #string To To state.
|
||||
-- @param #OPSGROUP.CargoTransport CargoTransport Cargo transport assignment.
|
||||
function OPSGROUP:onafterPickup(From, Event, To, CargoTransport)
|
||||
-- @param Core.Zone#ZONE Zone Pickup zone.
|
||||
function OPSGROUP:onafterPickup(From, Event, To, Zone)
|
||||
|
||||
env.info("FF pickup")
|
||||
|
||||
-- Set carrier status.
|
||||
self.carrierStatus=OPSGROUP.CarrierStatus.PICKUP
|
||||
|
||||
local Zone=CargoTransport.pickupzone
|
||||
|
||||
local inzone=Zone:IsCoordinateInZone(self:GetCoordinate())
|
||||
|
||||
self.cargoTransport=CargoTransport
|
||||
|
||||
|
||||
|
||||
|
||||
if inzone then
|
||||
|
||||
-- We are already in the pickup zone ==> initiate loading.
|
||||
@ -4594,16 +4604,12 @@ end
|
||||
-- @param #string From From state.
|
||||
-- @param #string Event Event.
|
||||
-- @param #string To To state.
|
||||
-- @param #OPSGROUP.CargoTransport CargoTransport Cargo transport assignment.
|
||||
function OPSGROUP:onafterLoading(From, Event, To, CargoTransport)
|
||||
function OPSGROUP:onafterLoading(From, Event, To)
|
||||
env.info("FF loading")
|
||||
|
||||
-- Set carrier status.
|
||||
self.carrierStatus=OPSGROUP.CarrierStatus.LOADING
|
||||
|
||||
|
||||
CargoTransport=CargoTransport or self.cargoTransport
|
||||
|
||||
--- Find a carrier which can load a given weight.
|
||||
local function _findCarrier(weight)
|
||||
local carrier=nil --#OPSGROUP.Element
|
||||
@ -4622,7 +4628,7 @@ function OPSGROUP:onafterLoading(From, Event, To, CargoTransport)
|
||||
end
|
||||
|
||||
|
||||
for _,_cargo in pairs(CargoTransport.cargos) do
|
||||
for _,_cargo in pairs(self.cargoTransport.cargos) do
|
||||
local cargo=_cargo --#OPSGROUP.CargoGroup
|
||||
|
||||
local weight=cargo.opsgroup:GetWeightTotal()
|
||||
@ -4631,6 +4637,9 @@ function OPSGROUP:onafterLoading(From, Event, To, CargoTransport)
|
||||
|
||||
if carrier then
|
||||
|
||||
-- Set cargo status.
|
||||
cargo.opsgroup.cargoStatus=OPSGROUP.CargoStatus.ASSIGNED
|
||||
|
||||
-- Order cargo group to board the carrier.
|
||||
env.info("FF order group to board carrier")
|
||||
cargo.opsgroup:Board(self, carrier)
|
||||
@ -4664,13 +4673,13 @@ function OPSGROUP:onafterLoad(From, Event, To, CargoGroup)
|
||||
carrier.weightCargo=carrier.weightCargo+weight
|
||||
|
||||
-- This function is only really used for aircraft and sets the total internal cargo weight.
|
||||
trigger.action.setUnitInternalCargo(carrier.name, carrier.weightCargo) --https://wiki.hoggitworld.com/view/DCS_func_setUnitInternalCargo
|
||||
--trigger.action.setUnitInternalCargo(carrier.name, carrier.weightCargo) --https://wiki.hoggitworld.com/view/DCS_func_setUnitInternalCargo
|
||||
|
||||
-- Embark ==> Loaded
|
||||
CargoGroup:Embark(carrier)
|
||||
|
||||
env.info("FF carrier loaded (todo)")
|
||||
self:Loaded()
|
||||
--env.info("FF carrier loaded (todo)")
|
||||
--self:Loaded()
|
||||
|
||||
else
|
||||
self:E(self.lid.."ERROR: Cargo has no carrier on Load event!")
|
||||
@ -4734,21 +4743,27 @@ end
|
||||
-- @param Core.Zone#ZONE Zone Deploy zone.
|
||||
function OPSGROUP:onafterDeploy(From, Event, To, Zone)
|
||||
env.info("FF deploy at zone ".. (Zone and Zone:GetName() or "Not given!"))
|
||||
|
||||
self.carrierStatus=OPSGROUP.CarrierStatus.UNLOADING
|
||||
|
||||
for _,_cargo in pairs(self.cargo) do
|
||||
for _,_cargo in pairs(self.cargoTransport.cargos) do
|
||||
local cargo=_cargo --#OPSGROUP.CargoGroup
|
||||
|
||||
local zone=Zone or cargo.deployzone
|
||||
env.info("FF deploy cargo "..cargo.opsgroup:GetName())
|
||||
|
||||
local zone=Zone or cargo.deployzone --Core.Zone#ZONE
|
||||
|
||||
if zone:IsCoordinateInZone(self:GetCoordinate()) then
|
||||
--if zone:IsCoordinateInZone(self:GetCoordinate()) then
|
||||
|
||||
local Coordinate=zone:GetRandomCoordinate()
|
||||
local Heading=math.random(0,359)
|
||||
|
||||
-- Unload.
|
||||
self:Unload(cargo.opsgroup, Coordinate, Heading)
|
||||
env.info("FF unload cargo "..cargo.opsgroup:GetName())
|
||||
cargo.opsgroup:Unboard(Coordinate, Heading)
|
||||
--self:Unload(cargo.opsgroup, Coordinate, Heading)
|
||||
|
||||
end
|
||||
--end
|
||||
|
||||
end
|
||||
|
||||
@ -4792,8 +4807,15 @@ function OPSGROUP:onafterBoard(From, Event, To, CarrierGroup, Carrier)
|
||||
self.carrier=Carrier
|
||||
self.carrierGroup=CarrierGroup
|
||||
|
||||
-- Add to current cargo of carrier.
|
||||
--CarrierGroup:_AddCargoGroup(self)
|
||||
|
||||
--TODO: make cargo run to carrier
|
||||
--TODO: check if cargo is mobile. if not ==> load
|
||||
--TODO: check if cargo is alive=true. if only exists ==> load.
|
||||
|
||||
-- Trigger embark event.
|
||||
self.carrierGroup:Load(self)
|
||||
self.carrierGroup:__Load(10, self)
|
||||
|
||||
end
|
||||
|
||||
@ -4827,11 +4849,12 @@ end
|
||||
function OPSGROUP:onafterUnboard(From, Event, To, Coordinate, Heading)
|
||||
env.info("FF Unboard")
|
||||
|
||||
-- Set cargo status.
|
||||
self.cargoStatus=OPSGROUP.CargoStatus.DELIVERED
|
||||
|
||||
-- Template for the respawned group.
|
||||
local Template=UTILS.DeepCopy(self.template)
|
||||
|
||||
env.info("FF template")
|
||||
self:I({template=Template})
|
||||
self:I({template=self.template})
|
||||
|
||||
-- Loop over template units.
|
||||
for _,Unit in pairs(Template.units) do
|
||||
@ -4866,7 +4889,14 @@ function OPSGROUP:onafterUnboard(From, Event, To, Coordinate, Heading)
|
||||
self.carrier.weightCargo=self.carrier.weightCargo-element.weight
|
||||
end
|
||||
-- This function is only really used for aircraft and sets the total internal cargo weight.
|
||||
trigger.action.setUnitInternalCargo(self.carrier.name, self.carrier.weightCargo) --https://wiki.hoggitworld.com/view/DCS_func_setUnitInternalCargo
|
||||
if self.isFlightgroup then
|
||||
trigger.action.setUnitInternalCargo(self.carrier.name, self.carrier.weightCargo) --https://wiki.hoggitworld.com/view/DCS_func_setUnitInternalCargo
|
||||
end
|
||||
|
||||
-- Set cargo status.
|
||||
self.cargoStatus=OPSGROUP.CargoStatus.NOTCARGO
|
||||
self.carrier=nil
|
||||
self.carrierGroup=nil
|
||||
|
||||
-- Respawn group.
|
||||
self:_Respawn(0, Template)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user