diff --git a/Moose Development/Moose/AI/AI_Air.lua b/Moose Development/Moose/AI/AI_Air.lua index 5d2feda5e..d3d11cf16 100644 --- a/Moose Development/Moose/AI/AI_Air.lua +++ b/Moose Development/Moose/AI/AI_Air.lua @@ -657,8 +657,8 @@ function AI_AIR:onafterRTB( AIGroup, From, Event, To ) --- Create a route point of type air. local FromRTBRoutePoint = FromCoord:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, RTBSpeed, true ) @@ -666,8 +666,8 @@ function AI_AIR:onafterRTB( AIGroup, From, Event, To ) --- Create a route point of type air. local ToRTBRoutePoint = ToAirbaseCoord:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, RTBSpeed, true ) @@ -761,10 +761,10 @@ function AI_AIR:onafterRefuel( AIGroup, From, Event, To ) local ToRefuelSpeed = math.random( self.PatrolMinSpeed, self.PatrolMaxSpeed ) --- Create a route point of type air. - local FromRefuelRoutePoint = FromRefuelCoord:WaypointAir(self.PatrolAltType, POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, ToRefuelSpeed, true) + local FromRefuelRoutePoint = FromRefuelCoord:WaypointAir(self.PatrolAltType, COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, ToRefuelSpeed, true) --- Create a route point of type air. NOT used! - local ToRefuelRoutePoint = Tanker:GetCoordinate():WaypointAir(self.PatrolAltType, POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, ToRefuelSpeed, true) + local ToRefuelRoutePoint = Tanker:GetCoordinate():WaypointAir(self.PatrolAltType, COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, ToRefuelSpeed, true) self:F( { ToRefuelSpeed = ToRefuelSpeed } ) diff --git a/Moose Development/Moose/AI/AI_Air_Engage.lua b/Moose Development/Moose/AI/AI_Air_Engage.lua index 70898d2ba..ff3327421 100644 --- a/Moose Development/Moose/AI/AI_Air_Engage.lua +++ b/Moose Development/Moose/AI/AI_Air_Engage.lua @@ -453,7 +453,7 @@ function AI_AIR_ENGAGE:onafterEngageRoute( DefenderGroup, From, Event, To, Attac --- Calculate the target route point. - local FromWP = DefenderCoord:WaypointAir(self.PatrolAltType or "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, EngageSpeed, true) + local FromWP = DefenderCoord:WaypointAir(self.PatrolAltType or "RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, EngageSpeed, true) EngageRoute[#EngageRoute+1] = FromWP @@ -462,7 +462,7 @@ function AI_AIR_ENGAGE:onafterEngageRoute( DefenderGroup, From, Event, To, Attac local FromEngageAngle = DefenderCoord:GetAngleDegrees( DefenderCoord:GetDirectionVec3( TargetCoord ) ) local ToCoord=DefenderCoord:Translate( EngageDistance, FromEngageAngle, true ) - local ToWP = ToCoord:WaypointAir(self.PatrolAltType or "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, EngageSpeed, true) + local ToWP = ToCoord:WaypointAir(self.PatrolAltType or "RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, EngageSpeed, true) EngageRoute[#EngageRoute+1] = ToWP @@ -536,7 +536,7 @@ function AI_AIR_ENGAGE:onafterEngage( DefenderGroup, From, Event, To, AttackSetU local EngageRoute = {} local AttackTasks = {} - local FromWP = DefenderCoord:WaypointAir(self.EngageAltType or "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, EngageSpeed, true) + local FromWP = DefenderCoord:WaypointAir(self.EngageAltType or "RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, EngageSpeed, true) EngageRoute[#EngageRoute+1] = FromWP self:SetTargetDistance( TargetCoord ) -- For RTB status check @@ -544,7 +544,7 @@ function AI_AIR_ENGAGE:onafterEngage( DefenderGroup, From, Event, To, AttackSetU local FromEngageAngle = DefenderCoord:GetAngleDegrees( DefenderCoord:GetDirectionVec3( TargetCoord ) ) local ToCoord=DefenderCoord:Translate( EngageDistance, FromEngageAngle, true ) - local ToWP = ToCoord:WaypointAir(self.EngageAltType or "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, EngageSpeed, true) + local ToWP = ToCoord:WaypointAir(self.EngageAltType or "RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, EngageSpeed, true) EngageRoute[#EngageRoute+1] = ToWP -- TODO: A factor of * 3 this way too low. This causes the AI NOT to engage until very close or even merged sometimes. Some A2A missiles have a much longer range! Needs more frequent updates of the task! diff --git a/Moose Development/Moose/AI/AI_Air_Patrol.lua b/Moose Development/Moose/AI/AI_Air_Patrol.lua index 3185f987e..5b0abe72e 100644 --- a/Moose Development/Moose/AI/AI_Air_Patrol.lua +++ b/Moose Development/Moose/AI/AI_Air_Patrol.lua @@ -309,7 +309,7 @@ function AI_AIR_PATROL:onafterPatrolRoute( AIPatrol, From, Event, To ) local ToTargetSpeed = math.random( self.PatrolMinSpeed, self.PatrolMaxSpeed ) local speedkmh=ToTargetSpeed - local FromWP = CurrentCoord:WaypointAir(self.PatrolAltType or "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, ToTargetSpeed, true) + local FromWP = CurrentCoord:WaypointAir(self.PatrolAltType or "RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, ToTargetSpeed, true) PatrolRoute[#PatrolRoute+1] = FromWP if self.racetrack then @@ -359,9 +359,9 @@ function AI_AIR_PATROL:onafterPatrolRoute( AIPatrol, From, Event, To ) else --- Create a route point of type air. - local ToWP = ToTargetCoord:WaypointAir(self.PatrolAltType, POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, ToTargetSpeed, true) + local ToWP = ToTargetCoord:WaypointAir(self.PatrolAltType, COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, ToTargetSpeed, true) PatrolRoute[#PatrolRoute+1] = ToWP - + local Tasks = {} Tasks[#Tasks+1] = AIPatrol:TaskFunction("AI_AIR_PATROL.___PatrolRoute", self) PatrolRoute[#PatrolRoute].task = AIPatrol:TaskCombo( Tasks ) diff --git a/Moose Development/Moose/AI/AI_BAI.lua b/Moose Development/Moose/AI/AI_BAI.lua index ec338e30b..6b2a1dfe3 100644 --- a/Moose Development/Moose/AI/AI_BAI.lua +++ b/Moose Development/Moose/AI/AI_BAI.lua @@ -521,12 +521,12 @@ function AI_BAI_ZONE:onafterEngage( Controllable, From, Event, To, --DONE: Create GetAltitude function for GROUP, and delete GetUnit(1). local CurrentAltitude = self.Controllable:GetAltitude() - local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) + local CurrentPointVec3 = COORDINATE:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) local ToEngageZoneSpeed = self.PatrolMaxSpeed local CurrentRoutePoint = CurrentPointVec3:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, self.EngageSpeed, true ) @@ -577,13 +577,13 @@ function AI_BAI_ZONE:onafterEngage( Controllable, From, Event, To, self:T2( ToTargetVec2 ) --- Obtain a 3D @{Point} from the 2D point + altitude. - local ToTargetPointVec3 = POINT_VEC3:New( ToTargetVec2.x, self.EngageAltitude, ToTargetVec2.y ) + local ToTargetPointVec3 = COORDINATE:New( ToTargetVec2.x, self.EngageAltitude, ToTargetVec2.y ) --- Create a route point of type air. local ToTargetRoutePoint = ToTargetPointVec3:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, self.EngageSpeed, true ) diff --git a/Moose Development/Moose/AI/AI_Balancer.lua b/Moose Development/Moose/AI/AI_Balancer.lua index b64e27057..34afc35d0 100644 --- a/Moose Development/Moose/AI/AI_Balancer.lua +++ b/Moose Development/Moose/AI/AI_Balancer.lua @@ -220,16 +220,9 @@ function AI_BALANCER:onenterReturning( SetGroup, From, Event, To, AIGroup ) AIGroup:MessageToRed( "Returning to home base ...", 30 ) else -- Okay, we need to send this Group back to the nearest base of the Coalition of the AI. - --TODO: i need to rework the POINT_VEC2 thing. - local PointVec2 = POINT_VEC2:New( AIGroup:GetVec2().x, AIGroup:GetVec2().y ) + local PointVec2 = COORDINATE:New(AIGroup:GetVec2().x, 0, AIGroup:GetVec2().y) local ClosestAirbase = self.ReturnAirbaseSet:FindNearestAirbaseFromPointVec2( PointVec2 ) self:T( ClosestAirbase.AirbaseName ) - --[[ - AIGroup:MessageToRed( "Returning to " .. ClosestAirbase:GetName().. " ...", 30 ) - local RTBRoute = AIGroup:RouteReturnToAirbase( ClosestAirbase ) - AIGroupTemplate.route = RTBRoute - AIGroup:Respawn( AIGroupTemplate ) - ]] AIGroup:RouteRTB(ClosestAirbase) end diff --git a/Moose Development/Moose/AI/AI_CAP.lua b/Moose Development/Moose/AI/AI_CAP.lua index d59931452..dc0a843a8 100644 --- a/Moose Development/Moose/AI/AI_CAP.lua +++ b/Moose Development/Moose/AI/AI_CAP.lua @@ -423,12 +423,12 @@ function AI_CAP_ZONE:onafterEngage( Controllable, From, Event, To ) --DONE: Create GetAltitude function for GROUP, and delete GetUnit(1). local CurrentAltitude = self.Controllable:GetAltitude() - local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) + local CurrentPointVec3 = COORDINATE:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) local ToEngageZoneSpeed = self.PatrolMaxSpeed local CurrentRoutePoint = CurrentPointVec3:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, ToEngageZoneSpeed, true ) @@ -445,13 +445,13 @@ function AI_CAP_ZONE:onafterEngage( Controllable, From, Event, To ) self:T2( { self.PatrolMinSpeed, self.PatrolMaxSpeed, ToTargetSpeed } ) --- Obtain a 3D @{Point} from the 2D point + altitude. - local ToTargetPointVec3 = POINT_VEC3:New( ToTargetVec2.x, ToTargetAltitude, ToTargetVec2.y ) + local ToTargetPointVec3 = COORDINATE:New( ToTargetVec2.x, ToTargetAltitude, ToTargetVec2.y ) --- Create a route point of type air. local ToPatrolRoutePoint = ToTargetPointVec3:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, ToTargetSpeed, true ) diff --git a/Moose Development/Moose/AI/AI_CAS.lua b/Moose Development/Moose/AI/AI_CAS.lua index c6d2c11f4..832cc6bd5 100644 --- a/Moose Development/Moose/AI/AI_CAS.lua +++ b/Moose Development/Moose/AI/AI_CAS.lua @@ -466,12 +466,12 @@ function AI_CAS_ZONE:onafterEngage( Controllable, From, Event, To, --DONE: Create GetAltitude function for GROUP, and delete GetUnit(1). local CurrentAltitude = self.Controllable:GetAltitude() - local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) + local CurrentPointVec3 = COORDINATE:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) local ToEngageZoneSpeed = self.PatrolMaxSpeed local CurrentRoutePoint = CurrentPointVec3:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, self.EngageSpeed, true ) @@ -508,13 +508,13 @@ function AI_CAS_ZONE:onafterEngage( Controllable, From, Event, To, self:T2( ToTargetVec2 ) --- Obtain a 3D @{Point} from the 2D point + altitude. - local ToTargetPointVec3 = POINT_VEC3:New( ToTargetVec2.x, self.EngageAltitude, ToTargetVec2.y ) + local ToTargetPointVec3 = COORDINATE:New( ToTargetVec2.x, self.EngageAltitude, ToTargetVec2.y ) --- Create a route point of type air. local ToTargetRoutePoint = ToTargetPointVec3:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, self.EngageSpeed, true ) diff --git a/Moose Development/Moose/AI/AI_Cargo_Airplane.lua b/Moose Development/Moose/AI/AI_Cargo_Airplane.lua index 9dad75f25..79d1b6307 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Airplane.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Airplane.lua @@ -440,7 +440,7 @@ function AI_CARGO_AIRPLANE:Route( Airplane, Airbase, Speed, Height, Uncontrolled -- To point. local AirbasePointVec2 = Airbase:GetPointVec2() - local ToWaypoint = AirbasePointVec2:WaypointAir(POINT_VEC3.RoutePointAltType.BARO, "Land", "Landing", Speed or Airplane:GetSpeedMax()*0.8, true, Airbase) + local ToWaypoint = AirbasePointVec2:WaypointAir(COORDINATE.WaypointAltType.BARO, "Land", "Landing", Speed or Airplane:GetSpeedMax()*0.8, true, Airbase) --ToWaypoint["airdromeId"] = Airbase:GetID() --ToWaypoint["speed_locked"] = true diff --git a/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua b/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua index 6edfc3894..b91c0db38 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua @@ -367,8 +367,8 @@ function AI_CARGO_HELICOPTER:onafterQueue( Helicopter, From, Event, To, Coordina -- local CoordinateFrom = Helicopter:GetCoordinate() -- local WaypointFrom = CoordinateFrom:WaypointAir( -- "RADIO", --- POINT_VEC3.RoutePointType.TurningPoint, --- POINT_VEC3.RoutePointAction.TurningPoint, +-- COORDINATE.WaypointType.TurningPoint, +-- COORDINATE.WaypointAction.TurningPoint, -- Speed, -- true -- ) @@ -380,8 +380,8 @@ function AI_CARGO_HELICOPTER:onafterQueue( Helicopter, From, Event, To, Coordina local WaypointTo = CoordinateTo:WaypointAir( "RADIO", - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, 50, true ) @@ -427,7 +427,7 @@ function AI_CARGO_HELICOPTER:onafterOrbit( Helicopter, From, Event, To, Coordina local landheight = CoordinateTo:GetLandHeight() -- get target height CoordinateTo.y = landheight + 50 -- flight height should be 50m above ground - local WaypointTo = CoordinateTo:WaypointAir("RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, 50, true) + local WaypointTo = CoordinateTo:WaypointAir("RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, 50, true) Route[#Route+1] = WaypointTo local Tasks = {} @@ -496,14 +496,14 @@ function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordin local CoordinateFrom = Helicopter:GetCoordinate() --- Create a route point of type air. - local WaypointFrom = CoordinateFrom:WaypointAir("RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, _speed, true) + local WaypointFrom = CoordinateFrom:WaypointAir("RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, _speed, true) --- Create a route point of type air. local CoordinateTo = Coordinate local landheight = CoordinateTo:GetLandHeight() -- get target height CoordinateTo.y = landheight + 50 -- flight height should be 50m above ground - local WaypointTo = CoordinateTo:WaypointAir("RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint,_speed, true) + local WaypointTo = CoordinateTo:WaypointAir("RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint,_speed, true) Route[#Route+1] = WaypointFrom Route[#Route+1] = WaypointTo @@ -563,7 +563,7 @@ function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordin --- Create a route point of type air. local CoordinateFrom = Helicopter:GetCoordinate() - local WaypointFrom = CoordinateFrom:WaypointAir("RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, _speed, true) + local WaypointFrom = CoordinateFrom:WaypointAir("RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, _speed, true) Route[#Route+1] = WaypointFrom Route[#Route+1] = WaypointFrom @@ -573,7 +573,7 @@ function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordin local landheight = CoordinateTo:GetLandHeight() -- get target height CoordinateTo.y = landheight + 50 -- flight height should be 50m above ground - local WaypointTo = CoordinateTo:WaypointAir("RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, _speed, true) + local WaypointTo = CoordinateTo:WaypointAir("RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, _speed, true) Route[#Route+1] = WaypointTo Route[#Route+1] = WaypointTo @@ -631,7 +631,7 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat --- Create a route point of type air. local CoordinateFrom = Helicopter:GetCoordinate() - local WaypointFrom = CoordinateFrom:WaypointAir("RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, Speed, true) + local WaypointFrom = CoordinateFrom:WaypointAir("RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, Speed, true) Route[#Route+1] = WaypointFrom --- Create a route point of type air. @@ -639,7 +639,7 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat local landheight = CoordinateTo:GetLandHeight() -- get target height CoordinateTo.y = landheight + Height -- flight height should be 50m above ground - local WaypointTo = CoordinateTo:WaypointAir("RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, Speed, true) + local WaypointTo = CoordinateTo:WaypointAir("RADIO", COORDINATE.WaypointType.TurningPoint, COORDINATE.WaypointAction.TurningPoint, Speed, true) Route[#Route+1] = WaypointTo diff --git a/Moose Development/Moose/AI/AI_Formation.lua b/Moose Development/Moose/AI/AI_Formation.lua index d7d2d1966..e42bd3a8f 100644 --- a/Moose Development/Moose/AI/AI_Formation.lua +++ b/Moose Development/Moose/AI/AI_Formation.lua @@ -725,7 +725,7 @@ function AI_FORMATION:onafterFormationLine( FollowGroupSet, From , Event , To, X for FollowID, FollowGroup in pairs( FollowSet ) do - local PointVec3 = POINT_VEC3:New() + local PointVec3 = COORDINATE:New() PointVec3:SetX( XStart + i * XSpace ) PointVec3:SetY( YStart + i * YSpace ) PointVec3:SetZ( ZStart + i * ZSpace ) @@ -877,7 +877,7 @@ function AI_FORMATION:onafterFormationCenterWing( FollowGroupSet, From , Event , for FollowID, FollowGroup in pairs( FollowSet ) do - local PointVec3 = POINT_VEC3:New() + local PointVec3 = COORDINATE:New() local Side = ( i % 2 == 0 ) and 1 or -1 local Row = i / 2 + 1 @@ -936,7 +936,7 @@ function AI_FORMATION:onafterFormationBox( FollowGroupSet, From , Event , To, XS for FollowID, FollowGroup in pairs( FollowSet ) do - local PointVec3 = POINT_VEC3:New() + local PointVec3 = COORDINATE:New() local ZIndex = i % ZLevels local XIndex = math.floor( i / ZLevels ) diff --git a/Moose Development/Moose/AI/AI_Patrol.lua b/Moose Development/Moose/AI/AI_Patrol.lua index e6516736a..408e3b1a6 100644 --- a/Moose Development/Moose/AI/AI_Patrol.lua +++ b/Moose Development/Moose/AI/AI_Patrol.lua @@ -751,12 +751,12 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To ) if not CurrentVec2 then return end --Done: Create GetAltitude function for GROUP, and delete GetUnit(1). local CurrentAltitude = self.Controllable:GetAltitude() - local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) + local CurrentPointVec3 = COORDINATE:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) local ToPatrolZoneSpeed = self.PatrolMaxSpeed local CurrentRoutePoint = CurrentPointVec3:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TakeOffParking, - POINT_VEC3.RoutePointAction.FromParkingArea, + COORDINATE.WaypointType.TakeOffParking, + COORDINATE.WaypointAction.FromParkingArea, ToPatrolZoneSpeed, true ) @@ -767,12 +767,12 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To ) if not CurrentVec2 then return end --DONE: Create GetAltitude function for GROUP, and delete GetUnit(1). local CurrentAltitude = self.Controllable:GetAltitude() - local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) + local CurrentPointVec3 = COORDINATE:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) local ToPatrolZoneSpeed = self.PatrolMaxSpeed local CurrentRoutePoint = CurrentPointVec3:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, ToPatrolZoneSpeed, true ) @@ -792,13 +792,13 @@ function AI_PATROL_ZONE:onafterRoute( Controllable, From, Event, To ) self:T2( { self.PatrolMinSpeed, self.PatrolMaxSpeed, ToTargetSpeed } ) --- Obtain a 3D @{Point} from the 2D point + altitude. - local ToTargetPointVec3 = POINT_VEC3:New( ToTargetVec2.x, ToTargetAltitude, ToTargetVec2.y ) + local ToTargetPointVec3 = COORDINATE:New( ToTargetVec2.x, ToTargetAltitude, ToTargetVec2.y ) --- Create a route point of type air. local ToTargetRoutePoint = ToTargetPointVec3:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, ToTargetSpeed, true ) @@ -890,12 +890,12 @@ function AI_PATROL_ZONE:onafterRTB() --DONE: Create GetAltitude function for GROUP, and delete GetUnit(1). --local CurrentAltitude = self.Controllable:GetUnit(1):GetAltitude() local CurrentAltitude = self.Controllable:GetAltitude() - local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) + local CurrentPointVec3 = COORDINATE:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) local ToPatrolZoneSpeed = self.PatrolMaxSpeed local CurrentRoutePoint = CurrentPointVec3:WaypointAir( self.PatrolAltType, - POINT_VEC3.RoutePointType.TurningPoint, - POINT_VEC3.RoutePointAction.TurningPoint, + COORDINATE.WaypointType.TurningPoint, + COORDINATE.WaypointAction.TurningPoint, ToPatrolZoneSpeed, true ) diff --git a/Moose Development/Moose/Cargo/Cargo.lua b/Moose Development/Moose/Cargo/Cargo.lua index 8b7d6040e..413beb514 100644 --- a/Moose Development/Moose/Cargo/Cargo.lua +++ b/Moose Development/Moose/Cargo/Cargo.lua @@ -275,14 +275,14 @@ -- The cargo must be in the **Loaded** state. -- @function [parent=#CARGO] UnBoard -- @param #CARGO self --- @param Core.Point#POINT_VEC2 ToPointVec2 (optional) @{Core.Point#POINT_VEC2) to where the cargo should run after onboarding. If not provided, the cargo will run to 60 meters behind the Carrier location. +-- @param Core.Point#COORDINATE ToPointVec2 (optional) @{Core.Point#COORDINATE) to where the cargo should run after onboarding. If not provided, the cargo will run to 60 meters behind the Carrier location. --- UnBoards the cargo to a Carrier. The event will create a movement (= running or driving) of the cargo from the Carrier. -- The cargo must be in the **Loaded** state. -- @function [parent=#CARGO] __UnBoard -- @param #CARGO self -- @param #number DelaySeconds The amount of seconds to delay the action. --- @param Core.Point#POINT_VEC2 ToPointVec2 (optional) @{Core.Point#POINT_VEC2) to where the cargo should run after onboarding. If not provided, the cargo will run to 60 meters behind the Carrier location. +-- @param Core.Point#COORDINATE ToPointVec2 (optional) @{Core.Point#COORDINATE) to where the cargo should run after onboarding. If not provided, the cargo will run to 60 meters behind the Carrier location. -- Load @@ -307,14 +307,14 @@ -- The cargo must be in the **Loaded** state. -- @function [parent=#CARGO] UnLoad -- @param #CARGO self --- @param Core.Point#POINT_VEC2 ToPointVec2 (optional) @{Core.Point#POINT_VEC2) to where the cargo will be placed after unloading. If not provided, the cargo will be placed 60 meters behind the Carrier location. +-- @param Core.Point#COORDINATE ToPointVec2 (optional) @{Core.Point#COORDINATE) to where the cargo will be placed after unloading. If not provided, the cargo will be placed 60 meters behind the Carrier location. --- UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier. There will be no movement simulated of the cargo loading. -- The cargo must be in the **Loaded** state. -- @function [parent=#CARGO] __UnLoad -- @param #CARGO self -- @param #number DelaySeconds The amount of seconds to delay the action. --- @param Core.Point#POINT_VEC2 ToPointVec2 (optional) @{Core.Point#POINT_VEC2) to where the cargo will be placed after unloading. If not provided, the cargo will be placed 60 meters behind the Carrier location. +-- @param Core.Point#COORDINATE ToPointVec2 (optional) @{Core.Point#COORDINATE) to where the cargo will be placed after unloading. If not provided, the cargo will be placed 60 meters behind the Carrier location. -- State Transition Functions @@ -467,7 +467,7 @@ do -- CARGO self.Type = Type self.Name = Name self.Weight = Weight or 0 - self.CargoObject = nil + self.CargoObject = nil -- Wrapper.Group#GROUP self.CargoCarrier = nil -- Wrapper.Client#CLIENT self.Representable = false self.Slingloadable = false @@ -897,7 +897,7 @@ do -- CARGO --- Get the current PointVec2 of the cargo. -- @param #CARGO self - -- @return Core.Point#POINT_VEC2 + -- @return Core.Point#COORDINATE function CARGO:GetPointVec2() return self.CargoObject:GetPointVec2() end @@ -1094,7 +1094,7 @@ do -- CARGO_REPRESENTABLE --- Route a cargo unit to a PointVec2. -- @param #CARGO_REPRESENTABLE self - -- @param Core.Point#POINT_VEC2 ToPointVec2 + -- @param Core.Point#COORDINATE ToPointVec2 -- @param #number Speed -- @return #CARGO_REPRESENTABLE function CARGO_REPRESENTABLE:RouteTo( ToPointVec2, Speed ) diff --git a/Moose Development/Moose/Cargo/CargoCrate.lua b/Moose Development/Moose/Cargo/CargoCrate.lua index c0fbdd631..2dc94cd5a 100644 --- a/Moose Development/Moose/Cargo/CargoCrate.lua +++ b/Moose Development/Moose/Cargo/CargoCrate.lua @@ -114,7 +114,7 @@ do -- CARGO_CRATE -- @param #string Event -- @param #string From -- @param #string To - -- @param Core.Point#POINT_VEC2 + -- @param Core.Point#COORDINATE function CARGO_CRATE:onenterUnLoaded( From, Event, To, ToPointVec2 ) --self:T( { ToPointVec2, From, Event, To } ) diff --git a/Moose Development/Moose/Cargo/CargoGroup.lua b/Moose Development/Moose/Cargo/CargoGroup.lua index ca6a96a69..abcc89ea8 100644 --- a/Moose Development/Moose/Cargo/CargoGroup.lua +++ b/Moose Development/Moose/Cargo/CargoGroup.lua @@ -22,6 +22,7 @@ do -- CARGO_GROUP --- @type CARGO_GROUP -- @field Core.Set#SET_CARGO CargoSet The collection of derived CARGO objects. -- @field #string GroupName The name of the CargoGroup. + -- @field Wrapper.Group#GROUÜ CargoCarrier The carrier group. -- @extends Cargo.Cargo#CARGO_REPORTABLE --- Defines a cargo that is represented by a @{Wrapper.Group} object within the simulator. @@ -410,7 +411,7 @@ do -- CARGO_GROUP -- @param #string Event -- @param #string From -- @param #string To - -- @param Core.Point#POINT_VEC2 ToPointVec2 + -- @param Core.Point#COORDINATE ToPointVec2 -- @param #number NearRadius If distance is smaller than this number, cargo is loaded into the carrier. function CARGO_GROUP:onafterUnBoard( From, Event, To, ToPointVec2, NearRadius, ... ) self:T( {From, Event, To, ToPointVec2, NearRadius } ) @@ -453,7 +454,7 @@ do -- CARGO_GROUP -- @param #string Event -- @param #string From -- @param #string To - -- @param Core.Point#POINT_VEC2 ToPointVec2 + -- @param Core.Point#COORDINATE ToPointVec2 -- @param #number NearRadius If distance is smaller than this number, cargo is loaded into the carrier. function CARGO_GROUP:onafterUnBoarding( From, Event, To, ToPointVec2, NearRadius, ... ) --self:T( { From, Event, To, ToPointVec2, NearRadius } ) @@ -491,7 +492,7 @@ do -- CARGO_GROUP -- @param #string Event -- @param #string From -- @param #string To - -- @param Core.Point#POINT_VEC2 ToPointVec2 + -- @param Core.Point#COORDINATE ToPointVec2 function CARGO_GROUP:onafterUnLoad( From, Event, To, ToPointVec2, ... ) --self:T( { From, Event, To, ToPointVec2 } ) diff --git a/Moose Development/Moose/Cargo/CargoUnit.lua b/Moose Development/Moose/Cargo/CargoUnit.lua index a1d86dd49..a76469870 100644 --- a/Moose Development/Moose/Cargo/CargoUnit.lua +++ b/Moose Development/Moose/Cargo/CargoUnit.lua @@ -72,7 +72,7 @@ do -- CARGO_UNIT -- @param #string Event -- @param #string From -- @param #string To - -- @param Core.Point#POINT_VEC2 ToPointVec2 + -- @param Core.Point#COORDINATE ToPointVec2 -- @param #number NearRadius (optional) Defaut 25 m. function CARGO_UNIT:onenterUnBoarding( From, Event, To, ToPointVec2, NearRadius ) self:T( { From, Event, To, ToPointVec2, NearRadius } ) @@ -145,7 +145,7 @@ do -- CARGO_UNIT -- @param #string Event -- @param #string From -- @param #string To - -- @param Core.Point#POINT_VEC2 ToPointVec2 + -- @param Core.Point#COORDINATE ToPointVec2 -- @param #number NearRadius (optional) Defaut 100 m. function CARGO_UNIT:onleaveUnBoarding( From, Event, To, ToPointVec2, NearRadius ) self:T( { From, Event, To, ToPointVec2, NearRadius } ) @@ -171,7 +171,7 @@ do -- CARGO_UNIT -- @param #string Event -- @param #string From -- @param #string To - -- @param Core.Point#POINT_VEC2 ToPointVec2 + -- @param Core.Point#COORDINATE ToPointVec2 -- @param #number NearRadius (optional) Defaut 100 m. function CARGO_UNIT:onafterUnBoarding( From, Event, To, ToPointVec2, NearRadius ) self:T( { From, Event, To, ToPointVec2, NearRadius } ) @@ -197,7 +197,7 @@ do -- CARGO_UNIT -- @param #string Event -- @param #string From -- @param #string To - -- @param Core.Point#POINT_VEC2 + -- @param Core.Point#COORDINATE function CARGO_UNIT:onenterUnLoaded( From, Event, To, ToPointVec2 ) self:T( { ToPointVec2, From, Event, To } ) diff --git a/Moose Development/Moose/Core/Point.lua b/Moose Development/Moose/Core/Point.lua index 9afc49b7a..31b286aa3 100644 --- a/Moose Development/Moose/Core/Point.lua +++ b/Moose Development/Moose/Core/Point.lua @@ -1157,6 +1157,151 @@ do -- COORDINATE return vec3 end + --- Return the x coordinate of the COORDINATE. + -- @param #COORDINATE self + -- @return #number The x coordinate. + function COORDINATE:GetX() + return self.x + end + + --- Return the y coordinate of the COORDINATE. + -- @param #COORDINATE self + -- @return #number The y coordinate. + function COORDINATE:GetY() + return self.y + end + + --- Return the z coordinate of the COORDINATE. + -- @param #COORDINATE self + -- @return #number The z coordinate. + function COORDINATE:GetZ() + return self.z + end + + --- Set the x coordinate of the COORDINATE. + -- @param #COORDINATE self + -- @param #number x The x coordinate. + -- @return #COORDINATE + function COORDINATE:SetX( x ) + self.x = x + return self + end + + --- Set the y coordinate of the COORDINATE. + -- @param #COORDINATE self + -- @param #number y The y coordinate. + -- @return #COORDINATE + function COORDINATE:SetY( y ) + self.y = y + return self + end + + --- Set the z coordinate of the COORDINATE. + -- @param #COORDINATE self + -- @param #number z The z coordinate. + -- @return #COORDINATE + function COORDINATE:SetZ( z ) + self.z = z + return self + end + + --- Add to the x coordinate of the COORDINATE. + -- @param #COORDINATE self + -- @param #number x The x coordinate value to add to the current x coordinate. + -- @return #COORDINATE + function COORDINATE:AddX( x ) + self.x = self.x + x + return self + end + + + --- Return Return the Lat(itude) coordinate of the COORDINATE (ie: (parent)COORDINATE.x). + -- @param #COORDINATE self + -- @return #number The x coordinate. + function COORDINATE:GetLat() + return self.x + end + + --- Set the Lat(itude) coordinate of the COORDINATE (ie: COORDINATE.x). + -- @param #COORDINATE self + -- @param #number x The x coordinate. + -- @return #COORDINATE + function COORDINATE:SetLat( x ) + self.x = x + return self + end + + --- Return the Lon(gitude) coordinate of the COORDINATE (ie: (parent)COORDINATE.z). + -- @param #COORDINATE self + -- @return #number The y coordinate. + function COORDINATE:GetLon() + return self.z + end + + --- Set the Lon(gitude) coordinate of the COORDINATE (ie: COORDINATE.z). + -- @param #COORDINATE self + -- @param #number y The y coordinate. + -- @return #COORDINATE + function COORDINATE:SetLon( z ) + self.z = z + return self + end + + --- Return the altitude (height) of the land at the COORDINATE. + -- @param #COORDINATE self + -- @return #number The land altitude. + function COORDINATE:GetAlt() + return self.y ~= 0 or land.getHeight( { x = self.x, y = self.z } ) + end + + --- Set the altitude of the COORDINATE. + -- @param #COORDINATE self + -- @param #number Altitude The land altitude. If nothing (nil) is given, then the current land altitude is set. + -- @return #COORDINATE + function COORDINATE:SetAlt( Altitude ) + self.y = Altitude or land.getHeight( { x = self.x, y = self.z } ) + return self + end + + --- Add to the current land height an altitude. + -- @param #COORDINATE self + -- @param #number Altitude The Altitude to add. If nothing (nil) is given, then the current land altitude is set. + -- @return #COORDINATE + function COORDINATE:AddAlt( Altitude ) + self.y = land.getHeight( { x = self.x, y = self.z } ) + Altitude or 0 + return self + end + + + --- Return a random COORDINATE within an Outer Radius and optionally NOT within an Inner Radius of the COORDINATE. + -- @param #COORDINATE self + -- @param DCS#Distance OuterRadius + -- @param DCS#Distance InnerRadius + -- @return #COORDINATE + function COORDINATE:GetRandomPointVec2InRadius( OuterRadius, InnerRadius ) + self:F2( { OuterRadius, InnerRadius } ) + + return COORDINATE:NewFromVec2( self:GetRandomVec2InRadius( OuterRadius, InnerRadius ) ) + end + + --- Add to the y coordinate of the COORDINATE. + -- @param #COORDINATE self + -- @param #number y The y coordinate value to add to the current y coordinate. + -- @return #COORDINATE + function COORDINATE:AddY( y ) + self.y = self.y + y + return self + end + + --- Add to the z coordinate of the COORDINATE. + -- @param #COORDINATE self + -- @param #number z The z coordinate value to add to the current z coordinate. + -- @return #COORDINATE + function COORDINATE:AddZ( z ) + self.z = self.z +z + return self + end + --- Returns a text documenting the wind direction (from) and strength according the measurement system @{Core.Settings}. -- The text will reflect the wind like this: @@ -3474,9 +3619,18 @@ do -- COORDINATE return flat, elev end + --- Return a random COORDINATE within an Outer Radius and optionally NOT within an Inner Radius of the COORDINATE. + -- @param #COORDINATE self + -- @param DCS#Distance OuterRadius + -- @param DCS#Distance InnerRadius + -- @return #COORDINATE + function COORDINATE:GetRandomPointVec3InRadius( OuterRadius, InnerRadius ) + return COORDINATE:NewFromVec3( self:GetRandomVec3InRadius( OuterRadius, InnerRadius ) ) + end + end -do -- POINT_VEC3 +do --- The POINT_VEC3 class -- @type POINT_VEC3 @@ -3493,6 +3647,8 @@ do -- POINT_VEC3 --- Defines a 3D point in the simulator and with its methods, you can use or manipulate the point in 3D space. -- + -- **DEPRECATED - PLEASE USE COORDINATE!** + -- -- **Important Note:** Most of the functions in this section were taken from MIST, and reworked to OO concepts. -- In order to keep the credibility of the the author, -- I want to emphasize that the formulas embedded in the MIST framework were created by Grimes or previous authors, @@ -3580,130 +3736,19 @@ do -- POINT_VEC3 return self end - --- Create a new POINT_VEC3 object from Vec2 coordinates. - -- @param #POINT_VEC3 self - -- @param DCS#Vec2 Vec2 The Vec2 point. - -- @param DCS#Distance LandHeightAdd (optional) Add a landheight. - -- @return Core.Point#POINT_VEC3 self - function POINT_VEC3:NewFromVec2( Vec2, LandHeightAdd ) - - local self = BASE:Inherit( self, COORDINATE:NewFromVec2( Vec2, LandHeightAdd ) ) -- Core.Point#POINT_VEC3 - self:F2( self ) - - return self - end - - - --- Create a new POINT_VEC3 object from Vec3 coordinates. - -- @param #POINT_VEC3 self - -- @param DCS#Vec3 Vec3 The Vec3 point. - -- @return Core.Point#POINT_VEC3 self - function POINT_VEC3:NewFromVec3( Vec3 ) - - local self = BASE:Inherit( self, COORDINATE:NewFromVec3( Vec3 ) ) -- Core.Point#POINT_VEC3 - self:F2( self ) - - return self - end - - - - --- Return the x coordinate of the POINT_VEC3. - -- @param #POINT_VEC3 self - -- @return #number The x coordinate. - function POINT_VEC3:GetX() - return self.x - end - - --- Return the y coordinate of the POINT_VEC3. - -- @param #POINT_VEC3 self - -- @return #number The y coordinate. - function POINT_VEC3:GetY() - return self.y - end - - --- Return the z coordinate of the POINT_VEC3. - -- @param #POINT_VEC3 self - -- @return #number The z coordinate. - function POINT_VEC3:GetZ() - return self.z - end - - --- Set the x coordinate of the POINT_VEC3. - -- @param #POINT_VEC3 self - -- @param #number x The x coordinate. - -- @return #POINT_VEC3 - function POINT_VEC3:SetX( x ) - self.x = x - return self - end - - --- Set the y coordinate of the POINT_VEC3. - -- @param #POINT_VEC3 self - -- @param #number y The y coordinate. - -- @return #POINT_VEC3 - function POINT_VEC3:SetY( y ) - self.y = y - return self - end - - --- Set the z coordinate of the POINT_VEC3. - -- @param #POINT_VEC3 self - -- @param #number z The z coordinate. - -- @return #POINT_VEC3 - function POINT_VEC3:SetZ( z ) - self.z = z - return self - end - - --- Add to the x coordinate of the POINT_VEC3. - -- @param #POINT_VEC3 self - -- @param #number x The x coordinate value to add to the current x coordinate. - -- @return #POINT_VEC3 - function POINT_VEC3:AddX( x ) - self.x = self.x + x - return self - end - - --- Add to the y coordinate of the POINT_VEC3. - -- @param #POINT_VEC3 self - -- @param #number y The y coordinate value to add to the current y coordinate. - -- @return #POINT_VEC3 - function POINT_VEC3:AddY( y ) - self.y = self.y + y - return self - end - - --- Add to the z coordinate of the POINT_VEC3. - -- @param #POINT_VEC3 self - -- @param #number z The z coordinate value to add to the current z coordinate. - -- @return #POINT_VEC3 - function POINT_VEC3:AddZ( z ) - self.z = self.z +z - return self - end - - --- Return a random POINT_VEC3 within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC3. - -- @param #POINT_VEC3 self - -- @param DCS#Distance OuterRadius - -- @param DCS#Distance InnerRadius - -- @return #POINT_VEC3 - function POINT_VEC3:GetRandomPointVec3InRadius( OuterRadius, InnerRadius ) - - return POINT_VEC3:NewFromVec3( self:GetRandomVec3InRadius( OuterRadius, InnerRadius ) ) - end - end -do -- POINT_VEC2 +do - -- @type POINT_VEC2 + --- @type POINT_VEC2 -- @field DCS#Distance x The x coordinate in meters. -- @field DCS#Distance y the y coordinate in meters. -- @extends Core.Point#COORDINATE --- Defines a 2D point in the simulator. The height coordinate (if needed) will be the land height + an optional added height specified. -- + -- **DEPRECATED - PLEASE USE COORDINATE!** + -- -- ## POINT_VEC2 constructor -- -- A new POINT_VEC2 instance can be created with: @@ -3751,166 +3796,4 @@ do -- POINT_VEC2 return self end - --- Create a new POINT_VEC2 object from Vec2 coordinates. - -- @param #POINT_VEC2 self - -- @param DCS#Vec2 Vec2 The Vec2 point. - -- @return Core.Point#POINT_VEC2 self - function POINT_VEC2:NewFromVec2( Vec2, LandHeightAdd ) - - local LandHeight = land.getHeight( Vec2 ) - - LandHeightAdd = LandHeightAdd or 0 - LandHeight = LandHeight + LandHeightAdd - - local self = BASE:Inherit( self, COORDINATE:NewFromVec2( Vec2, LandHeightAdd ) ) -- #POINT_VEC2 - self:F2( self ) - - return self - end - - --- Create a new POINT_VEC2 object from Vec3 coordinates. - -- @param #POINT_VEC2 self - -- @param DCS#Vec3 Vec3 The Vec3 point. - -- @return Core.Point#POINT_VEC2 self - function POINT_VEC2:NewFromVec3( Vec3 ) - - local self = BASE:Inherit( self, COORDINATE:NewFromVec3( Vec3 ) ) -- #POINT_VEC2 - self:F2( self ) - - return self - end - - --- Return the x coordinate of the POINT_VEC2. - -- @param #POINT_VEC2 self - -- @return #number The x coordinate. - function POINT_VEC2:GetX() - return self.x - end - - --- Return the y coordinate of the POINT_VEC2. - -- @param #POINT_VEC2 self - -- @return #number The y coordinate. - function POINT_VEC2:GetY() - return self.z - end - - --- Set the x coordinate of the POINT_VEC2. - -- @param #POINT_VEC2 self - -- @param #number x The x coordinate. - -- @return #POINT_VEC2 - function POINT_VEC2:SetX( x ) - self.x = x - return self - end - - --- Set the y coordinate of the POINT_VEC2. - -- @param #POINT_VEC2 self - -- @param #number y The y coordinate. - -- @return #POINT_VEC2 - function POINT_VEC2:SetY( y ) - self.z = y - return self - end - - --- Return Return the Lat(itude) coordinate of the POINT_VEC2 (ie: (parent)POINT_VEC3.x). - -- @param #POINT_VEC2 self - -- @return #number The x coordinate. - function POINT_VEC2:GetLat() - return self.x - end - - --- Set the Lat(itude) coordinate of the POINT_VEC2 (ie: POINT_VEC3.x). - -- @param #POINT_VEC2 self - -- @param #number x The x coordinate. - -- @return #POINT_VEC2 - function POINT_VEC2:SetLat( x ) - self.x = x - return self - end - - --- Return the Lon(gitude) coordinate of the POINT_VEC2 (ie: (parent)POINT_VEC3.z). - -- @param #POINT_VEC2 self - -- @return #number The y coordinate. - function POINT_VEC2:GetLon() - return self.z - end - - --- Set the Lon(gitude) coordinate of the POINT_VEC2 (ie: POINT_VEC3.z). - -- @param #POINT_VEC2 self - -- @param #number y The y coordinate. - -- @return #POINT_VEC2 - function POINT_VEC2:SetLon( z ) - self.z = z - return self - end - - --- Return the altitude (height) of the land at the POINT_VEC2. - -- @param #POINT_VEC2 self - -- @return #number The land altitude. - function POINT_VEC2:GetAlt() - return self.y ~= 0 or land.getHeight( { x = self.x, y = self.z } ) - end - - --- Set the altitude of the POINT_VEC2. - -- @param #POINT_VEC2 self - -- @param #number Altitude The land altitude. If nothing (nil) is given, then the current land altitude is set. - -- @return #POINT_VEC2 - function POINT_VEC2:SetAlt( Altitude ) - self.y = Altitude or land.getHeight( { x = self.x, y = self.z } ) - return self - end - - --- Add to the x coordinate of the POINT_VEC2. - -- @param #POINT_VEC2 self - -- @param #number x The x coordinate. - -- @return #POINT_VEC2 - function POINT_VEC2:AddX( x ) - self.x = self.x + x - return self - end - - --- Add to the y coordinate of the POINT_VEC2. - -- @param #POINT_VEC2 self - -- @param #number y The y coordinate. - -- @return #POINT_VEC2 - function POINT_VEC2:AddY( y ) - self.z = self.z + y - return self - end - - --- Add to the current land height an altitude. - -- @param #POINT_VEC2 self - -- @param #number Altitude The Altitude to add. If nothing (nil) is given, then the current land altitude is set. - -- @return #POINT_VEC2 - function POINT_VEC2:AddAlt( Altitude ) - self.y = land.getHeight( { x = self.x, y = self.z } ) + Altitude or 0 - return self - end - - - --- Return a random POINT_VEC2 within an Outer Radius and optionally NOT within an Inner Radius of the POINT_VEC2. - -- @param #POINT_VEC2 self - -- @param DCS#Distance OuterRadius - -- @param DCS#Distance InnerRadius - -- @return #POINT_VEC2 - function POINT_VEC2:GetRandomPointVec2InRadius( OuterRadius, InnerRadius ) - self:F2( { OuterRadius, InnerRadius } ) - - return POINT_VEC2:NewFromVec2( self:GetRandomVec2InRadius( OuterRadius, InnerRadius ) ) - end - - -- TODO: Check this to replace - --- Calculate the distance from a reference @{#POINT_VEC2}. - -- @param #POINT_VEC2 self - -- @param #POINT_VEC2 PointVec2Reference The reference @{#POINT_VEC2}. - -- @return DCS#Distance The distance from the reference @{#POINT_VEC2} in meters. - function POINT_VEC2:DistanceFromPointVec2( PointVec2Reference ) - self:F2( PointVec2Reference ) - - local Distance = ( ( PointVec2Reference.x - self.x ) ^ 2 + ( PointVec2Reference.z - self.z ) ^2 ) ^ 0.5 - - self:T2( Distance ) - return Distance - end - end diff --git a/Moose Development/Moose/Core/Set.lua b/Moose Development/Moose/Core/Set.lua index 3f4fa2e71..0b54f06d0 100644 --- a/Moose Development/Moose/Core/Set.lua +++ b/Moose Development/Moose/Core/Set.lua @@ -629,14 +629,14 @@ do -- SET_BASE return self end - --- Iterate the SET_BASE while identifying the nearest object in the set from a @{Core.Point#POINT_VEC2}. + --- Iterate the SET_BASE while identifying the nearest object in the set from a @{Core.Point#COORDINATE}. -- @param #SET_BASE self - -- @param Core.Point#POINT_VEC2 PointVec2 A @{Core.Point#COORDINATE} or @{Core.Point#POINT_VEC2} object (but **not** a simple DCS#Vec2!) from where to evaluate the closest object in the set. + -- @param Core.Point#COORDINATE Coordinate A @{Core.Point#COORDINATE} object (but **not** a simple DCS#Vec2!) from where to evaluate the closest object in the set. -- @return Core.Base#BASE The closest object. -- @usage -- myset:FindNearestObjectFromPointVec2( ZONE:New("Test Zone"):GetCoordinate() ) - function SET_BASE:FindNearestObjectFromPointVec2( PointVec2 ) - --self:F2( PointVec2 ) + function SET_BASE:FindNearestObjectFromPointVec2( Coordinate ) + --self:F2( Coordinate ) local NearestObject = nil local ClosestDistance = nil @@ -644,9 +644,9 @@ do -- SET_BASE for ObjectID, ObjectData in pairs( self.Set ) do if NearestObject == nil then NearestObject = ObjectData - ClosestDistance = PointVec2:DistanceFromPointVec2( ObjectData:GetCoordinate() ) + ClosestDistance = Coordinate:DistanceFromPointVec2( ObjectData:GetCoordinate() ) else - local Distance = PointVec2:DistanceFromPointVec2( ObjectData:GetCoordinate() ) + local Distance = Coordinate:DistanceFromPointVec2( ObjectData:GetCoordinate() ) if Distance < ClosestDistance then NearestObject = ObjectData ClosestDistance = Distance @@ -1242,12 +1242,12 @@ do return GroupFound end - --- Iterate the SET_GROUP while identifying the nearest object from a @{Core.Point#POINT_VEC2}. + --- Iterate the SET_GROUP while identifying the nearest object from a @{Core.Point#COORDINATE}. -- @param #SET_GROUP self - -- @param Core.Point#POINT_VEC2 PointVec2 A @{Core.Point#POINT_VEC2} object from where to evaluate the closest object in the set. + -- @param Core.Point#COORDINATE Coordinate A @{Core.Point#COORDINATE} object from where to evaluate the closest object in the set. -- @return Wrapper.Group#GROUP The closest group. - function SET_GROUP:FindNearestGroupFromPointVec2( PointVec2 ) - --self:F2( PointVec2 ) + function SET_GROUP:FindNearestGroupFromPointVec2( Coordinate ) + --self:F2( Coordinate ) local NearestGroup = nil -- Wrapper.Group#GROUP local ClosestDistance = nil @@ -1257,9 +1257,9 @@ do for ObjectID, ObjectData in pairs( Set ) do if NearestGroup == nil then NearestGroup = ObjectData - ClosestDistance = PointVec2:DistanceFromPointVec2( ObjectData:GetCoordinate() ) + ClosestDistance = Coordinate:DistanceFromPointVec2( ObjectData:GetCoordinate() ) else - local Distance = PointVec2:DistanceFromPointVec2( ObjectData:GetCoordinate() ) + local Distance = Coordinate:DistanceFromPointVec2( ObjectData:GetCoordinate() ) if Distance < ClosestDistance then NearestGroup = ObjectData ClosestDistance = Distance @@ -5670,14 +5670,14 @@ do -- SET_AIRBASE return self end - --- Iterate the SET_AIRBASE while identifying the nearest @{Wrapper.Airbase#AIRBASE} from a @{Core.Point#POINT_VEC2}. + --- Iterate the SET_AIRBASE while identifying the nearest @{Wrapper.Airbase#AIRBASE} from a @{Core.Point#COORDINATE}. -- @param #SET_AIRBASE self - -- @param Core.Point#POINT_VEC2 PointVec2 A @{Core.Point#POINT_VEC2} object from where to evaluate the closest @{Wrapper.Airbase#AIRBASE}. + -- @param Core.Point#COORDINATE Coordinate A @{Core.Point#COORDINATE} object from where to evaluate the closest @{Wrapper.Airbase#AIRBASE}. -- @return Wrapper.Airbase#AIRBASE The closest @{Wrapper.Airbase#AIRBASE}. - function SET_AIRBASE:FindNearestAirbaseFromPointVec2( PointVec2 ) - --self:F2( PointVec2 ) + function SET_AIRBASE:FindNearestAirbaseFromPointVec2( Coordinate ) + --self:F2( Coordinate ) - local NearestAirbase = self:FindNearestObjectFromPointVec2( PointVec2 ) + local NearestAirbase = self:FindNearestObjectFromPointVec2( Coordinate ) return NearestAirbase end @@ -6007,17 +6007,19 @@ do -- SET_CARGO return self end - --- (R2.1) Iterate the SET_CARGO while identifying the nearest @{Cargo.Cargo#CARGO} from a @{Core.Point#POINT_VEC2}. + --- (R2.1) Iterate the SET_CARGO while identifying the nearest @{Cargo.Cargo#CARGO} from a @{Core.Point#COORDINATE}. -- @param #SET_CARGO self - -- @param Core.Point#POINT_VEC2 PointVec2 A @{Core.Point#POINT_VEC2} object from where to evaluate the closest @{Cargo.Cargo#CARGO}. + -- @param Core.Point#COORDINATE Coordinate A @{Core.Point#COORDINATE} object from where to evaluate the closest @{Cargo.Cargo#CARGO}. -- @return Cargo.Cargo#CARGO The closest @{Cargo.Cargo#CARGO}. - function SET_CARGO:FindNearestCargoFromPointVec2( PointVec2 ) -- R2.1 - --self:F2( PointVec2 ) + function SET_CARGO:FindNearestCargoFromPointVec2( Coordinate ) -- R2.1 + --self:F2( Coordinate ) - local NearestCargo = self:FindNearestObjectFromPointVec2( PointVec2 ) + local NearestCargo = self:FindNearestObjectFromPointVec2( Coordinate ) return NearestCargo end - + + --- + -- @param #SET_CARGO self function SET_CARGO:FirstCargoWithState( State ) local FirstCargo = nil @@ -6032,6 +6034,8 @@ do -- SET_CARGO return FirstCargo end + --- + -- @param #SET_CARGO self function SET_CARGO:FirstCargoWithStateAndNotDeployed( State ) local FirstCargo = nil diff --git a/Moose Development/Moose/Core/Spawn.lua b/Moose Development/Moose/Core/Spawn.lua index de81f9a46..c81aea59d 100644 --- a/Moose Development/Moose/Core/Spawn.lua +++ b/Moose Development/Moose/Core/Spawn.lua @@ -1631,7 +1631,7 @@ function SPAWN:SpawnWithIndex( SpawnIndex, NoBirth ) if SpawnTemplate then - local PointVec3 = POINT_VEC3:New( SpawnTemplate.route.points[1].x, SpawnTemplate.route.points[1].alt, SpawnTemplate.route.points[1].y ) + local PointVec3 = COORDINATE:New( SpawnTemplate.route.points[1].x, SpawnTemplate.route.points[1].alt, SpawnTemplate.route.points[1].y ) --self:T2( { "Current point of ", self.SpawnTemplatePrefix, PointVec3 } ) -- If RandomizePosition, then Randomize the formation in the zone band, keeping the template. @@ -2830,7 +2830,7 @@ end function SPAWN:SpawnFromVec3( Vec3, SpawnIndex ) --self:F( { self.SpawnTemplatePrefix, Vec3, SpawnIndex } ) - local PointVec3 = POINT_VEC3:NewFromVec3( Vec3 ) + local PointVec3 = COORDINATE:NewFromVec3( Vec3 ) --self:T2( PointVec3 ) if SpawnIndex then @@ -2906,7 +2906,7 @@ end -- Note that each point in the route assigned to the spawning group is reset to the point of the spawn. -- You can use the returned group to further define the route to be followed. -- @param #SPAWN self --- @param Core.Point#POINT_VEC3 PointVec3 The PointVec3 coordinates where to spawn the group. +-- @param Core.Point#COORDINATE PointVec3 The COORDINATE coordinates where to spawn the group. -- @param #number SpawnIndex (optional) The index which group to spawn within the given zone. -- @return Wrapper.Group#GROUP that was spawned or #nil if nothing was spawned. -- @usage @@ -2954,12 +2954,12 @@ function SPAWN:SpawnFromVec2( Vec2, MinHeight, MaxHeight, SpawnIndex ) return self:SpawnFromVec3( { x = Vec2.x, y = Height, z = Vec2.y }, SpawnIndex ) -- y can be nil. In this case, spawn on the ground for vehicles, and in the template altitude for air. end ---- Will spawn a group from a POINT_VEC2 in 3D space. +--- Will spawn a group from a COORDINATE in 3D space. -- This method is mostly advisable to be used if you want to simulate spawning groups on the ground from air units, like vehicles. -- Note that each point in the route assigned to the spawning group is reset to the point of the spawn. -- You can use the returned group to further define the route to be followed. -- @param #SPAWN self --- @param Core.Point#POINT_VEC2 PointVec2 The PointVec2 coordinates where to spawn the group. +-- @param Core.Point#COORDINATE PointVec2 The coordinates where to spawn the group. -- @param #number MinHeight (optional) The minimum height to spawn an airborne group into the zone. -- @param #number MaxHeight (optional) The maximum height to spawn an airborne group into the zone. -- @param #number SpawnIndex (optional) The index which group to spawn within the given zone. diff --git a/Moose Development/Moose/Core/SpawnStatic.lua b/Moose Development/Moose/Core/SpawnStatic.lua index d68a1426d..9feb2eb90 100644 --- a/Moose Development/Moose/Core/SpawnStatic.lua +++ b/Moose Development/Moose/Core/SpawnStatic.lua @@ -1,599 +1,130 @@ ---- **Core** - Spawn statics. --- --- === --- --- ## Features: --- --- * Spawn new statics from a static already defined in the mission editor. --- * Spawn new statics from a given template. --- * Spawn new statics from a given type. --- * Spawn with a custom heading and location. --- * Spawn within a zone. --- * Spawn statics linked to units, .e.g on aircraft carriers. --- --- === --- --- # Demo Missions --- --- ## [SPAWNSTATIC Demo Missions](https://github.com/FlightControl-Master/MOOSE_Demos/tree/master/Core/SpawnStatic) --- --- --- === --- --- # YouTube Channel --- --- ## No videos yet! --- --- === --- --- ### Author: **FlightControl** --- ### Contributions: **funkyfranky** --- --- === --- --- @module Core.SpawnStatic --- @image Core_Spawnstatic.JPG ---- @type SPAWNSTATIC --- @field #string SpawnTemplatePrefix Name of the template group. --- @field #number CountryID Country ID. --- @field #number CoalitionID Coalition ID. --- @field #number CategoryID Category ID. --- @field #number SpawnIndex Running number increased with each new Spawn. --- @field Wrapper.Unit#UNIT InitLinkUnit The unit the static is linked to. --- @field #number InitOffsetX Link offset X coordinate. --- @field #number InitOffsetY Link offset Y coordinate. --- @field #number InitOffsetAngle Link offset angle in degrees. --- @field #number InitStaticHeading Heading of the static. --- @field #string InitStaticLivery Livery for aircraft. --- @field #string InitStaticShape Shape of the static. --- @field #string InitStaticType Type of the static. --- @field #string InitStaticCategory Categrory of the static. --- @field #string InitStaticName Name of the static. --- @field Core.Point#COORDINATE InitStaticCoordinate Coordinate where to spawn the static. --- @field #boolean InitStaticDead Set static to be dead if true. --- @field #boolean InitStaticCargo If true, static can act as cargo. --- @field #number InitStaticCargoMass Mass of cargo in kg. --- @extends Core.Base#BASE +--[[ +local CA_SET=SET_CLIENT:New():HandleCASlots():FilterCoalitions("blue"):FilterStart() - ---- Allows to spawn dynamically new @{Wrapper.Static}s into your mission. --- --- Through creating a copy of an existing static object template as defined in the Mission Editor (ME), SPAWNSTATIC can retireve the properties of the defined static object template (like type, category etc), --- and "copy" these properties to create a new static object and place it at the desired coordinate. --- --- New spawned @{Wrapper.Static}s get **the same name** as the name of the template Static, or gets the given name when a new name is provided at the Spawn method. --- By default, spawned @{Wrapper.Static}s will follow a naming convention at run-time: --- --- * Spawned @{Wrapper.Static}s will have the name _StaticName_#_nnn_, where _StaticName_ is the name of the **Template Static**, and _nnn_ is a **counter from 0 to 99999**. --- --- # SPAWNSTATIC Constructors --- --- Firstly, we need to create a SPAWNSTATIC object that will be used to spawn new statics into the mission. There are three ways to do this. --- --- ## Use another Static --- --- A new SPAWNSTATIC object can be created using another static by the @{#SPAWNSTATIC.NewFromStatic}() function. All parameters such as position, heading, country will be initialized --- from the static. --- --- ## From a Template --- --- A SPAWNSTATIC object can also be created from a template table using the @{#SPAWNSTATIC.NewFromTemplate}(SpawnTemplate, CountryID) function. All parameters are taken from the template. --- --- ## From a Type --- --- A very basic method is to create a SPAWNSTATIC object by just giving the type of the static. All parameters must be initialized from the InitXYZ functions described below. Otherwise default values --- are used. For example, if no spawn coordinate is given, the static will be created at the origin of the map. --- --- # Setting Parameters --- --- Parameters such as the spawn position, heading, country etc. can be set via :Init*XYZ* functions. Note that these functions must be given before the actual spawn command! --- --- * @{#SPAWNSTATIC.InitCoordinate}(Coordinate) Sets the coordinate where the static is spawned. Statics are always spawnd on the ground. --- * @{#SPAWNSTATIC.InitHeading}(Heading) sets the orientation of the static. --- * @{#SPAWNSTATIC.InitLivery}(LiveryName) sets the livery of the static. Not all statics support this. --- * @{#SPAWNSTATIC.InitType}(StaticType) sets the type of the static. --- * @{#SPAWNSTATIC.InitShape}(StaticType) sets the shape of the static. Not all statics have this parameter. --- * @{#SPAWNSTATIC.InitNamePrefix}(NamePrefix) sets the name prefix of the spawned statics. --- * @{#SPAWNSTATIC.InitCountry}(CountryID) sets the country and therefore the coalition of the spawned statics. --- * @{#SPAWNSTATIC.InitLinkToUnit}(Unit, OffsetX, OffsetY, OffsetAngle) links the static to a unit, e.g. to an aircraft carrier. --- --- # Spawning the Statics --- --- Once the SPAWNSTATIC object is created and parameters are initialized, the spawn command can be given. There are different methods where some can be used to directly set parameters --- such as position and heading. --- --- * @{#SPAWNSTATIC.Spawn}(Heading, NewName) spawns the static with the set parameters. Optionally, heading and name can be given. The name **must be unique**! --- * @{#SPAWNSTATIC.SpawnFromCoordinate}(Coordinate, Heading, NewName) spawn the static at the given coordinate. Optionally, heading and name can be given. The name **must be unique**! --- * @{#SPAWNSTATIC.SpawnFromPointVec2}(PointVec2, Heading, NewName) spawns the static at a POINT_VEC2 coordinate. Optionally, heading and name can be given. The name **must be unique**! --- * @{#SPAWNSTATIC.SpawnFromZone}(Zone, Heading, NewName) spawns the static at the center of a @{Core.Zone}. Optionally, heading and name can be given. The name **must be unique**! --- --- @field #SPAWNSTATIC SPAWNSTATIC --- -SPAWNSTATIC = { - ClassName = "SPAWNSTATIC", - SpawnIndex = 0, -} - ---- Static template table data. --- @type SPAWNSTATIC.TemplateData --- @field #string name Name of the static. --- @field #string type Type of the static. --- @field #string category Category of the static. --- @field #number x X-coordinate of the static. --- @field #number y Y-coordinate of teh static. --- @field #number heading Heading in rad. --- @field #boolean dead Static is dead if true. --- @field #string livery_id Livery name. --- @field #number unitId Unit ID. --- @field #number groupId Group ID. --- @field #table offsets Offset parameters when linked to a unit. --- @field #number mass Cargo mass in kg. --- @field #boolean canCargo Static can be a cargo. - ---- Creates the main object to spawn a @{Wrapper.Static} defined in the mission editor (ME). --- @param #SPAWNSTATIC self --- @param #string SpawnTemplateName Name of the static object in the ME. Each new static will have the name starting with this prefix. --- @param DCS#country.id SpawnCountryID (Optional) The ID of the country. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:NewFromStatic(SpawnTemplateName, SpawnCountryID) - - local self = BASE:Inherit( self, BASE:New() ) -- #SPAWNSTATIC - - local TemplateStatic, CoalitionID, CategoryID, CountryID = _DATABASE:GetStaticGroupTemplate(SpawnTemplateName) - - if TemplateStatic then - self.SpawnTemplatePrefix = SpawnTemplateName - self.TemplateStaticUnit = UTILS.DeepCopy(TemplateStatic.units[1]) - self.CountryID = SpawnCountryID or CountryID - self.CategoryID = CategoryID - self.CoalitionID = CoalitionID - self.SpawnIndex = 0 - else - error( "SPAWNSTATIC:New: There is no static declared in the mission editor with SpawnTemplatePrefix = '" .. tostring(SpawnTemplateName) .. "'" ) +function CA_SET:OnAfterAdded(From,Event,To,ObjectName,Object) + MESSAGE:New("Player joined CA Slot: "..ObjectName,10,"CA"):ToAll() + local client = Object -- Wrapper.Client#CLIENT + local group = client:GetGroup() + if group then + MENU_GROUP:New(group,"Test CA") end - - self:SetEventPriority( 5 ) - - return self end ---- Creates the main object to spawn a @{Wrapper.Static} given a template table. --- @param #SPAWNSTATIC self --- @param #table SpawnTemplate Template used for spawning. --- @param DCS#country.id CountryID The ID of the country. Default `country.id.USA`. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:NewFromTemplate(SpawnTemplate, CountryID) - - local self = BASE:Inherit( self, BASE:New() ) -- #SPAWNSTATIC - - self.TemplateStaticUnit = UTILS.DeepCopy(SpawnTemplate) - self.SpawnTemplatePrefix = SpawnTemplate.name - self.CountryID = CountryID or country.id.USA - - return self -end - ---- Creates the main object to spawn a @{Wrapper.Static} from a given type. --- NOTE that you have to init many other parameters as spawn coordinate etc. --- @param #SPAWNSTATIC self --- @param #string StaticType Type of the static. --- @param #string StaticCategory Category of the static, e.g. "Planes". --- @param DCS#country.id CountryID The ID of the country. Default `country.id.USA`. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:NewFromType(StaticType, StaticCategory, CountryID) - - local self = BASE:Inherit( self, BASE:New() ) -- #SPAWNSTATIC - - self.InitStaticType=StaticType - self.InitStaticCategory=StaticCategory - self.CountryID=CountryID or country.id.USA - self.SpawnTemplatePrefix=self.InitStaticType - self.TemplateStaticUnit = {} - - self.InitStaticCoordinate=COORDINATE:New(0, 0, 0) - self.InitStaticHeading=0 - - return self -end - ---- (Internal/Cargo) Init the resource table for STATIC object that should be spawned containing storage objects. --- NOTE that you have to init many other parameters as the resources. --- @param #SPAWNSTATIC self --- @param #number CombinedWeight The weight this cargo object should have (some have fixed weights!), defaults to 1kg. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:_InitResourceTable(CombinedWeight) - if not self.TemplateStaticUnit.resourcePayload then - self.TemplateStaticUnit.resourcePayload = { - ["weapons"] = {}, - ["aircrafts"] = {}, - ["gasoline"] = 0, - ["diesel"] = 0, - ["methanol_mixture"] = 0, - ["jet_fuel"] = 0, - } - end - self:InitCargo(true) - self:InitCargoMass(CombinedWeight or 1) - return self -end - ---- (User/Cargo) Add to resource table for STATIC object that should be spawned containing storage objects. Inits the object table if necessary and sets it to be cargo for helicopters. --- @param #SPAWNSTATIC self --- @param #string Type Type of cargo. Known types are: STORAGE.Type.WEAPONS, STORAGE.Type.LIQUIDS, STORAGE.Type.AIRCRAFT. Liquids are fuel. --- @param #string Name Name of the cargo type. Liquids can be STORAGE.LiquidName.JETFUEL, STORAGE.LiquidName.GASOLINE, STORAGE.LiquidName.MW50 and STORAGE.LiquidName.DIESEL. The currently available weapon items are available in the `ENUMS.Storage.weapons`, e.g. `ENUMS.Storage.weapons.bombs.Mk_82Y`. Aircraft go by their typename. --- @param #number Amount of tons (liquids) or number (everything else) to add. --- @param #number CombinedWeight Combined weight to be set to this static cargo object. NOTE - some static cargo objects have fixed weights! --- @return #SPAWNSTATIC self -function SPAWNSTATIC:AddCargoResource(Type,Name,Amount,CombinedWeight) - if not self.TemplateStaticUnit.resourcePayload then - self:_InitResourceTable(CombinedWeight) - end - if Type == STORAGE.Type.LIQUIDS and type(Name) == "string" then - self.TemplateStaticUnit.resourcePayload[Name] = Amount - else - self.TemplateStaticUnit.resourcePayload[Type] = { - [Name] = { - ["amount"] = Amount, - } - } - end - UTILS.PrintTableToLog(self.TemplateStaticUnit) - return self -end - ---- (User/Cargo) Resets resource table to zero for STATIC object that should be spawned containing storage objects. Inits the object table if necessary and sets it to be cargo for helicopters. --- Handy if you spawn from cargo statics which have resources already set. --- @param #SPAWNSTATIC self --- @return #SPAWNSTATIC self -function SPAWNSTATIC:ResetCargoResources() - self.TemplateStaticUnit.resourcePayload = nil - self:_InitResourceTable() - return self -end - ---- Initialize heading of the spawned static. --- @param #SPAWNSTATIC self --- @param Core.Point#COORDINATE Coordinate Position where the static is spawned. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitCoordinate(Coordinate) - self.InitStaticCoordinate=Coordinate - return self -end - ---- Initialize heading of the spawned static. --- @param #SPAWNSTATIC self --- @param #number Heading The heading in degrees. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitHeading(Heading) - self.InitStaticHeading=Heading - return self -end - ---- Initialize livery of the spawned static. --- @param #SPAWNSTATIC self --- @param #string LiveryName Name of the livery to use. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitLivery(LiveryName) - self.InitStaticLivery=LiveryName - return self -end - ---- Initialize type of the spawned static. --- @param #SPAWNSTATIC self --- @param #string StaticType Type of the static, e.g. "FA-18C_hornet". --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitType(StaticType) - self.InitStaticType=StaticType - return self -end - ---- Initialize shape of the spawned static. Required by some but not all statics. --- @param #SPAWNSTATIC self --- @param #string StaticShape Shape of the static, e.g. "carrier_tech_USA". --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitShape(StaticShape) - self.InitStaticShape=StaticShape - return self -end - ---- Initialize parameters for spawning FARPs. --- @param #SPAWNSTATIC self --- @param #number CallsignID Callsign ID. Default 1 (="London"). --- @param #number Frequency Frequency in MHz. Default 127.5 MHz. --- @param #number Modulation Modulation 0=AM, 1=FM. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitFARP(CallsignID, Frequency, Modulation) - self.InitFarp=true - self.InitFarpCallsignID=CallsignID or 1 - self.InitFarpFreq=Frequency or 127.5 - self.InitFarpModu=Modulation or 0 - return self -end - ---- Initialize cargo mass. --- @param #SPAWNSTATIC self --- @param #number Mass Mass of the cargo in kg. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitCargoMass(Mass) - self.InitStaticCargoMass=Mass - return self -end - ---- Initialize as cargo. --- @param #SPAWNSTATIC self --- @param #boolean IsCargo If true, this static can act as cargo. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitCargo(IsCargo) - self.InitStaticCargo=IsCargo - return self -end - ---- Initialize as dead. --- @param #SPAWNSTATIC self --- @param #boolean IsDead If true, this static is dead. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitDead(IsDead) - self.InitStaticDead=IsDead - return self -end - ---- Initialize country of the spawned static. This determines the category. --- @param #SPAWNSTATIC self --- @param #string CountryID The country ID, e.g. country.id.USA. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitCountry(CountryID) - self.CountryID=CountryID - return self -end - ---- Initialize name prefix statics get. This will be appended by "#0001", "#0002" etc. --- @param #SPAWNSTATIC self --- @param #string NamePrefix Name prefix of statics spawned. Will append #0001, etc to the name. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitNamePrefix(NamePrefix) - self.SpawnTemplatePrefix=NamePrefix - return self -end - ---- Init link to a unit. --- @param #SPAWNSTATIC self --- @param Wrapper.Unit#UNIT Unit The unit to which the static is linked. --- @param #number OffsetX Offset in X. --- @param #number OffsetY Offset in Y. --- @param #number OffsetAngle Offset angle in degrees. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:InitLinkToUnit(Unit, OffsetX, OffsetY, OffsetAngle) - - self.InitLinkUnit=Unit - self.InitOffsetX=OffsetX or 0 - self.InitOffsetY=OffsetY or 0 - self.InitOffsetAngle=OffsetAngle or 0 - - return self -end - ---- Allows to place a CallFunction hook when a new static spawns. --- The provided method will be called when a new group is spawned, including its given parameters. --- The first parameter of the SpawnFunction is the @{Wrapper.Static#STATIC} that was spawned. --- @param #SPAWNSTATIC self --- @param #function SpawnCallBackFunction The function to be called when a group spawns. --- @param SpawnFunctionArguments A random amount of arguments to be provided to the function when the group spawns. --- @return #SPAWNSTATIC self -function SPAWNSTATIC:OnSpawnStatic( SpawnCallBackFunction, ... ) - self:F( "OnSpawnStatic" ) - - self.SpawnFunctionHook = SpawnCallBackFunction - self.SpawnFunctionArguments = {} - if arg then - self.SpawnFunctionArguments = arg - end - - return self -end - ---- Spawn a new STATIC object. --- @param #SPAWNSTATIC self --- @param #number Heading (Optional) The heading of the static, which is a number in degrees from 0 to 360. Default is the heading of the template. --- @param #string NewName (Optional) The name of the new static. --- @return Wrapper.Static#STATIC The static spawned. -function SPAWNSTATIC:Spawn(Heading, NewName) - - if Heading then - self.InitStaticHeading=Heading - end - - if NewName then - self.InitStaticName=NewName - end - - return self:_SpawnStatic(self.TemplateStaticUnit, self.CountryID) - -end - ---- Creates a new @{Wrapper.Static} from a POINT_VEC2. --- @param #SPAWNSTATIC self --- @param Core.Point#POINT_VEC2 PointVec2 The 2D coordinate where to spawn the static. --- @param #number Heading The heading of the static, which is a number in degrees from 0 to 360. --- @param #string NewName (Optional) The name of the new static. --- @return Wrapper.Static#STATIC The static spawned. -function SPAWNSTATIC:SpawnFromPointVec2(PointVec2, Heading, NewName) - - local vec2={x=PointVec2:GetX(), y=PointVec2:GetY()} - - local Coordinate=COORDINATE:NewFromVec2(vec2) - - return self:SpawnFromCoordinate(Coordinate, Heading, NewName) -end - - ---- Creates a new @{Wrapper.Static} from a COORDINATE. --- @param #SPAWNSTATIC self --- @param Core.Point#COORDINATE Coordinate The 3D coordinate where to spawn the static. --- @param #number Heading (Optional) Heading The heading of the static in degrees. Default is 0 degrees. --- @param #string NewName (Optional) The name of the new static. --- @return Wrapper.Static#STATIC The spawned STATIC object. -function SPAWNSTATIC:SpawnFromCoordinate(Coordinate, Heading, NewName) - - -- Set up coordinate. - self.InitStaticCoordinate=Coordinate - - if Heading then - self.InitStaticHeading=Heading - end - - if NewName then - self.InitStaticName=NewName - end - - return self:_SpawnStatic(self.TemplateStaticUnit, self.CountryID) -end - - ---- Creates a new @{Wrapper.Static} from a @{Core.Zone}. --- @param #SPAWNSTATIC self --- @param Core.Zone#ZONE_BASE Zone The Zone where to spawn the static. --- @param #number Heading (Optional)The heading of the static in degrees. Default is the heading of the template. --- @param #string NewName (Optional) The name of the new static. --- @return Wrapper.Static#STATIC The static spawned. -function SPAWNSTATIC:SpawnFromZone(Zone, Heading, NewName) - - -- Spawn the new static at the center of the zone. - local Static = self:SpawnFromPointVec2( Zone:GetPointVec2(), Heading, NewName ) - - return Static -end - ---- Spawns a new static using a given template. Additionally, the country ID needs to be specified, which also determines the coalition of the spawned static. --- @param #SPAWNSTATIC self --- @param #SPAWNSTATIC.TemplateData Template Spawn unit template. --- @param #number CountryID The country ID. --- @return Wrapper.Static#STATIC The static spawned. -function SPAWNSTATIC:_SpawnStatic(Template, CountryID) - - Template=Template or {} - - local CountryID=CountryID or self.CountryID - - if self.InitStaticType then - Template.type=self.InitStaticType - end - - if self.InitStaticCategory then - Template.category=self.InitStaticCategory - end - - if self.InitStaticCoordinate then - Template.x = self.InitStaticCoordinate.x - Template.y = self.InitStaticCoordinate.z - Template.alt = self.InitStaticCoordinate.y - end - - if self.InitStaticHeading then - Template.heading = math.rad(self.InitStaticHeading) - end - - if self.InitStaticShape then - Template.shape_name=self.InitStaticShape - end - - if self.InitStaticLivery then - Template.livery_id=self.InitStaticLivery - end - - if self.InitStaticDead~=nil then - Template.dead=self.InitStaticDead - end - - if self.InitStaticCargo~=nil then - Template.canCargo=self.InitStaticCargo - end - - if self.InitStaticCargoMass~=nil then - Template.mass=self.InitStaticCargoMass - end - - if self.InitLinkUnit then - Template.linkUnit=self.InitLinkUnit:GetID() - Template.linkOffset=true - Template.offsets={} - Template.offsets.y=self.InitOffsetY - Template.offsets.x=self.InitOffsetX - Template.offsets.angle=self.InitOffsetAngle and math.rad(self.InitOffsetAngle) or 0 - end - - if self.InitFarp then - Template.heliport_callsign_id = self.InitFarpCallsignID - Template.heliport_frequency = self.InitFarpFreq - Template.heliport_modulation = self.InitFarpModu - Template.unitId=nil - end - - -- Increase spawn index counter. - self.SpawnIndex = self.SpawnIndex + 1 - - -- Name of the spawned static. - Template.name = self.InitStaticName or string.format("%s#%05d", self.SpawnTemplatePrefix, self.SpawnIndex) - - -- Add static to the game. - local Static=nil --DCS#StaticObject - - if self.InitFarp then - - local TemplateGroup={} - TemplateGroup.units={} - TemplateGroup.units[1]=Template - - TemplateGroup.visible=true - TemplateGroup.hidden=false - TemplateGroup.x=Template.x - TemplateGroup.y=Template.y - TemplateGroup.name=Template.name - - self:T("Spawning FARP") - self:T({Template=Template}) - self:T({TemplateGroup=TemplateGroup}) - - -- ED's dirty way to spawn FARPS. - Static=coalition.addGroup(CountryID, -1, TemplateGroup) - - -- Currently DCS 2.8 does not trigger birth events if FARPS are spawned! - -- We create such an event. The airbase is registered in Core.Event - local Event = { - id = EVENTS.Birth, - time = timer.getTime(), - initiator = Static - } - -- Create BIRTH event. - world.onEvent(Event) - - else - self:T("Spawning Static") - self:T2({Template=Template}) - Static=coalition.addStaticObject(CountryID, Template) - - if Static then - self:T(string.format("Succesfully spawned static object \"%s\" ID=%d", Static:getName(), Static:getID())) - --[[ - local static=StaticObject.getByName(Static:getName()) - if static then - env.info(string.format("FF got static from StaticObject.getByName")) - else - env.error(string.format("FF error did NOT get static from StaticObject.getByName")) - end ]] - else - self:E(string.format("ERROR: DCS static object \"%s\" is nil!", tostring(Template.name))) - end + local e = {} + function e:onEvent(event) + local m = {} + m[#m+1] = "Event ID: " + m[#m+1] = event.id + if event.initiator then + m[#m+1] = "\nInitiator : " + m[#m+1] = event.initiator:getName() + end + if event.weapon then + m[#m+1] = "\nWeapon : " + m[#m+1] = event.weapon :getTypeName() + end + if event.target then + m[#m+1] = "\nTarget : " + m[#m+1] = event.target :getName() + end + env.info(table.concat(m)) end + world.addEventHandler(e) - -- Add and register the new static. - local mystatic=_DATABASE:AddStatic(Template.name) + local recce = PLAYERRECCE:New(Name,Coalition,PlayerSet) - -- If there is a SpawnFunction hook defined, call it. - if self.SpawnFunctionHook then - -- delay calling this for .3 seconds so that it hopefully comes after the BIRTH event of the group. - self:ScheduleOnce(0.3, self.SpawnFunctionHook, mystatic, unpack(self.SpawnFunctionArguments)) - end + + US_Patrol_Plane = SPAWN + :New("Bird Dog") + :InitLimit(1,4) + :OnSpawnGroup(function ( SpawnedGroup ) + -- Setup AI Patrol + PatrolZone = ZONE:New("Conflict Zone Alpha") + EngageZone = ZONE:New("Conflict Zone Alpha") + EngageZone:Draw() + AICaszone = AI_CAS_ZONE:New(PatrolZone, 100, 1000, 100, 100, EngageZone, "RADIO") + AICaszone:SetControllable(SpawnedGroup) + --AICaszone:SetEngageRange(2000) + AICaszone:__Start(1) + end + ) + :SpawnScheduled(30, 0) + +--]] - return mystatic +local grp = GROUP:FindByName("IR Blinker") +grp:NewIRMarker(true,90) + +function DestGroup() + if grp and grp:IsAlive() then + grp:Destroy() + end +end + +function DisableMarker() + if grp and grp:IsAlive() then + grp:DisableIRMarker() + end +end + +function EnableMarker() + if grp and grp:IsAlive() then + grp:EnableIRMarker() + end +end + +function RespGroup() + if grp and not grp:IsAlive() then + grp:Respawn() + end +end + +local mymsrs = MSRS:New(nil,243,0) +local jammersound=SOUNDFILE:New("beacon.ogg", "C:\\Users\\post\\Saved Games\\DCS\\Missions\\", 2, true) +function Play() + mymsrs:PlaySoundFile(jammersound) +end + +local topmenu = MENU_COALITION:New(coalition.side.BLUE,"IR Marker Test") +local startmenu = MENU_COALITION_COMMAND:New(coalition.side.BLUE,"Enable IR",topmenu,EnableMarker) +local stopmenu = MENU_COALITION_COMMAND:New(coalition.side.BLUE,"Disable IR",topmenu,DisableMarker) +local destmenu = MENU_COALITION_COMMAND:New(coalition.side.BLUE,"Destroy Group",topmenu,DestGroup) +local respmenu = MENU_COALITION_COMMAND:New(coalition.side.BLUE,"Respawn Group",topmenu,RespGroup) +local respmenu = MENU_COALITION_COMMAND:New(coalition.side.BLUE,"Play Sound",topmenu,Play) + +local testzone = ZONE:New("Testzone") +testzone:Trigger(grp) + +function testzone:OnAfterObjectDead(From,Event,To,Controllable) + MESSAGE:New("Object Dead",15,"Test"):ToAll():ToLog() +end + +function testzone:OnAfterZoneEmpty(From,Event,To) + MESSAGE:New("Zone Empty",15,"Test"):ToAll():ToLog() +end + +local BlueBorder = ZONE:New("Blue Border") +local RedBorder = ZONE:New("Red Border") +local Conflict = ZONE:New("Conflict") + +BlueBorder:DrawZone(-1,{0,0,1},1,{0,0,1},.2,1,true) +RedBorder:DrawZone(-1,{1,0,0},1,{1,0,0},.2,1,true) +Conflict:DrawZone(-1,{1,254/255,1/33},1,{1,254/255,1/33},.2,1,true) + +BASE:TraceOn() +BASE:TraceClass("SHORAD") + +local mymantis = MANTIS:New("Red Defense","Red SAM","Red EWR",hq,"red",true,awacs,true) +mymantis:AddZones({RedBorder},{BlueBorder},{Conflict}) +mymantis.verbose = true +mymantis.debug = true +mymantis:Start() + +local myctld = CTLD:New() + +function myctld:OnAfterCratesDropped(From,Event,To,Group,Unit,Cargotable) + if Unit and string.find(Unit:GetTypeName(),"Mosquito",1,true) then + myctld:_BuildCrates(Group,Unit,true) + end end diff --git a/Moose Development/Moose/Core/Zone.lua b/Moose Development/Moose/Core/Zone.lua index 4e97f195b..0ad088d6d 100644 --- a/Moose Development/Moose/Core/Zone.lua +++ b/Moose Development/Moose/Core/Zone.lua @@ -213,7 +213,7 @@ end --- Returns if a PointVec3 is within the zone. -- @param #ZONE_BASE self --- @param Core.Point#POINT_VEC3 PointVec3 The PointVec3 to test. +-- @param Core.Point#COORDINATE PointVec3 The PointVec3 to test. -- @return #boolean true if the PointVec3 is within the zone. function ZONE_BASE:IsPointVec3InZone( PointVec3 ) local InZone = self:IsPointVec2InZone( PointVec3 ) @@ -227,16 +227,16 @@ function ZONE_BASE:GetVec2() return nil end ---- Returns a @{Core.Point#POINT_VEC2} of the zone. +--- Returns a @{Core.Point#COORDINATE} of the zone. -- @param #ZONE_BASE self -- @param DCS#Distance Height The height to add to the land height where the center of the zone is located. --- @return Core.Point#POINT_VEC2 The PointVec2 of the zone. +-- @return Core.Point#COORDINATE The COORDINATE of the zone. function ZONE_BASE:GetPointVec2() --self:F2( self.ZoneName ) local Vec2 = self:GetVec2() - local PointVec2 = POINT_VEC2:NewFromVec2( Vec2 ) + local PointVec2 = COORDINATE:NewFromVec2( Vec2 ) --self:T2( { PointVec2 } ) @@ -261,16 +261,16 @@ function ZONE_BASE:GetVec3( Height ) return Vec3 end ---- Returns a @{Core.Point#POINT_VEC3} of the zone. +--- Returns a @{Core.Point#COORDINATE} of the zone. -- @param #ZONE_BASE self -- @param DCS#Distance Height The height to add to the land height where the center of the zone is located. --- @return Core.Point#POINT_VEC3 The PointVec3 of the zone. +-- @return Core.Point#COORDINATE The PointVec3 of the zone. function ZONE_BASE:GetPointVec3( Height ) --self:F2( self.ZoneName ) local Vec3 = self:GetVec3( Height ) - local PointVec3 = POINT_VEC3:NewFromVec3( Vec3 ) + local PointVec3 = COORDINATE:NewFromVec3( Vec3 ) --self:T2( { PointVec3 } ) @@ -330,16 +330,16 @@ function ZONE_BASE:GetRandomVec2() return nil end ---- Define a random @{Core.Point#POINT_VEC2} within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. +--- Define a random @{Core.Point#COORDINATE} within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. -- @param #ZONE_BASE self --- @return Core.Point#POINT_VEC2 The PointVec2 coordinates. +-- @return Core.Point#COORDINATE The COORDINATE coordinates. function ZONE_BASE:GetRandomPointVec2() return nil end ---- Define a random @{Core.Point#POINT_VEC3} within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec3 table. +--- Define a random @{Core.Point#COORDINATE} within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec3 table. -- @param #ZONE_BASE self --- @return Core.Point#POINT_VEC3 The PointVec3 coordinates. +-- @return Core.Point#COORDINATE The COORDINATE coordinates. function ZONE_BASE:GetRandomPointVec3() return nil end @@ -814,8 +814,8 @@ end -- Various functions exist to find random points within the zone. -- -- * @{#ZONE_RADIUS.GetRandomVec2}(): Gets a random 2D point in the zone. --- * @{#ZONE_RADIUS.GetRandomPointVec2}(): Gets a @{Core.Point#POINT_VEC2} object representing a random 2D point in the zone. --- * @{#ZONE_RADIUS.GetRandomPointVec3}(): Gets a @{Core.Point#POINT_VEC3} object representing a random 3D point in the zone. Note that the height of the point is at landheight. +-- * @{#ZONE_RADIUS.GetRandomPointVec2}(): Gets a @{Core.Point#COORDINATE} object representing a random 2D point in the zone. +-- * @{#ZONE_RADIUS.GetRandomPointVec3}(): Gets a @{Core.Point#COORDINATE} object representing a random 3D point in the zone. Note that the height of the point is at landheight. -- -- ## Draw zone -- @@ -1010,7 +1010,7 @@ function ZONE_RADIUS:SmokeZone( SmokeColor, Points, AddHeight, AngleOffset ) local Radial = ( Angle + AngleOffset ) * RadialBase / 360 Point.x = Vec2.x + math.cos( Radial ) * self:GetRadius() Point.y = Vec2.y + math.sin( Radial ) * self:GetRadius() - POINT_VEC2:New( Point.x, Point.y, AddHeight ):Smoke( SmokeColor ) + COORDINATE:New( Point.x, AddHeight, Point.y ):Smoke( SmokeColor ) end return self @@ -1040,7 +1040,7 @@ function ZONE_RADIUS:FlareZone( FlareColor, Points, Azimuth, AddHeight ) local Radial = Angle * RadialBase / 360 Point.x = Vec2.x + math.cos( Radial ) * self:GetRadius() Point.y = Vec2.y + math.sin( Radial ) * self:GetRadius() - POINT_VEC2:New( Point.x, Point.y, AddHeight ):Flare( FlareColor, Azimuth ) + COORDINATE:New( Point.x, AddHeight, Point.y ):Flare( FlareColor, Azimuth ) end return self @@ -1561,15 +1561,15 @@ function ZONE_RADIUS:GetRandomVec2(inner, outer, surfacetypes) return point end ---- Returns a @{Core.Point#POINT_VEC2} object reflecting a random 2D location within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. +--- Returns a @{Core.Point#COORDINATE} object reflecting a random 2D location within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. -- @param #ZONE_RADIUS self -- @param #number inner (optional) Minimal distance from the center of the zone. Default is 0. -- @param #number outer (optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone. --- @return Core.Point#POINT_VEC2 The @{Core.Point#POINT_VEC2} object reflecting the random 3D location within the zone. +-- @return Core.Point#COORDINATE The @{Core.Point#COORDINATE} object reflecting the random 3D location within the zone. function ZONE_RADIUS:GetRandomPointVec2( inner, outer ) --self:F( self.ZoneName, inner, outer ) - local PointVec2 = POINT_VEC2:NewFromVec2( self:GetRandomVec2( inner, outer ) ) + local PointVec2 = COORDINATE:NewFromVec2( self:GetRandomVec2( inner, outer ) ) --self:T3( { PointVec2 } ) @@ -1592,15 +1592,15 @@ function ZONE_RADIUS:GetRandomVec3( inner, outer ) end ---- Returns a @{Core.Point#POINT_VEC3} object reflecting a random 3D location within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec3 table. +--- Returns a @{Core.Point#COORDINATE} object reflecting a random 3D location within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec3 table. -- @param #ZONE_RADIUS self -- @param #number inner (optional) Minimal distance from the center of the zone. Default is 0. -- @param #number outer (optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone. --- @return Core.Point#POINT_VEC3 The @{Core.Point#POINT_VEC3} object reflecting the random 3D location within the zone. +-- @return Core.Point#COORDINATE The @{Core.Point#COORDINATE} object reflecting the random 3D location within the zone. function ZONE_RADIUS:GetRandomPointVec3( inner, outer ) --self:F( self.ZoneName, inner, outer ) - local PointVec3 = POINT_VEC3:NewFromVec2( self:GetRandomVec2( inner, outer ) ) + local PointVec3 = COORDINATE:NewFromVec2( self:GetRandomVec2( inner, outer ) ) --self:T3( { PointVec3 } ) @@ -2036,15 +2036,15 @@ function ZONE_GROUP:GetRandomVec2() return Point end ---- Returns a @{Core.Point#POINT_VEC2} object reflecting a random 2D location within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. +--- Returns a @{Core.Point#COORDINATE} object reflecting a random 2D location within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. -- @param #ZONE_GROUP self -- @param #number inner (optional) Minimal distance from the center of the zone. Default is 0. -- @param #number outer (optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone. --- @return Core.Point#POINT_VEC2 The @{Core.Point#POINT_VEC2} object reflecting the random 3D location within the zone. +-- @return Core.Point#COORDINATE The @{Core.Point#COORDINATE} object reflecting the random 3D location within the zone. function ZONE_GROUP:GetRandomPointVec2( inner, outer ) --self:F( self.ZoneName, inner, outer ) - local PointVec2 = POINT_VEC2:NewFromVec2( self:GetRandomVec2() ) + local PointVec2 = COORDINATE:NewFromVec2( self:GetRandomVec2() ) --self:T3( { PointVec2 } ) @@ -2192,8 +2192,8 @@ end -- Various functions exist to find random points within the zone. -- -- * @{#ZONE_POLYGON_BASE.GetRandomVec2}(): Gets a random 2D point in the zone. --- * @{#ZONE_POLYGON_BASE.GetRandomPointVec2}(): Return a @{Core.Point#POINT_VEC2} object representing a random 2D point within the zone. --- * @{#ZONE_POLYGON_BASE.GetRandomPointVec3}(): Return a @{Core.Point#POINT_VEC3} object representing a random 3D point at landheight within the zone. +-- * @{#ZONE_POLYGON_BASE.GetRandomPointVec2}(): Return a @{Core.Point#COORDINATE} object representing a random 2D point within the zone. +-- * @{#ZONE_POLYGON_BASE.GetRandomPointVec3}(): Return a @{Core.Point#COORDINATE} object representing a random 3D point at landheight within the zone. -- -- ## Draw zone -- @@ -2769,7 +2769,7 @@ function ZONE_POLYGON_BASE:SmokeZone( SmokeColor, Segments ) for Segment = 0, Segments do -- We divide each line in 5 segments and smoke a point on the line. local PointX = self._.Polygon[i].x + ( Segment * DeltaX / Segments ) local PointY = self._.Polygon[i].y + ( Segment * DeltaY / Segments ) - POINT_VEC2:New( PointX, PointY ):Smoke( SmokeColor ) + COORDINATE:New( PointX, 0, PointY ):Smoke( SmokeColor ) end j = i i = i + 1 @@ -2804,7 +2804,7 @@ function ZONE_POLYGON_BASE:FlareZone( FlareColor, Segments, Azimuth, AddHeight ) for Segment = 0, Segments do -- We divide each line in 5 segments and smoke a point on the line. local PointX = self._.Polygon[i].x + ( Segment * DeltaX / Segments ) local PointY = self._.Polygon[i].y + ( Segment * DeltaY / Segments ) - POINT_VEC2:New( PointX, PointY, AddHeight ):Flare(FlareColor, Azimuth) + COORDINATE:New( PointX, AddHeight, PointY ):Flare(FlareColor, Azimuth) end j = i i = i + 1 @@ -2880,26 +2880,26 @@ function ZONE_POLYGON_BASE:GetRandomVec2() end end ---- Return a @{Core.Point#POINT_VEC2} object representing a random 2D point at landheight within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. +--- Return a @{Core.Point#COORDINATE} object representing a random 2D point at landheight within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. -- @param #ZONE_POLYGON_BASE self --- @return @{Core.Point#POINT_VEC2} +-- @return @{Core.Point#COORDINATE} function ZONE_POLYGON_BASE:GetRandomPointVec2() --self:F2() - local PointVec2 = POINT_VEC2:NewFromVec2( self:GetRandomVec2() ) + local PointVec2 = COORDINATE:NewFromVec2( self:GetRandomVec2() ) --self:T2( PointVec2 ) return PointVec2 end ---- Return a @{Core.Point#POINT_VEC3} object representing a random 3D point at landheight within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec3 table. +--- Return a @{Core.Point#COORDINATE} object representing a random 3D point at landheight within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec3 table. -- @param #ZONE_POLYGON_BASE self --- @return @{Core.Point#POINT_VEC3} +-- @return @{Core.Point#COORDINATE} function ZONE_POLYGON_BASE:GetRandomPointVec3() --self:F2() - local PointVec3 = POINT_VEC3:NewFromVec2( self:GetRandomVec2() ) + local PointVec3 = COORDINATE:NewFromVec2( self:GetRandomVec2() ) --self:T2( PointVec3 ) @@ -3931,18 +3931,18 @@ function ZONE_OVAL:GetRandomVec2() return {x=rx, y=ry} end ---- Define a random @{Core.Point#POINT_VEC2} within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. +--- Define a random @{Core.Point#COORDINATE} within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. -- @param #ZONE_OVAL self --- @return Core.Point#POINT_VEC2 The PointVec2 coordinates. +-- @return Core.Point#COORDINATE The COORDINATE coordinates. function ZONE_OVAL:GetRandomPointVec2() - return POINT_VEC2:NewFromVec2(self:GetRandomVec2()) + return COORDINATE:NewFromVec2(self:GetRandomVec2()) end ---- Define a random @{Core.Point#POINT_VEC2} within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec3 table. +--- Define a random @{Core.Point#COORDINATE} within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec3 table. -- @param #ZONE_OVAL self --- @return Core.Point#POINT_VEC2 The PointVec2 coordinates. +-- @return Core.Point#COORDINATE The COORDINATE coordinates. function ZONE_OVAL:GetRandomPointVec3() - return POINT_VEC3:NewFromVec3(self:GetRandomVec2()) + return COORDINATE:NewFromVec3(self:GetRandomVec2()) end --- Draw the zone on the F10 map. @@ -4082,15 +4082,15 @@ do -- ZONE_AIRBASE return ZoneVec2 end - --- Returns a @{Core.Point#POINT_VEC2} object reflecting a random 2D location within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. + --- Returns a @{Core.Point#COORDINATE} object reflecting a random 2D location within the zone. Note that this is actually a @{Core.Point#COORDINATE} type object, and not a simple Vec2 table. -- @param #ZONE_AIRBASE self -- @param #number inner (optional) Minimal distance from the center of the zone. Default is 0. -- @param #number outer (optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone. - -- @return Core.Point#POINT_VEC2 The @{Core.Point#POINT_VEC2} object reflecting the random 3D location within the zone. + -- @return Core.Point#COORDINATE The @{Core.Point#COORDINATE} object reflecting the random 3D location within the zone. function ZONE_AIRBASE:GetRandomPointVec2( inner, outer ) --self:F( self.ZoneName, inner, outer ) - local PointVec2 = POINT_VEC2:NewFromVec2( self:GetRandomVec2() ) + local PointVec2 = COORDINATE:NewFromVec2( self:GetRandomVec2() ) --self:T3( { PointVec2 } ) diff --git a/Moose Development/Moose/Core/Zone_Detection.lua b/Moose Development/Moose/Core/Zone_Detection.lua index bb5424a37..8c05919c9 100644 --- a/Moose Development/Moose/Core/Zone_Detection.lua +++ b/Moose Development/Moose/Core/Zone_Detection.lua @@ -2,7 +2,8 @@ -- @module Core.Zone_Detection -- @image MOOSE.JPG ---- @type ZONE_DETECTION +--- +-- @type ZONE_DETECTION -- @field DCS#Vec2 Vec2 The current location of the zone. -- @field DCS#Distance Radius The radius of the zone. -- @extends #ZONE_BASE @@ -106,7 +107,7 @@ function ZONE_DETECTION:SmokeZone( SmokeColor, Points, AddHeight, AngleOffset ) local Radial = ( Angle + AngleOffset ) * RadialBase / 360 Point.x = Vec2.x + math.cos( Radial ) * self:GetRadius() Point.y = Vec2.y + math.sin( Radial ) * self:GetRadius() - POINT_VEC2:New( Point.x, Point.y, AddHeight ):Smoke( SmokeColor ) + COORDINATE:New( Point.x, AddHeight, Point.y):Smoke( SmokeColor ) end return self @@ -137,7 +138,7 @@ function ZONE_DETECTION:FlareZone( FlareColor, Points, Azimuth, AddHeight ) local Radial = Angle * RadialBase / 360 Point.x = Vec2.x + math.cos( Radial ) * self:GetRadius() Point.y = Vec2.y + math.sin( Radial ) * self:GetRadius() - POINT_VEC2:New( Point.x, Point.y, AddHeight ):Flare( FlareColor, Azimuth ) + COORDINATE:New( Point.x, AddHeight, Point.y ):Flare( FlareColor, Azimuth ) end return self @@ -201,4 +202,3 @@ function ZONE_DETECTION:IsVec3InZone( Vec3 ) return InZone end - diff --git a/Moose Development/Moose/Ops/CTLD.lua b/Moose Development/Moose/Ops/CTLD.lua index 6caede880..f0d4b1997 100644 --- a/Moose Development/Moose/Ops/CTLD.lua +++ b/Moose Development/Moose/Ops/CTLD.lua @@ -7699,7 +7699,7 @@ end --- [Internal] Function to spawn a soldier group of 10 units -- @param #CTLD_HERCULES self -- @param Wrapper.Group#GROUP Cargo_Drop_initiator --- @param Core.Point#POINT_VEC3 Cargo_Drop_Position +-- @param Core.Point#COORDINATE Cargo_Drop_Position -- @param #string Cargo_Type_name -- @param #number CargoHeading -- @param #number Cargo_Country @@ -7722,7 +7722,7 @@ end --- [Internal] Function to spawn a group -- @param #CTLD_HERCULES self -- @param Wrapper.Group#GROUP Cargo_Drop_initiator --- @param Core.Point#POINT_VEC3 Cargo_Drop_Position +-- @param Core.Point#COORDINATE Cargo_Drop_Position -- @param #string Cargo_Type_name -- @param #number CargoHeading -- @param #number Cargo_Country @@ -7746,7 +7746,7 @@ end --- [Internal] Function to spawn static cargo -- @param #CTLD_HERCULES self -- @param Wrapper.Group#GROUP Cargo_Drop_initiator --- @param Core.Point#POINT_VEC3 Cargo_Drop_Position +-- @param Core.Point#COORDINATE Cargo_Drop_Position -- @param #string Cargo_Type_name -- @param #number CargoHeading -- @param #boolean dead @@ -7768,7 +7768,7 @@ end --- [Internal] Function to spawn cargo by type at position -- @param #CTLD_HERCULES self -- @param #string Cargo_Type_name --- @param Core.Point#POINT_VEC3 Cargo_Drop_Position +-- @param Core.Point#COORDINATE Cargo_Drop_Position -- @return #CTLD_HERCULES self function CTLD_HERCULES:Cargo_SpawnDroppedAsCargo(_name, _pos) local theCargo = self.CTLD:_FindCratesCargoObject(_name) -- #CTLD_CARGO diff --git a/Moose Development/Moose/Wrapper/Group.lua b/Moose Development/Moose/Wrapper/Group.lua index 9c183238d..db102dc8f 100644 --- a/Moose Development/Moose/Wrapper/Group.lua +++ b/Moose Development/Moose/Wrapper/Group.lua @@ -1179,9 +1179,9 @@ function GROUP:GetAverageVec3() end end ---- Returns a POINT_VEC2 object indicating the point in 2D of the first UNIT of the GROUP within the mission. +--- Returns a COORDINATE object indicating the point in 2D of the first UNIT of the GROUP within the mission. -- @param #GROUP self --- @return Core.Point#POINT_VEC2 The 2D point vector of the first DCS Unit of the GROUP. +-- @return Core.Point#COORDINATE The 3D point vector of the first DCS Unit of the GROUP. -- @return #nil The first UNIT is not existing or alive. function GROUP:GetPointVec2() --self:F2(self.GroupName) @@ -1194,7 +1194,7 @@ function GROUP:GetPointVec2() return FirstUnitPointVec2 end - BASE:E( { "Cannot GetPointVec2", Group = self, Alive = self:IsAlive() } ) + BASE:E( { "Cannot get COORDINATE", Group = self, Alive = self:IsAlive() } ) return nil end @@ -2093,7 +2093,7 @@ function GROUP:Respawn( Template, Reset ) GroupUnitVec3 = Zone:GetRandomVec3() else if self.InitRespawnRandomizePositionInner and self.InitRespawnRandomizePositionOuter then - GroupUnitVec3 = POINT_VEC3:NewFromVec2( From ):GetRandomPointVec3InRadius( self.InitRespawnRandomizePositionsOuter, self.InitRespawnRandomizePositionsInner ) + GroupUnitVec3 = COORDINATE:NewFromVec3(From):GetRandomVec3InRadius(self.InitRespawnRandomizePositionsOuter, self.InitRespawnRandomizePositionsInner) else GroupUnitVec3 = Zone:GetVec3() end @@ -2144,7 +2144,7 @@ function GROUP:Respawn( Template, Reset ) GroupUnitVec3 = Zone:GetRandomVec3() else if self.InitRespawnRandomizePositionInner and self.InitRespawnRandomizePositionOuter then - GroupUnitVec3 = POINT_VEC3:NewFromVec2( From ):GetRandomPointVec3InRadius( self.InitRespawnRandomizePositionsOuter, self.InitRespawnRandomizePositionsInner ) + GroupUnitVec3 = COORDINATE:NewFromVec2( From ):GetRandomPointVec3InRadius( self.InitRespawnRandomizePositionsOuter, self.InitRespawnRandomizePositionsInner ) else GroupUnitVec3 = Zone:GetVec3() end diff --git a/Moose Development/Moose/Wrapper/Positionable.lua b/Moose Development/Moose/Wrapper/Positionable.lua index df5fdcb37..41857a215 100644 --- a/Moose Development/Moose/Wrapper/Positionable.lua +++ b/Moose Development/Moose/Wrapper/Positionable.lua @@ -16,7 +16,7 @@ --- @type POSITIONABLE -- @field Core.Point#COORDINATE coordinate Coordinate object. --- @field Core.Point#POINT_VEC3 pointvec3 Point Vec3 object. +-- @field Core.Point#COORDINATE pointvec3 Point Vec3 object. -- @extends Wrapper.Identifiable#IDENTIFIABLE @@ -284,9 +284,9 @@ function POSITIONABLE:GetVec2() return nil end ---- Returns a POINT_VEC2 object indicating the point in 2D of the POSITIONABLE within the mission. +--- Returns a COORDINATE object indicating the point in 2D of the POSITIONABLE within the mission. -- @param #POSITIONABLE self --- @return Core.Point#POINT_VEC2 The 2D point vector of the POSITIONABLE. +-- @return Core.Point#COORDINATE The 3D point vector of the POSITIONABLE. -- @return #nil The POSITIONABLE is not existing or alive. function POSITIONABLE:GetPointVec2() self:F2( self.PositionableName ) @@ -296,20 +296,20 @@ function POSITIONABLE:GetPointVec2() if DCSPositionable then local PositionableVec3 = DCSPositionable:getPosition().p - local PositionablePointVec2 = POINT_VEC2:NewFromVec3( PositionableVec3 ) + local PositionablePointVec2 = COORDINATE:NewFromVec3( PositionableVec3 ) -- self:F( PositionablePointVec2 ) return PositionablePointVec2 end - self:E( { "Cannot GetPointVec2", Positionable = self, Alive = self:IsAlive() } ) + self:E( { "Cannot Coordinate", Positionable = self, Alive = self:IsAlive() } ) return nil end ---- Returns a POINT_VEC3 object indicating the point in 3D of the POSITIONABLE within the mission. +--- Returns a COORDINATE object indicating the point in 3D of the POSITIONABLE within the mission. -- @param #POSITIONABLE self --- @return Core.Point#POINT_VEC3 The 3D point vector of the POSITIONABLE. +-- @return Core.Point#COORDINATE The 3D point vector of the POSITIONABLE. -- @return #nil The POSITIONABLE is not existing or alive. function POSITIONABLE:GetPointVec3() @@ -329,8 +329,8 @@ function POSITIONABLE:GetPointVec3() else - -- Create a new POINT_VEC3 object. - self.pointvec3 = POINT_VEC3:NewFromVec3( PositionableVec3 ) + -- Create a new COORDINATE object. + self.pointvec3 = COORDINATE:NewFromVec3( PositionableVec3 ) end diff --git a/docs/archive/classes-core.md b/docs/archive/classes-core.md index 2bf02a4fb..0fe685d15 100644 --- a/docs/archive/classes-core.md +++ b/docs/archive/classes-core.md @@ -169,7 +169,7 @@ Defines an extensive API to manage 3D points in the DCS World 3D simulation spac **Features:** * Provides a COORDINATE class, which allows to manage points in 3D space and perform various operations on it. - * Provides a POINT_VEC2 class, which is derived from COORDINATE, and allows to manage points in 3D space, but from a + * Provides a COORDINATE class, which is derived from COORDINATE, and allows to manage points in 3D space, but from a Lat/Lon and Altitude perspective. * Provides a POINT_VEC3 class, which is derived from COORDINATE, and allows to manage points in 3D space, but from a X, Z and Y vector perspective.