diff --git a/Moose Development/Moose/Core/Point.lua b/Moose Development/Moose/Core/Point.lua index e699af694..3cab60d90 100644 --- a/Moose Development/Moose/Core/Point.lua +++ b/Moose Development/Moose/Core/Point.lua @@ -676,7 +676,7 @@ do -- COORDINATE local _,_,_,_,_,scenerys=self:ScanObjects(radius, false, false, true) local set={} - + for _,_scenery in pairs(scenerys) do local scenery=_scenery --DCS#Object diff --git a/Moose Development/Moose/Modules.lua b/Moose Development/Moose/Modules.lua index d5cad1818..3bc9b35dd 100644 --- a/Moose Development/Moose/Modules.lua +++ b/Moose Development/Moose/Modules.lua @@ -115,6 +115,9 @@ __Moose.Include( 'Scripts/Moose/Ops/RescueHelo.lua' ) __Moose.Include( 'Scripts/Moose/Ops/Squadron.lua' ) __Moose.Include( 'Scripts/Moose/Ops/Target.lua' ) +__Moose.Include( 'Scripts/Moose/Navigation/Navaid.lua' ) +__Moose.Include( 'Scripts/Moose/Navigation/FlightPlan.lua' ) + __Moose.Include( 'Scripts/Moose/AI/AI_Balancer.lua' ) __Moose.Include( 'Scripts/Moose/AI/AI_Air.lua' ) __Moose.Include( 'Scripts/Moose/AI/AI_Air_Patrol.lua' ) diff --git a/Moose Development/Moose/Navigation/FlightPlan.lua b/Moose Development/Moose/Navigation/FlightPlan.lua new file mode 100644 index 000000000..6002521ad --- /dev/null +++ b/Moose Development/Moose/Navigation/FlightPlan.lua @@ -0,0 +1,172 @@ +--- **NAVIGATION** - Flight Plan. +-- +-- **Main Features:** +-- +-- * Manage navigation aids +-- * VOR, NDB +-- +-- === +-- +-- ## Example Missions: +-- +-- Demo missions can be found on [github](https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/develop/Ops%20-%20FlightPlan). +-- +-- === +-- +-- ### Author: **funkyfranky** +-- +-- === +-- @module Navigation.FlightPlan +-- @image NAVIGATION_FlightPlan.png + + +--- FLIGHTPLAN class. +-- @type FLIGHTPLAN +-- @field #string ClassName Name of the class. +-- @field #number verbose Verbosity of output. +-- @extends Core.Base#BASE + +--- *A fleet of British ships at war are the best negotiators.* -- Horatio Nelson +-- +-- === +-- +-- # The FLIGHTPLAN Concept +-- +-- A FLIGHTPLAN consists of one or multiple FLOTILLAs. These flotillas "live" in a WAREHOUSE that has a phyiscal struction (STATIC or UNIT) and can be captured or destroyed. +-- +-- # Basic Setup +-- +-- A new `FLIGHTPLAN` object can be created with the @{#FLIGHTPLAN.New}(`WarehouseName`, `FleetName`) function, where `WarehouseName` is the name of the static or unit object hosting the fleet +-- and `FleetName` is the name you want to give the fleet. This must be *unique*! +-- +-- myFleet=FLIGHTPLAN:New("myWarehouseName", "1st Fleet") +-- myFleet:SetPortZone(ZonePort1stFleet) +-- myFleet:Start() +-- +-- A fleet needs a *port zone*, which is set via the @{#FLIGHTPLAN.SetPortZone}(`PortZone`) function. This is the zone where the naval assets are spawned and return to. +-- +-- Finally, the fleet needs to be started using the @{#FLIGHTPLAN.Start}() function. If the fleet is not started, it will not process any requests. +-- +-- @field #FLIGHTPLAN +FLIGHTPLAN = { + ClassName = "FLIGHTPLAN", + verbose = 0, +} + +--- Type of navaid +-- @type FLIGHTPLAN.Type +-- @field #string VOR VOR +-- @field #string NDB NDB +FLIGHTPLAN.TYPE={ + VOR="VOR", + NDB="NDB", +} + +--- FLIGHTPLAN class version. +-- @field #string version +FLIGHTPLAN.version="0.0.1" + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- ToDo list +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +-- TODO: A lot... + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- Constructor +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Create a new FLIGHTPLAN class instance. +-- @param #FLIGHTPLAN self +-- @param #string ZoneName Name of the zone to scan the scenery. +-- @param #string SceneryName Name of the scenery object. +-- @param #string Type Type of Navaid. +-- @return #FLIGHTPLAN self +function FLIGHTPLAN:New(ZoneName, SceneryName, Type) + + -- Inherit everything from SCENERY class. + self=BASE:Inherit(self, BASE:New()) -- #FLIGHTPLAN + + + self.zone=ZONE:FindByName(ZoneName) + + self.coordinate=self.zone:GetCoordinate() + + if SceneryName then + self.scenery=SCENERY:FindByNameInZone(SceneryName, ZoneName) + if not self.scenery then + self:E("ERROR: Could not find scenery object %s in zone %s", SceneryName, ZoneName) + end + end + + self.alias=string.format("%s %s %s", tostring(ZoneName), tostring(SceneryName), tostring(Type)) + + + -- Set some string id for output to DCS.log file. + self.lid=string.format("FLIGHTPLAN %s | ", self.alias) + + self:I(self.lid..string.format("Created FLIGHTPLAN!")) + + return self +end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- User Functions +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Set frequency. +-- @param #FLIGHTPLAN self +-- @param #number Frequency Frequency in Hz. +-- @return #FLIGHTPLAN self +function FLIGHTPLAN:SetFrequency(Frequency) + + self.frequency=Frequency + + return self +end + +--- Set channel. +-- @param #FLIGHTPLAN self +-- @param #number Channel +-- @param #string Band +-- @return #FLIGHTPLAN self +function FLIGHTPLAN:SetChannel(Channel, Band) + + self.channel=Channel + self.band=Band + + return self +end + +--- Add marker the FLIGHTPLAN on the F10 map. +-- @param #FLIGHTPLAN self +-- @return #FLIGHTPLAN self +function FLIGHTPLAN:AddMarker() + + local text=string.format("I am a FLIGHTPLAN!") + + self.markID=self.coordinate:MarkToAll(text, true) + + return self +end + +--- Remove marker of the FLIGHTPLAN from the F10 map. +-- @param #FLIGHTPLAN self +-- @return #FLIGHTPLAN self +function FLIGHTPLAN:DelMarker() + + if self.markID then + UTILS.RemoveMark(self.markID) + end + + return self +end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- Private Functions +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/Moose Development/Moose/Navigation/Navaid.lua b/Moose Development/Moose/Navigation/Navaid.lua new file mode 100644 index 000000000..b0d5a3984 --- /dev/null +++ b/Moose Development/Moose/Navigation/Navaid.lua @@ -0,0 +1,172 @@ +--- **Navigation** - Navigation aid. +-- +-- **Main Features:** +-- +-- * Manage navigation aids +-- * VOR, NDB +-- +-- === +-- +-- ## Example Missions: +-- +-- Demo missions can be found on [github](https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/develop/Navigation%20-%20Navaid). +-- +-- === +-- +-- ### Author: **funkyfranky** +-- +-- === +-- @module Navigation.Navaid +-- @image Navigation_Navaid.png + + +--- NAVAID class. +-- @type NAVAID +-- @field #string ClassName Name of the class. +-- @field #number verbose Verbosity of output. +-- @extends Core.Base#BASE + +--- *A fleet of British ships at war are the best negotiators.* -- Horatio Nelson +-- +-- === +-- +-- # The NAVAID Concept +-- +-- A NAVAID consists of one or multiple FLOTILLAs. These flotillas "live" in a WAREHOUSE that has a phyiscal struction (STATIC or UNIT) and can be captured or destroyed. +-- +-- # Basic Setup +-- +-- A new `NAVAID` object can be created with the @{#NAVAID.New}(`WarehouseName`, `FleetName`) function, where `WarehouseName` is the name of the static or unit object hosting the fleet +-- and `FleetName` is the name you want to give the fleet. This must be *unique*! +-- +-- myFleet=NAVAID:New("myWarehouseName", "1st Fleet") +-- myFleet:SetPortZone(ZonePort1stFleet) +-- myFleet:Start() +-- +-- A fleet needs a *port zone*, which is set via the @{#NAVAID.SetPortZone}(`PortZone`) function. This is the zone where the naval assets are spawned and return to. +-- +-- Finally, the fleet needs to be started using the @{#NAVAID.Start}() function. If the fleet is not started, it will not process any requests. +-- +-- @field #NAVAID +NAVAID = { + ClassName = "NAVAID", + verbose = 0, +} + +--- Type of navaid +-- @type NAVAID.Type +-- @field #string VOR VOR +-- @field #string NDB NDB +NAVAID.TYPE={ + VOR="VOR", + NDB="NDB", +} + +--- NAVAID class version. +-- @field #string version +NAVAID.version="0.0.1" + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- ToDo list +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +-- TODO: A lot... + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- Constructor +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Create a new NAVAID class instance. +-- @param #NAVAID self +-- @param #string ZoneName Name of the zone to scan the scenery. +-- @param #string SceneryName Name of the scenery object. +-- @param #string Type Type of Navaid. +-- @return #NAVAID self +function NAVAID:New(ZoneName, SceneryName, Type) + + -- Inherit everything from SCENERY class. + self=BASE:Inherit(self, BASE:New()) -- #NAVAID + + + self.zone=ZONE:FindByName(ZoneName) + + self.coordinate=self.zone:GetCoordinate() + + if SceneryName then + self.scenery=SCENERY:FindByNameInZone(SceneryName, ZoneName) + if not self.scenery then + self:E("ERROR: Could not find scenery object %s in zone %s", SceneryName, ZoneName) + end + end + + self.alias=string.format("%s %s %s", tostring(ZoneName), tostring(SceneryName), tostring(Type)) + + + -- Set some string id for output to DCS.log file. + self.lid=string.format("NAVAID %s | ", self.alias) + + self:I(self.lid..string.format("Created NAVAID!")) + + return self +end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- User Functions +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Set frequency. +-- @param #NAVAID self +-- @param #number Frequency Frequency in Hz. +-- @return #NAVAID self +function NAVAID:SetFrequency(Frequency) + + self.frequency=Frequency + + return self +end + +--- Set channel. +-- @param #NAVAID self +-- @param #number Channel +-- @param #string Band +-- @return #NAVAID self +function NAVAID:SetChannel(Channel, Band) + + self.channel=Channel + self.band=Band + + return self +end + +--- Add marker the NAVAID on the F10 map. +-- @param #NAVAID self +-- @return #NAVAID self +function NAVAID:AddMarker() + + local text=string.format("I am a NAVAID!") + + self.markID=self.coordinate:MarkToAll(text, true) + + return self +end + +--- Remove marker of the NAVAID from the F10 map. +-- @param #NAVAID self +-- @return #NAVAID self +function NAVAID:DelMarker() + + if self.markID then + UTILS.RemoveMark(self.markID) + end + + return self +end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- Private Functions +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/Moose Development/Moose/Navigation/Template.lua b/Moose Development/Moose/Navigation/Template.lua new file mode 100644 index 000000000..a54a2d2a2 --- /dev/null +++ b/Moose Development/Moose/Navigation/Template.lua @@ -0,0 +1,108 @@ +--- **NAVIGATION** - Template. +-- +-- **Main Features:** +-- +-- * Stuff +-- * More Stuff +-- +-- === +-- +-- ## Example Missions: +-- +-- Demo missions can be found on [github](https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/develop/Navigation%20-%20Template). +-- +-- === +-- +-- ### Author: **funkyfranky** +-- +-- === +-- @module Navigation.Template +-- @image NAVIGATION_Template.png + + +--- TEMPLATE class. +-- @type TEMPLATE +-- @field #string ClassName Name of the class. +-- @field #number verbose Verbosity of output. +-- @extends Core.Base#BASE + +--- *A fleet of British ships at war are the best negotiators.* -- Horatio Nelson +-- +-- === +-- +-- # The TEMPLATE Concept +-- +-- The TEMPLATE class has a great concept! +-- +-- # Basic Setup +-- +-- A new `TEMPLATE` object can be created with the @{#TEMPLATE.New}() function. +-- +-- myTemplate=TEMPLATE:New() +-- myTemplate:SetXYZ(X, Y, Z) +-- +-- This is how it works. +-- +-- @field #TEMPLATE +TEMPLATE = { + ClassName = "TEMPLATE", + verbose = 0, +} + +--- Type of navaid +-- @type TEMPLATE.Type +-- @field #string VOR VOR +-- @field #string NDB NDB +TEMPLATE.TYPE={ + VOR="VOR", + NDB="NDB", +} + +--- TEMPLATE class version. +-- @field #string version +TEMPLATE.version="0.0.1" + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- ToDo list +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +-- TODO: A lot... + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- Constructor +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Create a new TEMPLATE class instance. +-- @param #TEMPLATE self +-- @return #TEMPLATE self +function TEMPLATE:New() + + -- Inherit everything from SCENERY class. + self=BASE:Inherit(self, BASE:New()) -- #TEMPLATE + + return self +end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- User Functions +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Set frequency. +-- @param #TEMPLATE self +-- @param #number Frequency Frequency in Hz. +-- @return #TEMPLATE self +function TEMPLATE:SetFrequency(Frequency) + + self.frequency=Frequency + + return self +end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- Private Functions +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/Moose Development/Moose/Wrapper/Scenery.lua b/Moose Development/Moose/Wrapper/Scenery.lua index 6a6f70bd9..f7b4f419d 100644 --- a/Moose Development/Moose/Wrapper/Scenery.lua +++ b/Moose Development/Moose/Wrapper/Scenery.lua @@ -128,7 +128,7 @@ function SCENERY:FindByName(Name, Coordinate, Radius) -- @param #number radius -- @param #string name local function SceneryScan(coordinate, radius, name) - if coordinate ~= nil then + if coordinate ~= nil then local scenerylist = coordinate:ScanScenery(radius) local rscenery = nil for _,_scenery in pairs(scenerylist) do @@ -157,14 +157,14 @@ end --@param Core.Zone#ZONE Zone Where to find the scenery object. Can be handed as zone name. --@param #number Radius (optional) Search radius around coordinate, defaults to 100 --@return #SCENERY Scenery Object or `nil` if it cannot be found -function SCENERY:FindByNameInZone(Name, Zone, Radius) +function SCENERY:FindByNameInZone(Name, Zone, Radius) local radius = Radius or 100 local name = Name or "unknown" if type(Zone) == "string" then Zone = ZONE:FindByName(Zone) end local coordinate = Zone:GetCoordinate() - return self:FindByName(Name,coordinate,Radius) + return self:FindByName(Name,coordinate,Radius) end --- Find a SCENERY object from its zone name. Since SCENERY isn't registered in the Moose database (just too many objects per map), we need to do a scan first diff --git a/Moose Setup/Moose.files b/Moose Setup/Moose.files index 0ad57277f..83f57287f 100644 --- a/Moose Setup/Moose.files +++ b/Moose Setup/Moose.files @@ -107,6 +107,9 @@ Ops/FlightControl.lua Ops/PlayerTask.lua Ops/PlayerRecce.lua +Navigation/Navaid.lua +Navigation/FlightPlan.lua + AI/AI_Balancer.lua AI/AI_Air.lua AI/AI_Air_Patrol.lua