mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
-- Lots of fixes done. Especially on the
- Messaging - Menu system - Crashing DCS - Routing
This commit is contained in:
@@ -174,17 +174,17 @@ do -- TASK_CARGO
|
||||
|
||||
Fsm:AddProcess ( "Planned", "Accept", ACT_ASSIGN_ACCEPT:New( self.TaskBriefing ), { Assigned = "SelectAction", Rejected = "Reject" } )
|
||||
|
||||
Fsm:AddTransition( { "Planned", "Assigned", "WaitingForCommand", "ArrivedAtPickup", "ArrivedAtDeploy", "Boarded", "UnBoarded", "Loaded", "UnLoaded", "Landed", "Boarding" }, "SelectAction", "*" )
|
||||
Fsm:AddTransition( { "Planned", "Assigned", "Cancelled", "WaitingForCommand", "ArrivedAtPickup", "ArrivedAtDeploy", "Boarded", "UnBoarded", "Loaded", "UnLoaded", "Landed", "Boarding" }, "SelectAction", "*" )
|
||||
|
||||
Fsm:AddTransition( "*", "RouteToPickup", "RoutingToPickup" )
|
||||
Fsm:AddProcess ( "RoutingToPickup", "RouteToPickupPoint", ACT_ROUTE_POINT:New(), { Arrived = "ArriveAtPickup", Cancelled = "CancelRouteToPickup" } )
|
||||
Fsm:AddTransition( "Arrived", "ArriveAtPickup", "ArrivedAtPickup" )
|
||||
Fsm:AddTransition( "Cancelled", "CancelRouteToPickup", "WaitingForCommand" )
|
||||
Fsm:AddTransition( "Cancelled", "CancelRouteToPickup", "Cancelled" )
|
||||
|
||||
Fsm:AddTransition( "*", "RouteToDeploy", "RoutingToDeploy" )
|
||||
Fsm:AddProcess ( "RoutingToDeploy", "RouteToDeployZone", ACT_ROUTE_ZONE:New(), { Arrived = "ArriveAtDeploy", Cancelled = "CancelRouteToDeploy" } )
|
||||
Fsm:AddTransition( "Arrived", "ArriveAtDeploy", "ArrivedAtDeploy" )
|
||||
Fsm:AddTransition( "Cancelled", "CancelRouteToDeploy", "WaitingForCommand" )
|
||||
Fsm:AddTransition( "Cancelled", "CancelRouteToDeploy", "Cancelled" )
|
||||
|
||||
Fsm:AddTransition( { "ArrivedAtPickup", "ArrivedAtDeploy", "Landing" }, "Land", "Landing" )
|
||||
Fsm:AddTransition( "Landing", "Landed", "Landed" )
|
||||
@@ -249,7 +249,7 @@ do -- TASK_CARGO
|
||||
self:F( { CargoUnloaded = Cargo:IsUnLoaded(), CargoLoaded = Cargo:IsLoaded(), CargoItemCount = CargoItemCount } )
|
||||
|
||||
if Cargo:IsUnLoaded() then
|
||||
if CargoItemCount <= Task.CargoLimit then
|
||||
if CargoItemCount < 1 then
|
||||
if Cargo:IsInReportRadius( TaskUnit:GetPointVec2() ) then
|
||||
local NotInDeployZones = true
|
||||
for DeployZoneName, DeployZone in pairs( Task.DeployZones ) do
|
||||
@@ -261,18 +261,26 @@ do -- TASK_CARGO
|
||||
if not TaskUnit:InAir() then
|
||||
if Cargo:CanBoard() == true then
|
||||
if Cargo:IsInLoadRadius( TaskUnit:GetPointVec2() ) then
|
||||
Cargo:Report( "Reporting for boarding at " .. Cargo:GetCoordinate():ToString( TaskUnit:GetGroup() ), "board", TaskUnit:GetGroup() )
|
||||
Cargo:Report( "ready for boarding at " .. Cargo:GetCoordinate():ToString( TaskUnit:GetGroup() ), "board", TaskUnit:GetGroup() )
|
||||
MENU_GROUP_COMMAND:New( TaskUnit:GetGroup(), "Board cargo " .. Cargo.Name, TaskUnit.Menu, self.MenuBoardCargo, self, Cargo ):SetTime(MenuTime)
|
||||
else
|
||||
Cargo:Report( "Reporting at " .. Cargo:GetCoordinate():ToString( TaskUnit:GetGroup() ), "reporting", TaskUnit:GetGroup() )
|
||||
Cargo:Report( "Board at " .. Cargo:GetCoordinate():ToString( TaskUnit:GetGroup() ), "reporting", TaskUnit:GetGroup() )
|
||||
end
|
||||
else
|
||||
if Cargo:CanLoad() == true then
|
||||
if Cargo:IsInLoadRadius( TaskUnit:GetPointVec2() ) then
|
||||
Cargo:Report( "Reporting for loading at " .. Cargo:GetCoordinate():ToString( TaskUnit:GetGroup() ), "load", TaskUnit:GetGroup() )
|
||||
Cargo:Report( "ready for loading at " .. Cargo:GetCoordinate():ToString( TaskUnit:GetGroup() ), "load", TaskUnit:GetGroup() )
|
||||
MENU_GROUP_COMMAND:New( TaskUnit:GetGroup(), "Load cargo " .. Cargo.Name, TaskUnit.Menu, self.MenuLoadCargo, self, Cargo ):SetTime(MenuTime)
|
||||
else
|
||||
Cargo:Report( "Reporting at " .. Cargo:GetCoordinate():ToString( TaskUnit:GetGroup() ), "reporting", TaskUnit:GetGroup() )
|
||||
Cargo:Report( "Load at " .. Cargo:GetCoordinate():ToString( TaskUnit:GetGroup() ), "reporting", TaskUnit:GetGroup() )
|
||||
end
|
||||
else
|
||||
if Cargo:CanSlingload() == true then
|
||||
if Cargo:IsInLoadRadius( TaskUnit:GetPointVec2() ) then
|
||||
Cargo:Report( "ready for slingloading at " .. Cargo:GetCoordinate():ToString( TaskUnit:GetGroup() ), "slingload", TaskUnit:GetGroup() )
|
||||
else
|
||||
Cargo:Report( "Slingload at " .. Cargo:GetCoordinate():ToString( TaskUnit:GetGroup() ), "reporting", TaskUnit:GetGroup() )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -282,9 +290,13 @@ do -- TASK_CARGO
|
||||
end
|
||||
end
|
||||
else
|
||||
MENU_GROUP_COMMAND:New( TaskUnit:GetGroup(), "Route to Pickup cargo " .. Cargo.Name, TaskUnit.Menu, self.MenuRouteToPickup, self, Cargo ):SetTime(MenuTime)
|
||||
TaskUnit.Menu:SetTime( MenuTime )
|
||||
Cargo:ReportResetAll( TaskUnit:GetGroup() )
|
||||
if self:Is( "RoutingToPickup" ) then
|
||||
else
|
||||
self:F("route menu set")
|
||||
MENU_GROUP_COMMAND:New( TaskUnit:GetGroup(), "Route to Pickup cargo " .. Cargo.Name, TaskUnit.Menu, self.MenuRouteToPickup, self, Cargo ):SetTime(MenuTime)
|
||||
TaskUnit.Menu:SetTime( MenuTime )
|
||||
Cargo:ReportResetAll( TaskUnit:GetGroup() )
|
||||
end
|
||||
end
|
||||
end
|
||||
-- Cargo in deployzones are flagged as deployed.
|
||||
@@ -405,7 +417,6 @@ do -- TASK_CARGO
|
||||
function Fsm:onafterArriveAtPickup( TaskUnit, Task )
|
||||
self:F( { TaskUnit = TaskUnit, Task = Task and Task:GetClassNameAndID() } )
|
||||
if self.Cargo:IsAlive() then
|
||||
self.Cargo:Smoke( Task:GetSmokeColor(), 15 )
|
||||
if TaskUnit:IsAir() then
|
||||
Task:GetMission():GetCommandCenter():MessageToGroup( "Land", TaskUnit:GetGroup() )
|
||||
self:__Land( -0.1, "Pickup" )
|
||||
@@ -422,6 +433,7 @@ do -- TASK_CARGO
|
||||
function Fsm:onafterCancelRouteToPickup( TaskUnit, Task )
|
||||
self:F( { TaskUnit = TaskUnit, Task = Task and Task:GetClassNameAndID() } )
|
||||
|
||||
Task:GetMission():GetCommandCenter():MessageToGroup( "Cancelled routing to Cargo " .. self.Cargo:GetName(), TaskUnit:GetGroup() )
|
||||
self:__SelectAction( -0.1 )
|
||||
end
|
||||
|
||||
@@ -459,6 +471,7 @@ do -- TASK_CARGO
|
||||
function Fsm:onafterCancelRouteToDeploy( TaskUnit, Task )
|
||||
self:F( { TaskUnit = TaskUnit, Task = Task and Task:GetClassNameAndID() } )
|
||||
|
||||
Task:GetMission():GetCommandCenter():MessageToGroup( "Cancelled routing to deploy zone " .. self.DeployZone:GetName(), TaskUnit:GetGroup() )
|
||||
self:__SelectAction( -0.1 )
|
||||
end
|
||||
|
||||
@@ -518,8 +531,7 @@ do -- TASK_CARGO
|
||||
self:F( { TaskUnit = TaskUnit, Task = Task and Task:GetClassNameAndID() } )
|
||||
|
||||
if Cargo and Cargo:IsAlive() then
|
||||
self.Cargo = Cargo -- Core.Cargo#CARGO_GROUP
|
||||
self:__Board( -0.1 )
|
||||
self:__Board( -0.1, Cargo )
|
||||
end
|
||||
end
|
||||
|
||||
@@ -527,22 +539,22 @@ do -- TASK_CARGO
|
||||
--- @param #FSM_PROCESS self
|
||||
-- @param Wrapper.Unit#UNIT TaskUnit
|
||||
-- @param Tasking.Task_Cargo#TASK_CARGO Task
|
||||
function Fsm:onafterBoard( TaskUnit, Task )
|
||||
function Fsm:onafterBoard( TaskUnit, Task, From, Event, To, Cargo )
|
||||
self:F( { TaskUnit = TaskUnit, Task = Task and Task:GetClassNameAndID() } )
|
||||
|
||||
function self.Cargo:OnEnterLoaded( From, Event, To, TaskUnit, TaskProcess )
|
||||
function Cargo:OnEnterLoaded( From, Event, To, TaskUnit, TaskProcess )
|
||||
self:F({From, Event, To, TaskUnit, TaskProcess })
|
||||
TaskProcess:__Boarded( 0.1 )
|
||||
TaskProcess:__Boarded( 0.1, self )
|
||||
end
|
||||
|
||||
if self.Cargo:IsAlive() then
|
||||
if self.Cargo:IsInLoadRadius( TaskUnit:GetPointVec2() ) then
|
||||
if Cargo:IsAlive() then
|
||||
if Cargo:IsInLoadRadius( TaskUnit:GetPointVec2() ) then
|
||||
if TaskUnit:InAir() then
|
||||
--- ABORT the boarding. Split group if any and go back to select action.
|
||||
else
|
||||
self.Cargo:MessageToGroup( "Boarding ...", TaskUnit:GetGroup() )
|
||||
if not self.Cargo:IsBoarding() then
|
||||
self.Cargo:Board( TaskUnit, 20, self )
|
||||
Cargo:MessageToGroup( "Boarding ...", TaskUnit:GetGroup() )
|
||||
if not Cargo:IsBoarding() then
|
||||
Cargo:Board( TaskUnit, 20, self )
|
||||
end
|
||||
end
|
||||
else
|
||||
@@ -555,14 +567,14 @@ do -- TASK_CARGO
|
||||
--- @param #FSM_PROCESS self
|
||||
-- @param Wrapper.Unit#UNIT TaskUnit
|
||||
-- @param Tasking.Task_Cargo#TASK_CARGO Task
|
||||
function Fsm:onafterBoarded( TaskUnit, Task )
|
||||
function Fsm:onafterBoarded( TaskUnit, Task, From, Event, To, Cargo )
|
||||
|
||||
local TaskUnitName = TaskUnit:GetName()
|
||||
self:F( { TaskUnit = TaskUnitName, Task = Task and Task:GetClassNameAndID() } )
|
||||
|
||||
self.Cargo:MessageToGroup( "Boarded ...", TaskUnit:GetGroup() )
|
||||
|
||||
self:Load( self.Cargo )
|
||||
Cargo:MessageToGroup( "Boarded ...", TaskUnit:GetGroup() )
|
||||
|
||||
self:__Load( -0.1, Cargo )
|
||||
|
||||
end
|
||||
|
||||
@@ -570,16 +582,18 @@ do -- TASK_CARGO
|
||||
--- @param #FSM_PROCESS self
|
||||
-- @param Wrapper.Unit#UNIT TaskUnit
|
||||
-- @param Tasking.Task_Cargo#TASK_CARGO Task
|
||||
function Fsm:onafterLoad( TaskUnit, Task, From, Event, To, Cargo )
|
||||
function Fsm:onenterLoaded( TaskUnit, Task, From, Event, To, Cargo )
|
||||
|
||||
local TaskUnitName = TaskUnit:GetName()
|
||||
self:F( { TaskUnit = TaskUnitName, Task = Task and Task:GetClassNameAndID() } )
|
||||
|
||||
if not Cargo:IsLoaded() then
|
||||
Cargo:Load( TaskUnit )
|
||||
TaskUnit:AddCargo( Cargo )
|
||||
end
|
||||
|
||||
Cargo:MessageToGroup( "Loaded ...", TaskUnit:GetGroup() )
|
||||
TaskUnit:AddCargo( Cargo )
|
||||
|
||||
self:__SelectAction( 1 )
|
||||
|
||||
-- TODO:I need to find a more decent solution for this.
|
||||
@@ -640,9 +654,9 @@ do -- TASK_CARGO
|
||||
if self.Cargo:IsAlive() then
|
||||
self.Cargo:MessageToGroup( "UnBoarding ...", TaskUnit:GetGroup() )
|
||||
if DeployZone then
|
||||
self.Cargo:UnBoard( DeployZone:GetPointVec2(), 400, self )
|
||||
self.Cargo:UnBoard( DeployZone:GetCoordinate():GetRandomCoordinateInRadius( 25, 10 ), 400, self )
|
||||
else
|
||||
self.Cargo:UnBoard( TaskUnit:GetPointVec2():AddX(60), 400, self )
|
||||
self.Cargo:UnBoard( TaskUnit:GetCoordinate():GetRandomCoordinateInRadius( 25, 10 ), 400, self )
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -673,9 +687,9 @@ do -- TASK_CARGO
|
||||
|
||||
if not Cargo:IsUnLoaded() then
|
||||
if DeployZone then
|
||||
Cargo:UnLoad( DeployZone:GetPointVec2(), 400, self )
|
||||
Cargo:UnLoad( DeployZone:GetCoordinate():GetRandomCoordinateInRadius( 25, 10 ), 400, self )
|
||||
else
|
||||
Cargo:UnLoad( TaskUnit:GetPointVec2():AddX(60), 400, self )
|
||||
Cargo:UnLoad( TaskUnit:GetCoordinate():GetRandomCoordinateInRadius( 25, 10 ), 400, self )
|
||||
end
|
||||
end
|
||||
TaskUnit:RemoveCargo( Cargo )
|
||||
@@ -752,6 +766,7 @@ do -- TASK_CARGO
|
||||
ActRouteCargo:SetRange( Cargo:GetLoadRadius() )
|
||||
ActRouteCargo:SetMenuCancel( TaskUnit:GetGroup(), "Cancel Routing to Cargo " .. Cargo:GetName(), TaskUnit.Menu )
|
||||
ActRouteCargo:Start()
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
@@ -769,6 +784,7 @@ do -- TASK_CARGO
|
||||
ActRouteDeployZone:SetZone( DeployZone )
|
||||
ActRouteDeployZone:SetMenuCancel( TaskUnit:GetGroup(), "Cancel Routing to Deploy Zone" .. DeployZone:GetName(), TaskUnit.Menu )
|
||||
ActRouteDeployZone:Start()
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user