From d39074bf3e7d9bf56e044102fce6e54ccb0c44ec Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 22 May 2021 00:35:00 +0200 Subject: [PATCH] Sound --- Moose Development/Moose/AddOns/SRS.lua | 151 +++++++++++++++++++++ Moose Development/Moose/Core/SoundFile.lua | 110 +++++++++++++++ 2 files changed, 261 insertions(+) create mode 100644 Moose Development/Moose/AddOns/SRS.lua create mode 100644 Moose Development/Moose/Core/SoundFile.lua diff --git a/Moose Development/Moose/AddOns/SRS.lua b/Moose Development/Moose/AddOns/SRS.lua new file mode 100644 index 000000000..681b3dc2a --- /dev/null +++ b/Moose Development/Moose/AddOns/SRS.lua @@ -0,0 +1,151 @@ +--- **AddOn** - Simple Radio +-- +-- === +-- +-- **Main Features:** +-- +-- * SRS integration +-- +-- === +-- +-- ## Youtube Videos: +-- +-- * None +-- +-- === +-- +-- ## Missions: Example missions can be found [here](https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/develop/OPS%20-%20ATIS) +-- +-- === +-- +-- ## Sound files: Check out the pinned messages in the Moose discord #ops-atis channel. +-- +-- === +-- +-- Automatic terminal information service, or ATIS, is a continuous broadcast of recorded aeronautical information in busier terminal areas, *i.e.* airports and their immediate surroundings. +-- ATIS broadcasts contain essential information, such as current weather information, active runways, and any other information required by the pilots. +-- +-- === +-- +-- ### Author: **funkyfranky** +-- @module Addons.SRS +-- @image Addons_SRS.png + + +--- MSRS class. +-- @type MSRS +-- @field #string ClassName Name of the class. +-- @field #string lid Class id string for output to DCS log file. +-- @extends Core.Fsm#FSM + +--- *It is a very sad thing that nowadays there is so little useless information.* - Oscar Wilde +-- +-- === +-- +-- ![Banner Image](..\Presentations\ATIS\ATIS_Main.png) +-- +-- # The MSRS Concept +-- +-- Automatic terminal information service, or ATIS, is a continuous broadcast of recorded aeronautical information in busier terminal areas, *i.e.* airports and their immediate surroundings. +-- ATIS broadcasts contain essential information, such as current weather information, active runways, and any other information required by the pilots. +-- +-- @field #MSRS +MSRS = { + ClassName = "MSRS", + lid = nil, +} + +--- ATIS class version. +-- @field #string version +MSRS.version="0.9.1" + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- TODO list +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +-- TODO: A lot. + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- Constructor +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Create a new ATIS class object for a specific aircraft carrier unit. +-- @param #MSRS self +-- @param #string airbasename Name of the airbase. +-- @param #number frequency Radio frequency in MHz. Default 143.00 MHz. +-- @param #number modulation Radio modulation: 0=AM, 1=FM. Default 0=AM. See `radio.modulation.AM` and `radio.modulation.FM` enumerators +-- @return #MSRS self +function MSRS:New(airbasename, frequency, modulation) + + -- Inherit everything from FSM class. + local self=BASE:Inherit(self, FSM:New()) -- #ATIS + + + return self +end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- User Functions +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Set sound files folder within miz file. +-- @param #MSRS self +-- @param #string path Path for sound files. Default "ATIS Soundfiles/". Mind the slash "/" at the end! +-- @return #MSRS self +function MSRS:SetSoundfilesPath(path) + self.soundpath=tostring(path or "ATIS Soundfiles/") + self:I(self.lid..string.format("Setting sound files path to %s", self.soundpath)) + return self +end + + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- Start & Status +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Start ATIS FSM. +-- @param #MSRS self +-- @param #string From From state. +-- @param #string Event Event. +-- @param #string To To state. +function MSRS:onafterStart(From, Event, To) + +end + +--- Update status. +-- @param #MSRS self +-- @param #string From From state. +-- @param #string Event Event. +-- @param #string To To state. +function MSRS:onafterStatus(From, Event, To) + + -- Get FSM state. + local fsmstate=self:GetState() + + self:__Status(-60) +end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- FSM Events +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +--- Check if radio queue is empty. If so, start broadcasting the message again. +-- @param #MRSRS self +-- @param #string From From state. +-- @param #string Event Event. +-- @param #string To To state. +function MSRS:onafterCheckQueue(From, Event, To) + + -- Check back in 5 seconds. + self:__CheckQueue(-5) +end + + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-- Misc Functions +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/Moose Development/Moose/Core/SoundFile.lua b/Moose Development/Moose/Core/SoundFile.lua new file mode 100644 index 000000000..85e7745ac --- /dev/null +++ b/Moose Development/Moose/Core/SoundFile.lua @@ -0,0 +1,110 @@ +--- **Core** - Sound file +-- +-- === +-- +-- ## Features: +-- +-- * Add a sound file to the +-- +-- === +-- +-- ### Author: **funkyfranky** +-- +-- === +-- +-- @module Core.UserFlag +-- @image Core_Userflag.JPG +-- + +do -- Sound File + + --- @type SOUNDFILE + -- @field #string ClassName Name of the class + -- @field #string Name Name of the flag. + -- @extends Core.Base#BASE + + + --- Management of DCS User Flags. + -- + -- # 1. USERFLAG constructor + -- + -- * @{#USERFLAG.New}(): Creates a new USERFLAG object. + -- + -- @field #SOUNDFILE + SOUNDFILE={ + ClassName = "SOUNDFILE", + Name = nil, + } + + --- Constructor. + -- @param #SOUNDFILE self + -- @param #string UserFlagName The name of the userflag, which is a free text string. + -- @return #SOUNDFILE + function SOUNDFILE:New( UserFlagName ) --R2.3 + + local self=BASE:Inherit(self, BASE:New()) -- #SOUNDFILE + + self.UserFlagName = UserFlagName + + return self + end + + --- Get the userflag name. + -- @param #USERFLAG self + -- @return #string Name of the user flag. + function USERFLAG:GetName() + return self.UserFlagName + end + + --- Set the userflag to a given Number. + -- @param #USERFLAG self + -- @param #number Number The number value to be checked if it is the same as the userflag. + -- @param #number Delay Delay in seconds, before the flag is set. + -- @return #USERFLAG The userflag instance. + -- @usage + -- local BlueVictory = USERFLAG:New( "VictoryBlue" ) + -- BlueVictory:Set( 100 ) -- Set the UserFlag VictoryBlue to 100. + -- + function USERFLAG:Set( Number, Delay ) --R2.3 + + if Delay and Delay>0 then + self:ScheduleOnce(Delay, USERFLAG.Set, self, Number) + else + --env.info(string.format("Setting flag \"%s\" to %d at T=%.1f", self.UserFlagName, Number, timer.getTime())) + trigger.action.setUserFlag( self.UserFlagName, Number ) + end + + return self + end + + + --- Get the userflag Number. + -- @param #USERFLAG self + -- @return #number Number The number value to be checked if it is the same as the userflag. + -- @usage + -- local BlueVictory = USERFLAG:New( "VictoryBlue" ) + -- local BlueVictoryValue = BlueVictory:Get() -- Get the UserFlag VictoryBlue value. + -- + function USERFLAG:Get() --R2.3 + + return trigger.misc.getUserFlag( self.UserFlagName ) + end + + + + --- Check if the userflag has a value of Number. + -- @param #USERFLAG self + -- @param #number Number The number value to be checked if it is the same as the userflag. + -- @return #boolean true if the Number is the value of the userflag. + -- @usage + -- local BlueVictory = USERFLAG:New( "VictoryBlue" ) + -- if BlueVictory:Is( 1 ) then + -- return "Blue has won" + -- end + function USERFLAG:Is( Number ) --R2.3 + + return trigger.misc.getUserFlag( self.UserFlagName ) == Number + + end + +end \ No newline at end of file