mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
#TARGET
* Some QOL additions, docu, stuff for SCENERY
This commit is contained in:
parent
78c209a96f
commit
2854a2d93e
@ -4,11 +4,13 @@
|
|||||||
--
|
--
|
||||||
-- * Manages target, number alive, life points, damage etc.
|
-- * Manages target, number alive, life points, damage etc.
|
||||||
-- * Events when targets are damaged or destroyed
|
-- * Events when targets are damaged or destroyed
|
||||||
-- * Various target objects: UNIT, GROUP, STATIC, AIRBASE, COORDINATE, SET_GROUP, SET_UNIT, SET_SCENERY
|
-- * Various target objects: UNIT, GROUP, STATIC, AIRBASE, COORDINATE, SET_GROUP, SET_UNIT
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
-- ### Author: **funkyfranky**
|
-- ### Author: **funkyfranky**
|
||||||
|
-- ### Additions: **applevangelist**
|
||||||
|
--
|
||||||
-- @module Ops.Target
|
-- @module Ops.Target
|
||||||
-- @image OPS_Target.png
|
-- @image OPS_Target.png
|
||||||
|
|
||||||
@ -114,9 +116,11 @@ TARGET.Category={
|
|||||||
-- @type TARGET.ObjectStatus
|
-- @type TARGET.ObjectStatus
|
||||||
-- @field #string ALIVE Object is alive.
|
-- @field #string ALIVE Object is alive.
|
||||||
-- @field #string DEAD Object is dead.
|
-- @field #string DEAD Object is dead.
|
||||||
|
-- @field #string DAMAGED Object is damaged.
|
||||||
TARGET.ObjectStatus={
|
TARGET.ObjectStatus={
|
||||||
ALIVE="Alive",
|
ALIVE="Alive",
|
||||||
DEAD="Dead",
|
DEAD="Dead",
|
||||||
|
DAMAGED="Damaged",
|
||||||
}
|
}
|
||||||
|
|
||||||
--- Resource.
|
--- Resource.
|
||||||
@ -147,7 +151,7 @@ _TARGETID=0
|
|||||||
|
|
||||||
--- TARGET class version.
|
--- TARGET class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
TARGET.version="0.5.4"
|
TARGET.version="0.5.5"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- TODO list
|
-- TODO list
|
||||||
@ -204,7 +208,7 @@ function TARGET:New(TargetObject)
|
|||||||
self:AddTransition("*", "ObjectDestroyed", "*") -- A target object was destroyed.
|
self:AddTransition("*", "ObjectDestroyed", "*") -- A target object was destroyed.
|
||||||
self:AddTransition("*", "ObjectDead", "*") -- A target object is dead (destroyed or despawned).
|
self:AddTransition("*", "ObjectDead", "*") -- A target object is dead (destroyed or despawned).
|
||||||
|
|
||||||
self:AddTransition("*", "Damaged", "*") -- Target was damaged.
|
self:AddTransition("*", "Damaged", "Damaged") -- Target was damaged.
|
||||||
self:AddTransition("*", "Destroyed", "Dead") -- Target was completely destroyed.
|
self:AddTransition("*", "Destroyed", "Dead") -- Target was completely destroyed.
|
||||||
self:AddTransition("*", "Dead", "Dead") -- Target is dead. Could be destroyed or despawned.
|
self:AddTransition("*", "Dead", "Dead") -- Target is dead. Could be destroyed or despawned.
|
||||||
|
|
||||||
@ -237,7 +241,51 @@ function TARGET:New(TargetObject)
|
|||||||
-- @function [parent=#TARGET] __Status
|
-- @function [parent=#TARGET] __Status
|
||||||
-- @param #TARGET self
|
-- @param #TARGET self
|
||||||
-- @param #number delay Delay in seconds.
|
-- @param #number delay Delay in seconds.
|
||||||
|
|
||||||
|
--- On After "ObjectDamaged" event. A (sub-) target object has been damaged, e.g. a UNIT of a GROUP, or an object of a SET
|
||||||
|
-- @function [parent=#TARGET] OnAfterObjectDamaged
|
||||||
|
-- @param #TARGET self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param #TARGET.Object Target Target object.
|
||||||
|
|
||||||
|
--- On After "ObjectDestroyed" event. A (sub-) target object has been destroyed, e.g. a UNIT of a GROUP, or an object of a SET
|
||||||
|
-- @function [parent=#TARGET] OnAfterObjectDestroyed
|
||||||
|
-- @param #TARGET self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param #TARGET.Object Target Target object.
|
||||||
|
|
||||||
|
--- On After "ObjectDead" event. A (sub-) target object is dead, e.g. a UNIT of a GROUP, or an object of a SET
|
||||||
|
-- @function [parent=#TARGET] OnAfterObjectDead
|
||||||
|
-- @param #TARGET self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param #TARGET.Object Target Target object.
|
||||||
|
|
||||||
|
--- On After "Damaged" event. The (whole) target object has been damaged.
|
||||||
|
-- @function [parent=#TARGET] OnAfterDamaged
|
||||||
|
-- @param #TARGET self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
|
||||||
|
--- On After "ObjectDestroyed" event. The (whole) target object has been destroyed.
|
||||||
|
-- @function [parent=#TARGET] OnAfterDestroyed
|
||||||
|
-- @param #TARGET self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
|
||||||
|
--- On After "ObjectDead" event. The (whole) target object is dead.
|
||||||
|
-- @function [parent=#TARGET] OnAfterDead
|
||||||
|
-- @param #TARGET self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
|
||||||
-- Start.
|
-- Start.
|
||||||
self:__Start(-1)
|
self:__Start(-1)
|
||||||
@ -261,7 +309,6 @@ end
|
|||||||
-- * SET_UNIT
|
-- * SET_UNIT
|
||||||
-- * SET_STATIC
|
-- * SET_STATIC
|
||||||
-- * SET_OPSGROUP
|
-- * SET_OPSGROUP
|
||||||
-- * SET_SCENERY
|
|
||||||
--
|
--
|
||||||
-- @param #TARGET self
|
-- @param #TARGET self
|
||||||
-- @param Wrapper.Positionable#POSITIONABLE Object The target GROUP, UNIT, STATIC, AIRBASE or COORDINATE.
|
-- @param Wrapper.Positionable#POSITIONABLE Object The target GROUP, UNIT, STATIC, AIRBASE or COORDINATE.
|
||||||
@ -304,6 +351,7 @@ function TARGET:AddObject(Object)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Set priority of the target.
|
--- Set priority of the target.
|
||||||
@ -502,7 +550,7 @@ end
|
|||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
function TARGET:onafterStart(From, Event, To)
|
function TARGET:onafterStart(From, Event, To)
|
||||||
|
self:T({From, Event, To})
|
||||||
-- Short info.
|
-- Short info.
|
||||||
local text=string.format("Starting Target")
|
local text=string.format("Starting Target")
|
||||||
self:T(self.lid..text)
|
self:T(self.lid..text)
|
||||||
@ -512,6 +560,7 @@ function TARGET:onafterStart(From, Event, To)
|
|||||||
self:HandleEvent(EVENTS.RemoveUnit, self.OnEventUnitDeadOrLost)
|
self:HandleEvent(EVENTS.RemoveUnit, self.OnEventUnitDeadOrLost)
|
||||||
|
|
||||||
self:__Status(-1)
|
self:__Status(-1)
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "Status" event.
|
--- On after "Status" event.
|
||||||
@ -521,7 +570,7 @@ end
|
|||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
function TARGET:onafterStatus(From, Event, To)
|
function TARGET:onafterStatus(From, Event, To)
|
||||||
|
self:T({From, Event, To})
|
||||||
-- FSM state.
|
-- FSM state.
|
||||||
local fsmstate=self:GetState()
|
local fsmstate=self:GetState()
|
||||||
|
|
||||||
@ -530,18 +579,29 @@ function TARGET:onafterStatus(From, Event, To)
|
|||||||
for i,_target in pairs(self.targets) do
|
for i,_target in pairs(self.targets) do
|
||||||
local target=_target --#TARGET.Object
|
local target=_target --#TARGET.Object
|
||||||
|
|
||||||
|
-- old life
|
||||||
local life=target.Life
|
local life=target.Life
|
||||||
|
-- curr life
|
||||||
target.Life=self:GetTargetLife(target)
|
target.Life=self:GetTargetLife(target)
|
||||||
|
|
||||||
|
-- TODO: special case ED bug > life **increases** after hits on SCENERY
|
||||||
|
if target.Life > target.Life0 then
|
||||||
|
local delta = 2*(target.Life-target.Life0)
|
||||||
|
target.Life0 = target.Life0 + delta
|
||||||
|
life = target.Life0
|
||||||
|
self.life0 = self.life0+delta
|
||||||
|
end
|
||||||
|
|
||||||
if target.Life<life then
|
if target.Life<life then
|
||||||
self:ObjectDamaged(target)
|
target.Status = TARGET.ObjectStatus.DAMAGED
|
||||||
|
self:ObjectDamaged(target)
|
||||||
damaged=true
|
damaged=true
|
||||||
end
|
end
|
||||||
|
|
||||||
if life==0 then
|
if life < 1 and (not target.Status == TARGET.ObjectStatus.DEAD) then
|
||||||
self:I(self.lid..string.format("FF life is zero but no object dead event fired ==> object dead now for target object %s!", tostring(target.Name)))
|
self:E(self.lid..string.format("FF life is zero but no object dead event fired ==> object dead now for target object %s!", tostring(target.Name)))
|
||||||
self:ObjectDead(target)
|
self:ObjectDead(target)
|
||||||
|
damaged = true
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -575,6 +635,7 @@ function TARGET:onafterStatus(From, Event, To)
|
|||||||
if self:IsAlive() then
|
if self:IsAlive() then
|
||||||
self:__Status(-self.TStatus)
|
self:__Status(-self.TStatus)
|
||||||
end
|
end
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
@ -588,10 +649,11 @@ end
|
|||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
-- @param #TARGET.Object Target Target object.
|
-- @param #TARGET.Object Target Target object.
|
||||||
function TARGET:onafterObjectDamaged(From, Event, To, Target)
|
function TARGET:onafterObjectDamaged(From, Event, To, Target)
|
||||||
|
self:T({From, Event, To})
|
||||||
-- Debug info.
|
-- Debug info.
|
||||||
self:T(self.lid..string.format("Object %s damaged", Target.Name))
|
self:T(self.lid..string.format("Object %s damaged", Target.Name))
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "ObjectDestroyed" event.
|
--- On after "ObjectDestroyed" event.
|
||||||
@ -601,7 +663,7 @@ end
|
|||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
-- @param #TARGET.Object Target Target object.
|
-- @param #TARGET.Object Target Target object.
|
||||||
function TARGET:onafterObjectDestroyed(From, Event, To, Target)
|
function TARGET:onafterObjectDestroyed(From, Event, To, Target)
|
||||||
|
self:T({From, Event, To})
|
||||||
-- Debug message.
|
-- Debug message.
|
||||||
self:T(self.lid..string.format("Object %s destroyed", Target.Name))
|
self:T(self.lid..string.format("Object %s destroyed", Target.Name))
|
||||||
|
|
||||||
@ -611,6 +673,7 @@ function TARGET:onafterObjectDestroyed(From, Event, To, Target)
|
|||||||
-- Call object dead event.
|
-- Call object dead event.
|
||||||
self:ObjectDead(Target)
|
self:ObjectDead(Target)
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "ObjectDead" event.
|
--- On after "ObjectDead" event.
|
||||||
@ -620,7 +683,7 @@ end
|
|||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
-- @param #TARGET.Object Target Target object.
|
-- @param #TARGET.Object Target Target object.
|
||||||
function TARGET:onafterObjectDead(From, Event, To, Target)
|
function TARGET:onafterObjectDead(From, Event, To, Target)
|
||||||
|
self:T({From, Event, To})
|
||||||
-- Debug message.
|
-- Debug message.
|
||||||
self:T(self.lid..string.format("Object %s dead", Target.Name))
|
self:T(self.lid..string.format("Object %s dead", Target.Name))
|
||||||
|
|
||||||
@ -653,8 +716,11 @@ function TARGET:onafterObjectDead(From, Event, To, Target)
|
|||||||
self:Dead()
|
self:Dead()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
self:Damaged()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "Damaged" event.
|
--- On after "Damaged" event.
|
||||||
@ -663,9 +729,11 @@ end
|
|||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
function TARGET:onafterDamaged(From, Event, To)
|
function TARGET:onafterDamaged(From, Event, To)
|
||||||
|
self:T({From, Event, To})
|
||||||
|
|
||||||
self:T(self.lid..string.format("TARGET damaged"))
|
self:T(self.lid..string.format("TARGET damaged"))
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "Destroyed" event.
|
--- On after "Destroyed" event.
|
||||||
@ -674,11 +742,14 @@ end
|
|||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
function TARGET:onafterDestroyed(From, Event, To)
|
function TARGET:onafterDestroyed(From, Event, To)
|
||||||
|
|
||||||
|
self:T({From, Event, To})
|
||||||
|
|
||||||
self:T(self.lid..string.format("TARGET destroyed"))
|
self:T(self.lid..string.format("TARGET destroyed"))
|
||||||
|
|
||||||
self:Dead()
|
self:Dead()
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "Dead" event.
|
--- On after "Dead" event.
|
||||||
@ -687,9 +758,11 @@ end
|
|||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
function TARGET:onafterDead(From, Event, To)
|
function TARGET:onafterDead(From, Event, To)
|
||||||
|
self:T({From, Event, To})
|
||||||
|
|
||||||
self:T(self.lid..string.format("TARGET dead"))
|
self:T(self.lid..string.format("TARGET dead"))
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
@ -707,7 +780,7 @@ function TARGET:OnEventUnitDeadOrLost(EventData)
|
|||||||
if self:IsElement(Name) and not self:IsCasualty(Name) then
|
if self:IsElement(Name) and not self:IsCasualty(Name) then
|
||||||
|
|
||||||
-- Debug info.
|
-- Debug info.
|
||||||
self:T3(self.lid..string.format("EVENT ID=%d: Unit %s dead or lost!", EventData.id, tostring(Name)))
|
self:T(self.lid..string.format("EVENT ID=%d: Unit %s dead or lost!", EventData.id, tostring(Name)))
|
||||||
|
|
||||||
-- Add to the list of casualties.
|
-- Add to the list of casualties.
|
||||||
table.insert(self.casualties, Name)
|
table.insert(self.casualties, Name)
|
||||||
@ -736,15 +809,19 @@ function TARGET:OnEventUnitDeadOrLost(EventData)
|
|||||||
|
|
||||||
-- Debug message.
|
-- Debug message.
|
||||||
self:T2(self.lid..string.format("EVENT ID=%d: target %s dead/lost ==> destroyed", EventData.id, tostring(target.Name)))
|
self:T2(self.lid..string.format("EVENT ID=%d: target %s dead/lost ==> destroyed", EventData.id, tostring(target.Name)))
|
||||||
|
|
||||||
|
target.Life = 0
|
||||||
|
|
||||||
-- Trigger object destroyed event.
|
-- Trigger object destroyed event.
|
||||||
self:ObjectDestroyed(target)
|
self:ObjectDestroyed(target)
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
-- Debug message.
|
-- Debug message.
|
||||||
self:T2(self.lid..string.format("EVENT ID=%d: target %s removed ==> dead", EventData.id, tostring(target.Name)))
|
self:T2(self.lid..string.format("EVENT ID=%d: target %s removed ==> dead", EventData.id, tostring(target.Name)))
|
||||||
|
|
||||||
|
target.Life = 0
|
||||||
|
|
||||||
-- Trigger object dead event.
|
-- Trigger object dead event.
|
||||||
self:ObjectDead(target)
|
self:ObjectDead(target)
|
||||||
|
|
||||||
@ -755,7 +832,7 @@ function TARGET:OnEventUnitDeadOrLost(EventData)
|
|||||||
end -- Event belongs to this TARGET
|
end -- Event belongs to this TARGET
|
||||||
|
|
||||||
end
|
end
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
@ -764,7 +841,7 @@ end
|
|||||||
|
|
||||||
--- Create target data from a given object.
|
--- Create target data from a given object.
|
||||||
-- @param #TARGET self
|
-- @param #TARGET self
|
||||||
-- @param Wrapper.Positionable#POSITIONABLE Object The target GROUP, UNIT, STATIC, AIRBASE or COORDINATE.
|
-- @param Wrapper.Positionable#POSITIONABLE Object The target GROUP, UNIT, STATIC, SCENERY, AIRBASE or COORDINATE.
|
||||||
function TARGET:_AddObject(Object)
|
function TARGET:_AddObject(Object)
|
||||||
|
|
||||||
local target={} --#TARGET.Object
|
local target={} --#TARGET.Object
|
||||||
@ -848,8 +925,8 @@ function TARGET:_AddObject(Object)
|
|||||||
|
|
||||||
target.Coordinate=scenery:GetCoordinate()
|
target.Coordinate=scenery:GetCoordinate()
|
||||||
|
|
||||||
target.Life0=1
|
target.Life0=scenery:GetLife0()
|
||||||
target.Life=1
|
target.Life=scenery:GetLife()
|
||||||
|
|
||||||
target.N0=target.N0+1
|
target.N0=target.N0+1
|
||||||
|
|
||||||
@ -922,7 +999,8 @@ function TARGET:_AddObject(Object)
|
|||||||
if self.category==nil then
|
if self.category==nil then
|
||||||
self.category=self:GetTargetCategory(target)
|
self.category=self:GetTargetCategory(target)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
@ -991,8 +1069,9 @@ function TARGET:GetTargetLife(Target)
|
|||||||
|
|
||||||
elseif Target.Type==TARGET.ObjectType.SCENERY then
|
elseif Target.Type==TARGET.ObjectType.SCENERY then
|
||||||
|
|
||||||
if Target.Status==TARGET.ObjectStatus.ALIVE then
|
if Target.Object and Target.Object:IsAlive() then
|
||||||
return 1
|
local life = Target.Object:GetLife()
|
||||||
|
return life
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
@ -1016,7 +1095,8 @@ function TARGET:GetTargetLife(Target)
|
|||||||
else
|
else
|
||||||
self:E("ERROR: unknown target object type in GetTargetLife!")
|
self:E("ERROR: unknown target object type in GetTargetLife!")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Get current life points.
|
--- Get current life points.
|
||||||
@ -1091,7 +1171,8 @@ function TARGET:GetTargetThreatLevelMax(Target)
|
|||||||
else
|
else
|
||||||
self:E("ERROR: unknown target object type in GetTargetThreatLevel!")
|
self:E("ERROR: unknown target object type in GetTargetThreatLevel!")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -1558,7 +1639,7 @@ function TARGET:CountObjectives(Target)
|
|||||||
|
|
||||||
elseif Target.Type==TARGET.ObjectType.SCENERY then
|
elseif Target.Type==TARGET.ObjectType.SCENERY then
|
||||||
|
|
||||||
if Target.Status==TARGET.ObjectStatus.ALIVE then
|
if Target.Status~=TARGET.ObjectStatus.DEAD then
|
||||||
N=N+1
|
N=N+1
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1630,7 +1711,7 @@ function TARGET:IsCasualty(Name)
|
|||||||
end
|
end
|
||||||
|
|
||||||
for _,name in pairs(self.casualties) do
|
for _,name in pairs(self.casualties) do
|
||||||
if name==Name then
|
if tostring(name)==tostring(Name) then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user