mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
#AmmoTruck
This commit is contained in:
parent
3dc7e458e1
commit
8d8bd162b3
@ -148,7 +148,7 @@ AMMOTRUCK.State = {
|
|||||||
--@type AMMOTRUCK.data
|
--@type AMMOTRUCK.data
|
||||||
--@field Wrapper.Group#GROUP group
|
--@field Wrapper.Group#GROUP group
|
||||||
--@field #string name
|
--@field #string name
|
||||||
--@field #AMMOTRUCK.State state
|
--@field #AMMOTRUCK.State statusquo
|
||||||
--@field #number timestamp
|
--@field #number timestamp
|
||||||
--@field #number ammo
|
--@field #number ammo
|
||||||
--@field Core.Point#COORDINATE coordinate
|
--@field Core.Point#COORDINATE coordinate
|
||||||
@ -225,11 +225,37 @@ function AMMOTRUCK:CheckDrivingTrucks(dataset)
|
|||||||
local dist = coord:Get2DDistance(tgtcoord)
|
local dist = coord:Get2DDistance(tgtcoord)
|
||||||
if dist <= 150 then
|
if dist <= 150 then
|
||||||
-- arrived
|
-- arrived
|
||||||
truck.state = AMMOTRUCK.State.ARRIVED
|
truck.statusquo = AMMOTRUCK.State.ARRIVED
|
||||||
truck.timestamp = timer.getAbsTime()
|
truck.timestamp = timer.getAbsTime()
|
||||||
truck.coordinate = coord
|
truck.coordinate = coord
|
||||||
self:__TruckArrived(1,truck)
|
self:__TruckArrived(1,truck)
|
||||||
end
|
end
|
||||||
|
-- still driving?
|
||||||
|
local Tnow = timer.getAbsTime()
|
||||||
|
if Tnow - truck.timestamp > 30 then
|
||||||
|
local group = truck.group
|
||||||
|
if self.usearmygroup then
|
||||||
|
group = truck.group:GetGroup()
|
||||||
|
end
|
||||||
|
local currspeed = group:GetVelocityKMH()
|
||||||
|
if truck.lastspeed then
|
||||||
|
if truck.lastspeed == 0 and currspeed == 0 then
|
||||||
|
self:T(truck.group:GetName().." Is not moving!")
|
||||||
|
-- try and move it
|
||||||
|
truck.timestamp = timer.getAbsTime()
|
||||||
|
if self.routeonroad then
|
||||||
|
group:RouteGroundOnRoad(truck.targetcoordinate,30,2,"Vee")
|
||||||
|
else
|
||||||
|
group:RouteGroundTo(truck.targetcoordinate,30,"Vee",2)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
truck.lastspeed = currspeed
|
||||||
|
else
|
||||||
|
truck.lastspeed = currspeed
|
||||||
|
truck.timestamp = timer.getAbsTime()
|
||||||
|
end
|
||||||
|
self:I({truck=truck.group:GetName(),currspeed=currspeed,lastspeed=truck.lastspeed})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -260,9 +286,9 @@ function AMMOTRUCK:CheckWaitingTargets(dataset)
|
|||||||
local hasammo = self:GetAmmoStatus(truck.group)
|
local hasammo = self:GetAmmoStatus(truck.group)
|
||||||
--if truck.group:GetAmmunition() <= self.ammothreshold then
|
--if truck.group:GetAmmunition() <= self.ammothreshold then
|
||||||
if hasammo <= self.ammothreshold then
|
if hasammo <= self.ammothreshold then
|
||||||
truck.state = AMMOTRUCK.State.OUTOFAMMO
|
truck.statusquo = AMMOTRUCK.State.OUTOFAMMO
|
||||||
else
|
else
|
||||||
truck.state = AMMOTRUCK.State.IDLE
|
truck.statusquo = AMMOTRUCK.State.IDLE
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -286,7 +312,7 @@ function AMMOTRUCK:CheckReturningTrucks(dataset)
|
|||||||
self:T({name=truck.name,radius=radius,distance=dist})
|
self:T({name=truck.name,radius=radius,distance=dist})
|
||||||
if dist <= radius then
|
if dist <= radius then
|
||||||
-- arrived
|
-- arrived
|
||||||
truck.state = AMMOTRUCK.State.IDLE
|
truck.statusquo = AMMOTRUCK.State.IDLE
|
||||||
truck.timestamp = timer.getAbsTime()
|
truck.timestamp = timer.getAbsTime()
|
||||||
truck.coordinate = coord
|
truck.coordinate = coord
|
||||||
self:__TruckHome(1,truck)
|
self:__TruckHome(1,truck)
|
||||||
@ -341,13 +367,13 @@ function AMMOTRUCK:CheckArrivedTrucks(dataset)
|
|||||||
for _,_data in pairs (data) do
|
for _,_data in pairs (data) do
|
||||||
-- set to unloading
|
-- set to unloading
|
||||||
local truck = _data -- #AMMOTRUCK.data
|
local truck = _data -- #AMMOTRUCK.data
|
||||||
truck.state = AMMOTRUCK.State.UNLOADING
|
truck.statusquo = AMMOTRUCK.State.UNLOADING
|
||||||
truck.timestamp = timer.getAbsTime()
|
truck.timestamp = timer.getAbsTime()
|
||||||
self:__TruckUnloading(2,truck)
|
self:__TruckUnloading(2,truck)
|
||||||
-- set target to reloading
|
-- set target to reloading
|
||||||
local aridata = self:FindTarget(truck.targetname) -- #AMMOTRUCK.data
|
local aridata = self:FindTarget(truck.targetname) -- #AMMOTRUCK.data
|
||||||
if aridata then
|
if aridata then
|
||||||
aridata.state = AMMOTRUCK.State.RELOADING
|
aridata.statusquo = AMMOTRUCK.State.RELOADING
|
||||||
aridata.timestamp = timer.getAbsTime()
|
aridata.timestamp = timer.getAbsTime()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -369,13 +395,13 @@ function AMMOTRUCK:CheckUnloadingTrucks(dataset)
|
|||||||
local hasammo = self:GetAmmoStatus(truck.targetgroup)
|
local hasammo = self:GetAmmoStatus(truck.targetgroup)
|
||||||
--local ammostate = truck.targetgroup:GetAmmunition()
|
--local ammostate = truck.targetgroup:GetAmmunition()
|
||||||
if Tpassed > self.unloadtime and hasammo > self.ammothreshold then
|
if Tpassed > self.unloadtime and hasammo > self.ammothreshold then
|
||||||
truck.state = AMMOTRUCK.State.RETURNING
|
truck.statusquo = AMMOTRUCK.State.RETURNING
|
||||||
truck.timestamp = timer.getAbsTime()
|
truck.timestamp = timer.getAbsTime()
|
||||||
self:__TruckReturning(2,truck)
|
self:__TruckReturning(2,truck)
|
||||||
-- set target to reloaded
|
-- set target to reloaded
|
||||||
local aridata = self:FindTarget(truck.targetname) -- #AMMOTRUCK.data
|
local aridata = self:FindTarget(truck.targetname) -- #AMMOTRUCK.data
|
||||||
if aridata then
|
if aridata then
|
||||||
aridata.state = AMMOTRUCK.State.IDLE
|
aridata.statusquo = AMMOTRUCK.State.IDLE
|
||||||
aridata.timestamp = timer.getAbsTime()
|
aridata.timestamp = timer.getAbsTime()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -407,7 +433,7 @@ function AMMOTRUCK:CheckTargetsAlive()
|
|||||||
local newari = {} -- #AMMOTRUCK.data
|
local newari = {} -- #AMMOTRUCK.data
|
||||||
newari.name = name
|
newari.name = name
|
||||||
newari.group = ari
|
newari.group = ari
|
||||||
newari.state = AMMOTRUCK.State.IDLE
|
newari.statusquo = AMMOTRUCK.State.IDLE
|
||||||
newari.timestamp = timer.getAbsTime()
|
newari.timestamp = timer.getAbsTime()
|
||||||
newari.coordinate = ari:GetCoordinate()
|
newari.coordinate = ari:GetCoordinate()
|
||||||
local hasammo = self:GetAmmoStatus(ari)
|
local hasammo = self:GetAmmoStatus(ari)
|
||||||
@ -434,8 +460,8 @@ function AMMOTRUCK:CheckTrucksAlive()
|
|||||||
local tgtname = truck.targetname
|
local tgtname = truck.targetname
|
||||||
local targetdata = self:FindTarget(tgtname) -- #AMMOTRUCK.data
|
local targetdata = self:FindTarget(tgtname) -- #AMMOTRUCK.data
|
||||||
if targetdata then
|
if targetdata then
|
||||||
if targetdata.state ~= AMMOTRUCK.State.IDLE then
|
if targetdata.statusquo ~= AMMOTRUCK.State.IDLE then
|
||||||
targetdata.state = AMMOTRUCK.State.IDLE
|
targetdata.statusquo = AMMOTRUCK.State.IDLE
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
self.trucklist[truck.name] = nil
|
self.trucklist[truck.name] = nil
|
||||||
@ -459,7 +485,7 @@ function AMMOTRUCK:CheckTrucksAlive()
|
|||||||
--self.opstrucks:AddObject(newtruck)
|
--self.opstrucks:AddObject(newtruck)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
newtruck.state = AMMOTRUCK.State.IDLE
|
newtruck.statusquo = AMMOTRUCK.State.IDLE
|
||||||
newtruck.timestamp = timer.getAbsTime()
|
newtruck.timestamp = timer.getAbsTime()
|
||||||
newtruck.coordinate = truck:GetCoordinate()
|
newtruck.coordinate = truck:GetCoordinate()
|
||||||
self.trucklist[name] = newtruck
|
self.trucklist[name] = newtruck
|
||||||
@ -511,14 +537,14 @@ function AMMOTRUCK:onafterMonitor(From, Event, To)
|
|||||||
--data.ammo = data.group:GetAmmunition()
|
--data.ammo = data.group:GetAmmunition()
|
||||||
data.ammo = self:GetAmmoStatus(data.group)
|
data.ammo = self:GetAmmoStatus(data.group)
|
||||||
data.timestamp = timer.getAbsTime()
|
data.timestamp = timer.getAbsTime()
|
||||||
local text = string.format("Ari %s | Ammo %d | State %s",data.name,data.ammo,data.state)
|
local text = string.format("Ari %s | Ammo %d | State %s",data.name,data.ammo,data.statusquo)
|
||||||
self:T(text)
|
self:T(text)
|
||||||
if data.ammo <= self.ammothreshold and (data.state == AMMOTRUCK.State.IDLE or data.state == AMMOTRUCK.State.OUTOFAMMO) then
|
if data.ammo <= self.ammothreshold and (data.statusquo == AMMOTRUCK.State.IDLE or data.statusquo == AMMOTRUCK.State.OUTOFAMMO) then
|
||||||
-- add to remu queue
|
-- add to remu queue
|
||||||
data.state = AMMOTRUCK.State.OUTOFAMMO
|
data.statusquo = AMMOTRUCK.State.OUTOFAMMO
|
||||||
remunitionqueue[#remunitionqueue+1] = data
|
remunitionqueue[#remunitionqueue+1] = data
|
||||||
remunition = true
|
remunition = true
|
||||||
elseif data.state == AMMOTRUCK.State.WAITING then
|
elseif data.statusquo == AMMOTRUCK.State.WAITING then
|
||||||
waitingtargets[#waitingtargets+1] = data
|
waitingtargets[#waitingtargets+1] = data
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -536,18 +562,18 @@ function AMMOTRUCK:onafterMonitor(From, Event, To)
|
|||||||
local data = _truckdata -- #AMMOTRUCK.data
|
local data = _truckdata -- #AMMOTRUCK.data
|
||||||
if data.group and data.group:IsAlive() then
|
if data.group and data.group:IsAlive() then
|
||||||
-- check state
|
-- check state
|
||||||
local text = string.format("Truck %s | State %s",data.name,data.state)
|
local text = string.format("Truck %s | State %s",data.name,data.statusquo)
|
||||||
self:T(text)
|
self:T(text)
|
||||||
if data.state == AMMOTRUCK.State.IDLE then
|
if data.statusquo == AMMOTRUCK.State.IDLE then
|
||||||
idletrucks[#idletrucks+1] = data
|
idletrucks[#idletrucks+1] = data
|
||||||
found = true
|
found = true
|
||||||
elseif data.state == AMMOTRUCK.State.DRIVING then
|
elseif data.statusquo == AMMOTRUCK.State.DRIVING then
|
||||||
drivingtrucks[#drivingtrucks+1] = data
|
drivingtrucks[#drivingtrucks+1] = data
|
||||||
elseif data.state == AMMOTRUCK.State.ARRIVED then
|
elseif data.statusquo == AMMOTRUCK.State.ARRIVED then
|
||||||
arrivedtrucks[#arrivedtrucks+1] = data
|
arrivedtrucks[#arrivedtrucks+1] = data
|
||||||
elseif data.state == AMMOTRUCK.State.UNLOADING then
|
elseif data.statusquo == AMMOTRUCK.State.UNLOADING then
|
||||||
unloadingtrucks[#unloadingtrucks+1] = data
|
unloadingtrucks[#unloadingtrucks+1] = data
|
||||||
elseif data.state == AMMOTRUCK.State.RETURNING then
|
elseif data.statusquo == AMMOTRUCK.State.RETURNING then
|
||||||
returningtrucks[#returningtrucks+1] = data
|
returningtrucks[#returningtrucks+1] = data
|
||||||
idletrucks[#idletrucks+1] = data
|
idletrucks[#idletrucks+1] = data
|
||||||
found = true
|
found = true
|
||||||
@ -568,9 +594,9 @@ function AMMOTRUCK:onafterMonitor(From, Event, To)
|
|||||||
local aridata = _aridata -- #AMMOTRUCK.data
|
local aridata = _aridata -- #AMMOTRUCK.data
|
||||||
local aricoord = aridata.coordinate
|
local aricoord = aridata.coordinate
|
||||||
local distance = truckcoord:Get2DDistance(aricoord)
|
local distance = truckcoord:Get2DDistance(aricoord)
|
||||||
if distance <= self.remunidist and aridata.state == AMMOTRUCK.State.OUTOFAMMO and n <= #idletrucks then
|
if distance <= self.remunidist and aridata.statusquo == AMMOTRUCK.State.OUTOFAMMO and n <= #idletrucks then
|
||||||
n = n + 1
|
n = n + 1
|
||||||
aridata.state = AMMOTRUCK.State.REQUESTED
|
aridata.statusquo = AMMOTRUCK.State.REQUESTED
|
||||||
self:__RouteTruck(n*5,truckdata,aridata)
|
self:__RouteTruck(n*5,truckdata,aridata)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
@ -627,8 +653,9 @@ function AMMOTRUCK:onafterRouteTruck(From, Event, To, Truckdata, Aridata)
|
|||||||
local mission = AUFTRAG:NewONGUARD(tgtcoord)
|
local mission = AUFTRAG:NewONGUARD(tgtcoord)
|
||||||
local oldmission = truckdata.group:GetMissionCurrent()
|
local oldmission = truckdata.group:GetMissionCurrent()
|
||||||
if oldmission then oldmission:Cancel() end
|
if oldmission then oldmission:Cancel() end
|
||||||
mission:SetVerbosity(3)
|
--mission:SetVerbosity(3)
|
||||||
mission:SetMissionSpeed(UTILS.KmphToKnots(20))
|
--mission:SetMissionSpeed(UTILS.KmphToKnots(30))
|
||||||
|
mission:SetTime(5)
|
||||||
mission:SetTeleport(false)
|
mission:SetTeleport(false)
|
||||||
--mission:SetTime(nil,math.random(self.unloadtime,self.waitingtime))
|
--mission:SetTime(nil,math.random(self.unloadtime,self.waitingtime))
|
||||||
truckdata.group:AddMission(mission)
|
truckdata.group:AddMission(mission)
|
||||||
@ -637,11 +664,11 @@ function AMMOTRUCK:onafterRouteTruck(From, Event, To, Truckdata, Aridata)
|
|||||||
else
|
else
|
||||||
truckdata.group:RouteGroundTo(tgtcoord,30)
|
truckdata.group:RouteGroundTo(tgtcoord,30)
|
||||||
end
|
end
|
||||||
truckdata.state = AMMOTRUCK.State.DRIVING
|
truckdata.statusquo = AMMOTRUCK.State.DRIVING
|
||||||
truckdata.targetgroup = tgtgrp
|
truckdata.targetgroup = tgtgrp
|
||||||
truckdata.targetname = aridata.name
|
truckdata.targetname = aridata.name
|
||||||
truckdata.targetcoordinate = tgtcoord
|
truckdata.targetcoordinate = tgtcoord
|
||||||
aridata.state = AMMOTRUCK.State.WAITING
|
aridata.statusquo = AMMOTRUCK.State.WAITING
|
||||||
aridata.timestamp = timer.getAbsTime()
|
aridata.timestamp = timer.getAbsTime()
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -694,8 +721,9 @@ function AMMOTRUCK:onafterTruckReturning(From, Event, To, Truck)
|
|||||||
local mission = AUFTRAG:NewONGUARD(tgtcoord)
|
local mission = AUFTRAG:NewONGUARD(tgtcoord)
|
||||||
local oldmission = truckdata.group:GetMissionCurrent()
|
local oldmission = truckdata.group:GetMissionCurrent()
|
||||||
if oldmission then oldmission:Cancel() end
|
if oldmission then oldmission:Cancel() end
|
||||||
mission:SetMissionSpeed(UTILS.KmphToKnots(20))
|
--mission:SetMissionSpeed(UTILS.KmphToKnots(30))
|
||||||
--mission:SetEnableMarkers()
|
--mission:SetEnableMarkers()
|
||||||
|
mission:SetTime(5)
|
||||||
mission:SetTeleport(false)
|
mission:SetTeleport(false)
|
||||||
truckdata.group:AddMission(mission)
|
truckdata.group:AddMission(mission)
|
||||||
elseif self.routeonroad then
|
elseif self.routeonroad then
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user