diff --git a/Moose Development/Moose/Ops/OpsGroup.lua b/Moose Development/Moose/Ops/OpsGroup.lua index 0af2da08b..c57f46d75 100644 --- a/Moose Development/Moose/Ops/OpsGroup.lua +++ b/Moose Development/Moose/Ops/OpsGroup.lua @@ -234,7 +234,15 @@ OPSGROUP.TaskType={ -- @field #number Alarm Alarm state. -- @field #number Formation Formation. -- @field #boolean EPLRS data link. --- @field #boolean Disperse Disperse under fire. +-- @field #boolean Disperse Disperse under fire. + + +--- Weapon range data. +-- @type OPSGROUP.WeaponData +-- @field #number BitType Type of weapon. +-- @field #number RangeMin Min range in meters. +-- @field #number RangeMax Max range in meters. +-- @field #number ReloadTime Time to reload in seconds. --- Ammo data. -- @type OPSGROUP.Ammo @@ -470,6 +478,47 @@ function OPSGROUP:AddCheckZone(CheckZone) return self end + +--- Add a zone that triggers and event if the group enters or leaves any of the zones. +-- @param #OPSGROUP self +-- @param #number RangeMin +-- @param #number RangeMax +-- @param #number BitType +-- @return #OPSGROUP self +function OPSGROUP:AddWeaponRange(RangeMin, RangeMax, BitType) + + RangeMin=(RangeMin or 0)*1000 + RangeMax=(RangeMax or 10)*1000 + + local weapon={} --#OPSGROUP.WeaponData + + weapon.BitType=BitType or ENUMS.WeaponFlag.Auto + weapon.RangeMax=RangeMax + weapon.RangeMin=RangeMin + + self.weaponData=self.weaponData or {} + self.weaponData[weapon.BitType]=weapon + + return self +end + +--- +-- @param #OPSGROUP self +-- @param #number BitType +-- @return #OPSGROUP.WeaponData Weapon range data. +function OPSGROUP:GetWeaponData(BitType) + + BitType=BitType or ENUMS.WeaponFlag.Auto + + if self.weaponData[BitType] then + return self.wself.weaponData[BitType] + else + return self.wself.weaponData[ENUMS.WeaponFlag.Auto] + end + +end + + --- Get set of detected units. -- @param #OPSGROUP self -- @return Core.Set#SET_UNIT Set of detected units. @@ -2400,9 +2449,6 @@ function OPSGROUP:RouteToMission(mission, delay) -- Speed to mission waypoint. local SpeedToMission=UTILS.KmphToKnots(self.speedCruise) - - -- Add waypoint. - local waypoint=self:AddWaypoint(waypointcoord, SpeedToMission, nil, nil, false) -- Special for Troop transport. if mission.type==AUFTRAG.Type.TROOPTRANSPORT then @@ -2421,7 +2467,26 @@ function OPSGROUP:RouteToMission(mission, delay) end + elseif mission.type==AUFTRAG.Type.ARTY then + + local weapondata=self:GetWeaponData(mission.engageWeaponType) + + local targetcoord=mission:GetTargetCoordinate() + + local heading=self:GetCoordinate():HeadingTo(targetcoord) + + local dist=self:GetCoordinate():Get2DDistance(targetcoord) + + if dist>weapondata.RangeMax then + waypointcoord=self:GetCoordinate():Translate(dist-weapondata.RangeMax, heading) + elseif dist