mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Got CARGO working now with new FSM mechanism
This commit is contained in:
@@ -224,22 +224,18 @@ do -- CARGO_BASE
|
||||
-- @return #CARGO_BASE
|
||||
function CARGO_BASE:New( Type, Name, Weight, ReportRadius, NearRadius )
|
||||
|
||||
FSMT = {
|
||||
initial = 'UnLoaded',
|
||||
events = {
|
||||
{ name = 'Board', from = 'UnLoaded', to = 'Boarding' },
|
||||
{ name = 'Boarding', from = 'Boarding', to = 'Boarding' },
|
||||
{ name = 'Load', from = 'Boarding', to = 'Loaded' },
|
||||
{ name = 'Load', from = 'UnLoaded', to = 'Loaded' },
|
||||
{ name = 'UnBoard', from = 'Loaded', to = 'UnBoarding' },
|
||||
{ name = 'UnBoarding', from = 'UnBoarding', to = 'UnBoarding' },
|
||||
{ name = 'UnLoad', from = 'UnBoarding', to = 'UnLoaded' },
|
||||
{ name = 'UnLoad', from = 'Loaded', to = 'UnLoaded' },
|
||||
},
|
||||
}
|
||||
|
||||
local self = BASE:Inherit( self, FSM_PROCESS:New( FSMT ) ) -- #CARGO_BASE
|
||||
local self = BASE:Inherit( self, FSM:New() ) -- Fsm.Fsm#FSM_CONTROLLABLE
|
||||
self:F( { Type, Name, Weight, ReportRadius, NearRadius } )
|
||||
|
||||
self:SetStartState( "UnLoaded" )
|
||||
self:AddTransition( "UnLoaded", "Board", "Boarding" )
|
||||
self:AddTransition( "Boarding", "Boarding", "Boarding" )
|
||||
self:AddTransition( "Boarding", "Load", "Loaded" )
|
||||
self:AddTransition( "UnLoaded", "Load", "Loaded" )
|
||||
self:AddTransition( "Loaded", "UnBoard", "UnBoarding" )
|
||||
self:AddTransition( "UnBoarding", "UnBoarding", "UnBoarding" )
|
||||
self:AddTransition( "UnBoarding", "UnLoad", "UnLoaded" )
|
||||
self:AddTransition( "Loaded", "UnLoad", "UnLoaded" )
|
||||
|
||||
|
||||
self.Type = Type
|
||||
@@ -312,9 +308,6 @@ function CARGO_REPRESENTABLE:New( CargoObject, Type, Name, Weight, ReportRadius,
|
||||
local self = BASE:Inherit( self, CARGO_BASE:New( Type, Name, Weight, ReportRadius, NearRadius ) ) -- #CARGO_BASE
|
||||
self:F( { Type, Name, Weight, ReportRadius, NearRadius } )
|
||||
|
||||
|
||||
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
@@ -371,11 +364,11 @@ end
|
||||
|
||||
--- Enter UnBoarding State.
|
||||
-- @param #CARGO_UNIT self
|
||||
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_UNIT:onenterUnBoarding( ToPointVec2, Event, From, To )
|
||||
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
||||
function CARGO_UNIT:onenterUnBoarding( Event, From, To, ToPointVec2 )
|
||||
self:F()
|
||||
|
||||
local Angle = 180
|
||||
@@ -416,11 +409,11 @@ end
|
||||
|
||||
--- Leave UnBoarding State.
|
||||
-- @param #CARGO_UNIT self
|
||||
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_UNIT:onleaveUnBoarding( ToPointVec2, Event, From, To )
|
||||
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
||||
function CARGO_UNIT:onleaveUnBoarding( Event, From, To, ToPointVec2 )
|
||||
self:F( { ToPointVec2, Event, From, To } )
|
||||
|
||||
local Angle = 180
|
||||
@@ -440,11 +433,11 @@ end
|
||||
|
||||
--- UnBoard Event.
|
||||
-- @param #CARGO_UNIT self
|
||||
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_UNIT:onafterUnBoarding( ToPointVec2, Event, From, To )
|
||||
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
||||
function CARGO_UNIT:onafterUnBoarding( Event, From, To, ToPointVec2 )
|
||||
self:F( { ToPointVec2, Event, From, To } )
|
||||
|
||||
self.CargoInAir = self.CargoObject:InAir()
|
||||
@@ -465,11 +458,11 @@ end
|
||||
|
||||
--- Enter UnLoaded State.
|
||||
-- @param #CARGO_UNIT self
|
||||
-- @param Core.Point#POINT_VEC2
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_UNIT:onenterUnLoaded( ToPointVec2, Event, From, To )
|
||||
-- @param Core.Point#POINT_VEC2
|
||||
function CARGO_UNIT:onenterUnLoaded( Event, From, To, ToPointVec2 )
|
||||
self:F( { ToPointVec2, Event, From, To } )
|
||||
|
||||
local Angle = 180
|
||||
@@ -503,11 +496,11 @@ end
|
||||
|
||||
--- Enter Boarding State.
|
||||
-- @param #CARGO_UNIT self
|
||||
-- @param Wrapper.Unit#UNIT CargoCarrier
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_UNIT:onenterBoarding( CargoCarrier, Event, From, To )
|
||||
-- @param Wrapper.Unit#UNIT CargoCarrier
|
||||
function CARGO_UNIT:onenterBoarding( Event, From, To, CargoCarrier )
|
||||
self:F( { CargoCarrier.UnitName, Event, From, To } )
|
||||
|
||||
local Speed = 10
|
||||
@@ -535,11 +528,11 @@ end
|
||||
|
||||
--- Leave Boarding State.
|
||||
-- @param #CARGO_UNIT self
|
||||
-- @param Wrapper.Unit#UNIT CargoCarrier
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_UNIT:onleaveBoarding( CargoCarrier, Event, From, To )
|
||||
-- @param Wrapper.Unit#UNIT CargoCarrier
|
||||
function CARGO_UNIT:onleaveBoarding( Event, From, To, CargoCarrier )
|
||||
self:F( { CargoCarrier.UnitName, Event, From, To } )
|
||||
|
||||
if self:IsNear( CargoCarrier:GetPointVec2() ) then
|
||||
@@ -553,11 +546,11 @@ end
|
||||
|
||||
--- Loaded State.
|
||||
-- @param #CARGO_UNIT self
|
||||
-- @param Wrapper.Unit#UNIT CargoCarrier
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_UNIT:onenterLoaded( CargoCarrier, Event, From, To )
|
||||
-- @param Wrapper.Unit#UNIT CargoCarrier
|
||||
function CARGO_UNIT:onenterLoaded( Event, From, To, CargoCarrier )
|
||||
self:F()
|
||||
|
||||
self.CargoCarrier = CargoCarrier
|
||||
@@ -575,7 +568,7 @@ end
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_UNIT:onafterBoard( CargoCarrier, Event, From, To)
|
||||
function CARGO_UNIT:onafterBoard( Event, From, To, CargoCarrier )
|
||||
self:F()
|
||||
|
||||
self.CargoInAir = self.CargoObject:InAir()
|
||||
@@ -621,7 +614,6 @@ end
|
||||
|
||||
--- Board Event.
|
||||
-- @param #CARGO_PACKAGE self
|
||||
-- @param Fsm.Fsm#FSM_PROCESS FsmP
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
@@ -629,7 +621,7 @@ end
|
||||
-- @param #number Speed
|
||||
-- @param #number BoardDistance
|
||||
-- @param #number Angle
|
||||
function CARGO_PACKAGE:onafterOnBoard( FsmP, Event, From, To, CargoCarrier, Speed, BoardDistance, LoadDistance, Angle )
|
||||
function CARGO_PACKAGE:onafterOnBoard( Event, From, To, CargoCarrier, Speed, BoardDistance, LoadDistance, Angle )
|
||||
self:F()
|
||||
|
||||
self.CargoInAir = self.CargoCarrier:InAir()
|
||||
@@ -679,24 +671,22 @@ end
|
||||
|
||||
--- Boarded Event.
|
||||
-- @param #CARGO_PACKAGE self
|
||||
-- @param Fsm.Fsm#FSM_PROCESS FsmP
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
-- @param Wrapper.Unit#UNIT CargoCarrier
|
||||
function CARGO_PACKAGE:onafterOnBoarded( FsmP, Event, From, To, CargoCarrier, Speed, BoardDistance, LoadDistance, Angle )
|
||||
function CARGO_PACKAGE:onafterOnBoarded( Event, From, To, CargoCarrier, Speed, BoardDistance, LoadDistance, Angle )
|
||||
self:F()
|
||||
|
||||
if self:IsNear( CargoCarrier ) then
|
||||
self:_NextEvent( FsmP.Load, CargoCarrier, Speed, LoadDistance, Angle )
|
||||
self:__Load( 1, CargoCarrier, Speed, LoadDistance, Angle )
|
||||
else
|
||||
self:_NextEvent( FsmP.Boarded, CargoCarrier, Speed, BoardDistance, LoadDistance, Angle )
|
||||
self:__Boarded( 1, CargoCarrier, Speed, BoardDistance, LoadDistance, Angle )
|
||||
end
|
||||
end
|
||||
|
||||
--- UnBoard Event.
|
||||
-- @param #CARGO_PACKAGE self
|
||||
-- @param Fsm.Fsm#FSM_PROCESS FsmP
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
@@ -705,7 +695,7 @@ end
|
||||
-- @param #number UnBoardDistance
|
||||
-- @param #number Radius
|
||||
-- @param #number Angle
|
||||
function CARGO_PACKAGE:onafterUnBoard( FsmP, Event, From, To, CargoCarrier, Speed, UnLoadDistance, UnBoardDistance, Radius, Angle )
|
||||
function CARGO_PACKAGE:onafterUnBoard( Event, From, To, CargoCarrier, Speed, UnLoadDistance, UnBoardDistance, Radius, Angle )
|
||||
self:F()
|
||||
|
||||
self.CargoInAir = self.CargoCarrier:InAir()
|
||||
@@ -733,30 +723,28 @@ function CARGO_PACKAGE:onafterUnBoard( FsmP, Event, From, To, CargoCarrier, Spee
|
||||
CargoCarrier:SetTask( TaskRoute, 1 )
|
||||
end
|
||||
|
||||
self:_NextEvent( FsmP.UnBoarded, CargoCarrier, Speed )
|
||||
self:__UnBoarded( 1 , CargoCarrier, Speed )
|
||||
|
||||
end
|
||||
|
||||
--- UnBoarded Event.
|
||||
-- @param #CARGO_PACKAGE self
|
||||
-- @param Fsm.Fsm#FSM_PROCESS FsmP
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
-- @param Wrapper.Unit#UNIT CargoCarrier
|
||||
function CARGO_PACKAGE:onafterUnBoarded( FsmP, Event, From, To, CargoCarrier, Speed )
|
||||
function CARGO_PACKAGE:onafterUnBoarded( Event, From, To, CargoCarrier, Speed )
|
||||
self:F()
|
||||
|
||||
if self:IsNear( CargoCarrier ) then
|
||||
self:_NextEvent( FsmP.UnLoad, CargoCarrier, Speed )
|
||||
self:__UnLoad( 1, CargoCarrier, Speed )
|
||||
else
|
||||
self:_NextEvent( FsmP.UnBoarded, CargoCarrier, Speed )
|
||||
self:__UnBoarded( 1, CargoCarrier, Speed )
|
||||
end
|
||||
end
|
||||
|
||||
--- Load Event.
|
||||
-- @param #CARGO_PACKAGE self
|
||||
-- @param Fsm.Fsm#FSM_PROCESS FsmP
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
@@ -764,7 +752,7 @@ end
|
||||
-- @param #number Speed
|
||||
-- @param #number LoadDistance
|
||||
-- @param #number Angle
|
||||
function CARGO_PACKAGE:onafterLoad( FsmP, Event, From, To, CargoCarrier, Speed, LoadDistance, Angle )
|
||||
function CARGO_PACKAGE:onafterLoad( Event, From, To, CargoCarrier, Speed, LoadDistance, Angle )
|
||||
self:F()
|
||||
|
||||
self.CargoCarrier = CargoCarrier
|
||||
@@ -785,13 +773,12 @@ end
|
||||
|
||||
--- UnLoad Event.
|
||||
-- @param #CARGO_PACKAGE self
|
||||
-- @param Fsm.Fsm#FSM_PROCESS FsmP
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
-- @param #number Distance
|
||||
-- @param #number Angle
|
||||
function CARGO_PACKAGE:onafterUnLoad( FsmP, Event, From, To, CargoCarrier, Speed, Distance, Angle )
|
||||
function CARGO_PACKAGE:onafterUnLoad( Event, From, To, CargoCarrier, Speed, Distance, Angle )
|
||||
self:F()
|
||||
|
||||
local StartPointVec2 = self.CargoCarrier:GetPointVec2()
|
||||
@@ -874,7 +861,7 @@ end
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_GROUPED:onenterBoarding( CargoCarrier, Event, From, To )
|
||||
function CARGO_GROUPED:onenterBoarding( Event, From, To, CargoCarrier )
|
||||
self:F( { CargoCarrier.UnitName, Event, From, To } )
|
||||
|
||||
if From == "UnLoaded" then
|
||||
@@ -897,7 +884,7 @@ end
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_GROUPED:onenterLoaded( CargoCarrier, Event, From, To )
|
||||
function CARGO_GROUPED:onenterLoaded( Event, From, To, CargoCarrier )
|
||||
self:F( { CargoCarrier.UnitName, Event, From, To } )
|
||||
|
||||
if From == "UnLoaded" then
|
||||
@@ -914,7 +901,7 @@ end
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_GROUPED:onleaveBoarding( CargoCarrier, Event, From, To )
|
||||
function CARGO_GROUPED:onleaveBoarding( Event, From, To, CargoCarrier )
|
||||
self:F( { CargoCarrier.UnitName, Event, From, To } )
|
||||
|
||||
local Boarded = true
|
||||
@@ -941,7 +928,7 @@ end
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_GROUPED:onenterUnBoarding( ToPointVec2, Event, From, To )
|
||||
function CARGO_GROUPED:onenterUnBoarding( Event, From, To, ToPointVec2 )
|
||||
self:F()
|
||||
|
||||
local Timer = 1
|
||||
@@ -967,7 +954,7 @@ end
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_GROUPED:onleaveUnBoarding( ToPointVec2, Event, From, To )
|
||||
function CARGO_GROUPED:onleaveUnBoarding( Event, From, To, ToPointVec2 )
|
||||
self:F( { ToPointVec2, Event, From, To } )
|
||||
|
||||
local Angle = 180
|
||||
@@ -1002,7 +989,7 @@ end
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_GROUPED:onafterUnBoarding( ToPointVec2, Event, From, To )
|
||||
function CARGO_GROUPED:onafterUnBoarding( Event, From, To, ToPointVec2 )
|
||||
self:F( { ToPointVec2, Event, From, To } )
|
||||
|
||||
self:__UnLoad( 1, ToPointVec2 )
|
||||
@@ -1016,7 +1003,7 @@ end
|
||||
-- @param #string Event
|
||||
-- @param #string From
|
||||
-- @param #string To
|
||||
function CARGO_GROUPED:onenterUnLoaded( ToPointVec2, Event, From, To )
|
||||
function CARGO_GROUPED:onenterUnLoaded( Event, From, To, ToPointVec2 )
|
||||
self:F( { ToPointVec2, Event, From, To } )
|
||||
|
||||
if From == "Loaded" then
|
||||
|
||||
@@ -419,10 +419,12 @@ FSM_PROCESS = {
|
||||
-- @return #FSM_PROCESS
|
||||
function FSM_PROCESS:New( FsmT, Controllable, Task )
|
||||
|
||||
FsmT = FsmT or FSM_TEMPLATE:New( "" )
|
||||
|
||||
local self = BASE:Inherit( self, FSM_CONTROLLABLE:New( FsmT ) ) -- Fsm.Fsm#FSM_PROCESS
|
||||
|
||||
self:Assign( Controllable, Task )
|
||||
self.ClassName = FsmT._Name
|
||||
|
||||
|
||||
for ParameterID, Parameter in pairs( FsmT:GetParameters() ) do
|
||||
self[ ParameterID ] = Parameter
|
||||
|
||||
@@ -1,3 +1,18 @@
|
||||
2016-12-06
|
||||
|
||||
- Renamed the documentation references following the structure of the files.
|
||||
-- All STATEMACHINE references became FSM
|
||||
-- FSM_TEMPLATE references are also abbreviated by FSMT
|
||||
-- Removed Process#PROCESS references.
|
||||
-- All cross file documentation references updated. That was a lot of work!
|
||||
|
||||
- Tasking is working now. But needs further cleanup.
|
||||
- Templates are assigned to Tasks. When a task is assigned to a player, the FSMT
|
||||
- Removed 2nd level in tasking. Now there is only one level.
|
||||
- Tasking works now with FSM.
|
||||
- Made FSMT process templates that can be used in Tasks.
|
||||
- Scoring can now also be added to the templates.
|
||||
|
||||
2016-09-01
|
||||
|
||||
- Expanded the CARGO classes and implemented the CARGO_GROUPED classes.
|
||||
|
||||
Reference in New Issue
Block a user