Warehouse 0.1.2

This commit is contained in:
funkyfranky
2018-08-09 23:40:56 +02:00
parent a2aa482bc1
commit 06688366c6
6 changed files with 334 additions and 142 deletions

View File

@@ -106,6 +106,7 @@ function AI_CARGO_APC:New( APC, CargoSet, CombatRadius )
self:AddTransition( "*", "Follow", "Following" )
self:AddTransition( "*", "Guard", "Unloaded" )
self:AddTransition( "*", "Home", "*" )
self:AddTransition( "*", "BackHome" , "*" )
self:AddTransition( "*", "Destroyed", "Destroyed" )
@@ -725,9 +726,34 @@ function AI_CARGO_APC:onafterHome( APC, From, Event, To, Coordinate, Speed )
self:F({Waypoints = Waypoints})
local Waypoint = Waypoints[#Waypoints]
-- Task function triggering the arrived event.
local TaskFunction = APC:TaskFunction("AI_CARGO_APC._BackHome", self)
-- Put task function on last waypoint.
APC:SetTaskWaypoint( Waypoint, TaskFunction )
APC:Route( Waypoints, 1 ) -- Move after a random seconds to the Route. See the Route method for details.
end
end
--- Function called when transport is back home and nothing more to do. Triggering the event BackHome.
-- @param Wrapper.Group#GROUP APC Cargo carrier.
-- @param #AI_CARGO_APC self
function AI_CARGO_APC._BackHome(APC, self)
--Trigger BackHome event.
APC:SmokeGreen()
self:__BackHome(1)
end
--- On after BackHome event.
-- @param #AI_CARGO_APC self
-- @param Wrapper.Group#GROUP APC
-- @param From
-- @param Event
-- @param To
function AI_CARGO_APC:onafterBackHome( APC, From, Event, To )
APC:SmokeRed()
end

View File

@@ -144,8 +144,8 @@ end
--- Creates a new AI_CARGO_DISPATCHER object.
-- @param #AI_CARGO_DISPATCHER self
-- @param Core.Set#SET_GROUP SetCarrier
-- @param Core.Set#SET_CARGO SetCargo
-- @param Core.Set#SET_GROUP SetCarriers
-- @param Core.Set#SET_CARGO SetCargos
-- @param Core.Set#SET_ZONE DeployZonesSet
-- @return #AI_CARGO_DISPATCHER
-- @usage
@@ -454,6 +454,11 @@ function AI_CARGO_DISPATCHER:onafterMonitor()
self.CarrierHome[Carrier] = true
AI_Cargo:__Home( 60, self.HomeZone:GetRandomPointVec2() )
end
elseif self.HomeBase then
if not self.CarrierHome[Carrier] then
self.CarrierHome[Carrier] = true
AI_Cargo:__RTB( 60, self.HomeBase )
end
end
end
end
@@ -548,11 +553,12 @@ end
-- @param Cargo.Cargo#CARGO Cargo
-- @return #AI_CARGO_DISPATCHER
function AI_CARGO_DISPATCHER:OnAfterLoaded( From, Event, To, Carrier, Cargo )
if self.DeployZonesSet then
local DeployZone = self.DeployZonesSet:GetRandomZone()
local DeployCoordinate = DeployZone:GetCoordinate():GetRandomCoordinateInRadius( self.DeployOuterRadius, self.DeployInnerRadius )
self.AI_Cargo[Carrier]:Deploy( DeployCoordinate, math.random( self.DeployMinSpeed, self.DeployMaxSpeed ) )

View File

@@ -103,7 +103,7 @@ AI_CARGO_DISPATCHER_APC = {
--
function AI_CARGO_DISPATCHER_APC:NewWithZones( SetAPC, SetCargo, SetDeployZone, CombatRadius )
local self = BASE:Inherit( self, AI_CARGO_DISPATCHER:New( SetAPC, SetCargo, SetDeployZone ) ) -- #AI_CARGO_DISPATCHER_APC
local self = BASE:Inherit( self, AI_CARGO_DISPATCHER:NewWithZones( SetAPC, SetCargo, SetDeployZone ) ) -- #AI_CARGO_DISPATCHER_APC
self.CombatRadius = CombatRadius or 500

View File

@@ -53,7 +53,9 @@ function AI_CARGO_HELICOPTER:New( Helicopter, CargoSet )
self:AddTransition( "*", "Landed", "*" )
self:AddTransition( "*", "Queue", "*" )
self:AddTransition( "*", "Orbit" , "*" )
self:AddTransition( "*", "Home" , "*" )
self:AddTransition( "*", "Home" , "*" )
self:AddTransition( "*", "RTB" , "*" )
self:AddTransition( "*", "BackHome" , "*" )
self:AddTransition( "*", "Destroyed", "Destroyed" )
@@ -714,7 +716,7 @@ end
-- @param Event
-- @param To
-- @param Core.Point#COORDINATE Coordinate Home place.
-- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 50% of max possible speed the unit can go.
-- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 80% of max possible speed the unit can go.
function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinate, Speed )
if Helicopter and Helicopter:IsAlive() ~= nil then
@@ -725,9 +727,9 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat
--- Calculate the target route point.
Coordinate.y = math.random( 50, 200 )
Coordinate.y = math.random( 100, 500 )
local _speed=Speed or Helicopter:GetSpeedMax()*0.5
local _speed=Speed or Helicopter:GetSpeedMax()*0.8
--- Create a route point of type air.
local CoordinateFrom = Helicopter:GetCoordinate()
@@ -756,11 +758,14 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat
Helicopter:WayPointInitialize( Route )
local Tasks = {}
Tasks[#Tasks+1] = Helicopter:TaskLandAtVec2( CoordinateTo:GetVec2() )
Tasks[#Tasks+1] = Helicopter:TaskFunction("AI_CARGO_HELICOPTER._BackHome", self)
Route[#Route].task = Helicopter:TaskCombo( Tasks )
Route[#Route+1] = WaypointTo
-- Now route the helicopter
Helicopter:Route( Route, 0 )
@@ -769,3 +774,103 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat
end
--- On after RTB event. Route the helicopter from one airport or it's current position to another airbase.
-- @param #AI_CARGO_HELICOPTER self
-- @param Wrapper.Group#GROUP Helicopter Cargo helicopter.
-- @param From
-- @param Event
-- @param To
-- @param Wrapper.Airbase#AIRBASE Airbase Destination airbase.
-- @param #number Speed Speed in km/h. Default is 80% of max possible speed the group can do.
function AI_CARGO_HELICOPTER:onafterRTB( Helicopter, From, Event, To, Airbase, Speed)
if Helicopter and Helicopter:IsAlive() then
-- Set takeoff type.
local Takeoff = SPAWN.Takeoff.Hot
-- Get template of group.
local Template = Helicopter:GetTemplate()
-- Nil check
if Template==nil then
return
end
-- Waypoints of the route.
local Points={}
-- To point.
local AirbasePointVec2 = Airbase:GetPointVec2()
local ToWaypoint = AirbasePointVec2:WaypointAir(
POINT_VEC3.RoutePointAltType.BARO,
"Land",
"Landing",
Speed or Helicopter:GetSpeedMax()*0.8
)
ToWaypoint["airdromeId"] = Airbase:GetID()
ToWaypoint["speed_locked"] = true
-- Task function triggering the arrived event.
local TaskFunction = Helicopter:TaskFunction("AI_CARGO_HELICOPTER._BackHome", self)
-- Put task function on last waypoint.
Helicopter:SetTaskWaypoint( ToWaypoint, TaskFunction )
-- If self.Airbase~=nil then group is currently at an airbase, where it should be respawned.
if self.Airbase then
-- Second point of the route. First point is done in RespawnAtCurrentAirbase() routine.
Template.route.points[2] = ToWaypoint
-- Respawn group at the current airbase.
Helicopter:RespawnAtCurrentAirbase(Template, Takeoff, false)
else
-- From point.
local GroupPoint = Helicopter:GetVec2()
local FromWaypoint = {}
FromWaypoint.x = GroupPoint.x
FromWaypoint.y = GroupPoint.y
FromWaypoint.type = "Turning Point"
FromWaypoint.action = "Turning Point"
FromWaypoint.speed = Helicopter:GetSpeedMax()*0.8
-- The two route points.
Points[1] = FromWaypoint
Points[2] = ToWaypoint
local PointVec3 = Helicopter:GetPointVec3()
Template.x = PointVec3.x
Template.y = PointVec3.z
Template.route.points = Points
local GroupSpawned = Helicopter:Respawn(Template)
end
end
end
--- Function called when transport is back home and nothing more to do. Triggering the event BackHome.
-- @param Wrapper.Group#GROUP Helicopter Cargo helicopter.
-- @param #AI_CARGO_HELICOPTER self
function AI_CARGO_HELICOPTER._BackHome(Group, self)
--Trigger BackHome event.
Group:SmokeRed()
self:__BackHome(1)
end
--- On after BackHome event.
-- @param #AI_CARGO_HELICOPTER self
-- @param Wrapper.Group#GROUP Helicopter Cargo helo.
-- @param From
-- @param Event
-- @param To
function AI_CARGO_HELICOPTER:onafterBackHome( Helicopter, From, Event, To )
Helicopter:SmokeRed()
end