Got CARGO working now with new FSM mechanism

This commit is contained in:
FlightControl 2016-12-06 12:05:02 +01:00
parent b72a1c5c6b
commit 3496550cb3
117 changed files with 62 additions and 58 deletions

View File

@ -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

View File

@ -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

View File

@ -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.

Some files were not shown because too many files have changed in this diff Show More