diff --git a/Moose Development/Moose/Ops/OpsGroup.lua b/Moose Development/Moose/Ops/OpsGroup.lua index 79240503b..48145683b 100644 --- a/Moose Development/Moose/Ops/OpsGroup.lua +++ b/Moose Development/Moose/Ops/OpsGroup.lua @@ -90,6 +90,7 @@ -- @field #OPSGROUP.Spot spot Laser and IR spot. -- -- @field #OPSGROUP.Ammo ammo Initial ammount of ammo. +-- @field #OPSGROUP.WeaponData weaponData Weapon data table with key=BitType. -- -- @extends Core.Fsm#FSM @@ -144,6 +145,7 @@ OPSGROUP = { callsign = {}, Ndestroyed = 0, Nkills = 0, + weaponData = {}, } @@ -601,14 +603,14 @@ end --- Add a weapon range for ARTY auftrag. -- @param #OPSGROUP self --- @param #number RangeMin Minimum range in kilometers. Default 0 km. --- @param #number RangeMax Maximum range in kilometers. Default 10 km. +-- @param #number RangeMin Minimum range in nautical miles. Default 0 NM. +-- @param #number RangeMax Maximum range in nautical miles. Default 10 NM. -- @param #number BitType Bit mask of weapon type for which the given min/max ranges apply. Default is `ENUMS.WeaponFlag.Auto`, i.e. for all weapon types. -- @return #OPSGROUP self function OPSGROUP:AddWeaponRange(RangeMin, RangeMax, BitType) - RangeMin=(RangeMin or 0)*1000 - RangeMax=(RangeMax or 10)*1000 + RangeMin=UTILS.NMToMeters(RangeMin or 0) + RangeMax=UTILS.NMToMeters(RangeMax or 10) local weapon={} --#OPSGROUP.WeaponData @@ -3497,8 +3499,15 @@ function OPSGROUP:SetLaserTarget(Target) if Target then - -- Check if we have a POSITIONABLE. - if Target:IsInstanceOf("POSITIONABLE") then + -- Check object type. + if Target:IsInstanceOf("SCENERY") then + + -- Scenery as target. Treat it like a coordinate. Set offset to 1 meter above ground. + self.spot.TargetType=0 + self.spot.offsetTarget={x=0, y=1, z=0} + + elseif Target:IsInstanceOf("POSITIONABLE") then + local target=Target --Wrapper.Positionable#POSITIONABLE if target:IsAlive() then @@ -3535,13 +3544,11 @@ function OPSGROUP:SetLaserTarget(Target) end elseif Target:IsInstanceOf("COORDINATE") then + -- Coordinate as target. self.spot.TargetType=0 self.spot.offsetTarget={x=0, y=0, z=0} - elseif Target:IsInstanceOf("SCENERY") then - -- Coordinate as target. - self.spot.TargetType=0 - self.spot.offsetTarget={x=0, y=1, z=0} + else self:E(self.lid.."ERROR: LASER target should be a POSITIONABLE (GROUP, UNIT or STATIC) or a COORDINATE object!") return diff --git a/Moose Development/Moose/Utilities/Utils.lua b/Moose Development/Moose/Utilities/Utils.lua index 40ba3e932..e0eb873da 100644 --- a/Moose Development/Moose/Utilities/Utils.lua +++ b/Moose Development/Moose/Utilities/Utils.lua @@ -324,18 +324,34 @@ UTILS.MetersToNM = function(meters) return meters/1852 end +UTILS.KiloMetersToNM = function(kilometers) + return kilometers/1852*1000 +end + UTILS.MetersToSM = function(meters) return meters/1609.34 end +UTILS.KiloMetersToSM = function(kilometers) + return kilometers/1609.34*1000 +end + UTILS.MetersToFeet = function(meters) return meters/0.3048 end +UTILS.KiloMetersToFeet = function(kilometers) + return kilometers/0.3048*1000 +end + UTILS.NMToMeters = function(NM) return NM*1852 end +UTILS.NMToKiloMeters = function(NM) + return NM*1852/1000 +end + UTILS.FeetToMeters = function(feet) return feet*0.3048 end