diff --git a/Moose Development/Moose/Core/SoundFile.lua b/Moose Development/Moose/Core/SoundFile.lua deleted file mode 100644 index 85e7745ac..000000000 --- a/Moose Development/Moose/Core/SoundFile.lua +++ /dev/null @@ -1,110 +0,0 @@ ---- **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 diff --git a/Moose Development/Moose/Modules.lua b/Moose Development/Moose/Modules.lua index c4bb9eb87..06f53d723 100644 --- a/Moose Development/Moose/Modules.lua +++ b/Moose Development/Moose/Modules.lua @@ -6,7 +6,6 @@ __Moose.Include( 'Scripts/Moose/Utilities/Templates.lua' ) __Moose.Include( 'Scripts/Moose/Core/Base.lua' ) __Moose.Include( 'Scripts/Moose/Core/UserFlag.lua' ) -__Moose.Include( 'Scripts/Moose/Core/UserSound.lua' ) __Moose.Include( 'Scripts/Moose/Core/Report.lua' ) __Moose.Include( 'Scripts/Moose/Core/Scheduler.lua' ) __Moose.Include( 'Scripts/Moose/Core/ScheduleDispatcher.lua' ) @@ -21,9 +20,6 @@ __Moose.Include( 'Scripts/Moose/Core/Point.lua' ) __Moose.Include( 'Scripts/Moose/Core/Velocity.lua' ) __Moose.Include( 'Scripts/Moose/Core/Message.lua' ) __Moose.Include( 'Scripts/Moose/Core/Fsm.lua' ) -__Moose.Include( 'Scripts/Moose/Core/Radio.lua' ) -__Moose.Include( 'Scripts/Moose/Core/RadioQueue.lua' ) -__Moose.Include( 'Scripts/Moose/Core/RadioSpeech.lua' ) __Moose.Include( 'Scripts/Moose/Core/Spawn.lua' ) __Moose.Include( 'Scripts/Moose/Core/SpawnStatic.lua' ) __Moose.Include( 'Scripts/Moose/Core/Timer.lua' ) @@ -113,6 +109,13 @@ __Moose.Include( 'Scripts/Moose/Actions/Act_Route.lua' ) __Moose.Include( 'Scripts/Moose/Actions/Act_Account.lua' ) __Moose.Include( 'Scripts/Moose/Actions/Act_Assist.lua' ) +__Moose.Include( 'Scripts/Moose/Sound/UserSound.lua' ) +__Moose.Include( 'Scripts/Moose/Sound/SoundFile.lua' ) +__Moose.Include( 'Scripts/Moose/Sound/Radio.lua' ) +__Moose.Include( 'Scripts/Moose/Sound/RadioQueue.lua' ) +__Moose.Include( 'Scripts/Moose/Sound/RadioSpeech.lua' ) +__Moose.Include( 'Scripts/Moose/Sound/SRS.lua' ) + __Moose.Include( 'Scripts/Moose/Tasking/CommandCenter.lua' ) __Moose.Include( 'Scripts/Moose/Tasking/Mission.lua' ) __Moose.Include( 'Scripts/Moose/Tasking/Task.lua' ) diff --git a/Moose Development/Moose/Core/Radio.lua b/Moose Development/Moose/Sound/Radio.lua similarity index 100% rename from Moose Development/Moose/Core/Radio.lua rename to Moose Development/Moose/Sound/Radio.lua diff --git a/Moose Development/Moose/Core/RadioQueue.lua b/Moose Development/Moose/Sound/RadioQueue.lua similarity index 93% rename from Moose Development/Moose/Core/RadioQueue.lua rename to Moose Development/Moose/Sound/RadioQueue.lua index a63677a98..3e6afcd51 100644 --- a/Moose Development/Moose/Core/RadioQueue.lua +++ b/Moose Development/Moose/Sound/RadioQueue.lua @@ -1,4 +1,4 @@ ---- **Core** - Queues Radio Transmissions. +--- **Sound** - Queues Radio Transmissions. -- -- === -- @@ -10,8 +10,8 @@ -- -- ### Authors: funkyfranky -- --- @module Core.RadioQueue --- @image Core_Radio.JPG +-- @module Sound.RadioQueue +-- @image Sound_Radio.JPG --- Manages radio transmissions. -- @@ -125,9 +125,9 @@ function RADIOQUEUE:Start(delay, dt) -- Start Scheduler. if self.schedonce then - self:_CheckRadioQueueDelayed(delay) + self:_CheckRadioQueueDelayed(self.delay) else - self.RQid=self.scheduler:Schedule(nil, RADIOQUEUE._CheckRadioQueue, {self}, delay, dt) + self.RQid=self.scheduler:Schedule(nil, RADIOQUEUE._CheckRadioQueue, {self}, self.delay, self.dt) end return self @@ -202,7 +202,7 @@ end --- Add a transmission to the radio queue. -- @param #RADIOQUEUE self -- @param #RADIOQUEUE.Transmission transmission The transmission data table. --- @return #RADIOQUEUE self The RADIOQUEUE object. +-- @return #RADIOQUEUE self function RADIOQUEUE:AddTransmission(transmission) self:F({transmission=transmission}) @@ -221,7 +221,7 @@ function RADIOQUEUE:AddTransmission(transmission) return self end ---- Add a transmission to the radio queue. +--- Create a new transmission and add it to the radio queue. -- @param #RADIOQUEUE self -- @param #string filename Name of the sound file. Usually an ogg or wav file type. -- @param #number duration Duration in seconds the file lasts. @@ -233,6 +233,8 @@ end -- @return #RADIOQUEUE self The RADIOQUEUE object. function RADIOQUEUE:NewTransmission(filename, duration, path, tstart, interval, subtitle, subduration) + env.info("FF new transmission.") + -- Sanity checks. if not filename then self:E(self.lid.."ERROR: No filename specified.") @@ -272,6 +274,19 @@ function RADIOQUEUE:NewTransmission(filename, duration, path, tstart, interval, return self end +--- Create a new transmission and add it to the radio queue. +-- @param #RADIOQUEUE self +-- @param Sound.SoundFile#SOUNDFILE soundfile Sound file object to be added. +-- @param #number tstart Start time (abs) seconds. Default now. +-- @param #number interval Interval in seconds after the last transmission finished. +-- @return #RADIOQUEUE self +function RADIOQUEUE:AddSoundfile(soundfile, tstart, interval) + env.info(string.format("FF add soundfile: name=%s%s", soundfile:GetPath(), soundfile:GetFileName())) + self:NewTransmission(soundfile:GetFileName(), soundfile.duration, soundfile:GetPath(), tstart, interval, soundfile.subtitle, soundfile.subduration) + + return self +end + --- Convert a number (as string) into a radio transmission. -- E.g. for board number or headings. -- @param #RADIOQUEUE self @@ -292,7 +307,7 @@ function RADIOQUEUE:Number2Transmission(number, delay, interval) end -- Split string into characters. - local numbers=_split(number) + local numbers=UTILS.GetCharacters(number) --l_split(number) local wait=0 for i=1,#numbers do @@ -547,7 +562,7 @@ function RADIOQUEUE:_GetRadioSender() return nil end ---- Get unit from which we want to transmit a radio message. This has to be an aircraft for subtitles to work. +--- Get unit from which we want to transmit a radio message. This has to be an aircraft or ground unit for subtitles to work. -- @param #RADIOQUEUE self -- @return DCS#Vec3 Vector 3D. function RADIOQUEUE:_GetRadioSenderCoord() diff --git a/Moose Development/Moose/Core/RadioSpeech.lua b/Moose Development/Moose/Sound/RadioSpeech.lua similarity index 100% rename from Moose Development/Moose/Core/RadioSpeech.lua rename to Moose Development/Moose/Sound/RadioSpeech.lua diff --git a/Moose Development/Moose/AddOns/SRS.lua b/Moose Development/Moose/Sound/SRS.lua similarity index 100% rename from Moose Development/Moose/AddOns/SRS.lua rename to Moose Development/Moose/Sound/SRS.lua diff --git a/Moose Development/Moose/Sound/SoundFile.lua b/Moose Development/Moose/Sound/SoundFile.lua new file mode 100644 index 000000000..f1a759cbb --- /dev/null +++ b/Moose Development/Moose/Sound/SoundFile.lua @@ -0,0 +1,138 @@ +--- **Sound** - Sound file management. +-- +-- === +-- +-- ## Features: +-- +-- * Add a sound file to the +-- +-- === +-- +-- ### Author: **funkyfranky** +-- +-- === +-- +-- @module Sound.Soundfile +-- @image Sound_Soundfile.png +-- + +do -- Sound File + + --- @type SOUNDFILE + -- @field #string ClassName Name of the class + -- @field #string filename Name of the flag. + -- @field #string path Directory path, where the sound file is located. + -- @field #string duration Duration of the sound file in seconds. + -- @field #string subtitle Subtitle of the transmission. + -- @field #number subduration Duration in seconds how long the subtitle is displayed. + -- @field #boolean insideMiz If true (default), the sound file is located inside the mission .miz file. + -- @extends Core.Base#BASE + + + --- Sound files used by other classes. + -- + -- # 1. USERFLAG constructor + -- + -- * @{#USERFLAG.New}(): Creates a new USERFLAG object. + -- + -- @field #SOUNDFILE + SOUNDFILE={ + ClassName = "SOUNDFILE", + filename = nil, + path = "l10n/DEFAULT", + duration = 3, + subtitle = nil, + subduration = 0, + insideMiz = true, + } + + --- Constructor to create a new SOUNDFILE object. + -- @param #SOUNDFILE self + -- @param #string filename The name of the sound file, e.g. "Hello World.ogg". + -- @param #string Path The path of the directory, where the sound file is located. Default is "l10n/DEFAULT/" within the miz file. + -- @param #number Duration Duration in seconds, how long it takes to play the sound file. Default is 3 seconds. + -- @return #SOUNDFILE self + function SOUNDFILE:New(filename, Path, Duration) + + -- Inherit BASE. + local self=BASE:Inherit(self, BASE:New()) -- #SOUNDFILE + + -- Set file name. + self.filename=filename or "Hallo World.ogg" + + -- Set path + self.path=Path or "l10n/DEFAULT/" + + self.duration=Duration or 3 + + -- Debug info: + self:I(string.format("New SOUNDFILE: file name=%s, path=%s", self.filename, self.path)) + + return self + end + + --- Set path, where the . + -- @param #SOUNDFILE self + -- @param #string Path Path to the directory, where the sound file is located. + -- @return self + function SOUNDFILE:SetPath(Path) + + self.path=Path or "l10n/DEFAULT/" + + while self.path:sub(-1)=="/" or self.path:sub(-1)=="\\" do + self.path=self.path:sub(1,-1) + end + + return self + end + + + --- Get the sound file name. + -- @param #SOUNDFILE self + -- @return #string Name of the soud file. This does *not* include its path. + function SOUNDFILE:GetFileName() + return self.filename + end + + --- Get path of the directory, where the sound file is located. + -- @param #SOUNDFILE self + -- @return #string Path. + function SOUNDFILE:GetPath() + local path=self.path or "l10n/DEFAULT" + path=path.."/" + return path + end + + --- Get the complete sound file name inlcuding its path. + -- @param #SOUNDFILE self + -- @return #string Name of the sound file. + function SOUNDFILE:GetName() + local filename=self:GetFileName() + local path=self:GetPath() + local name=string.format("%s/%s", path, filename) + return name + end + + + --- Set the userflag to a given Number. + -- @param #SOUNDFILE 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 #SOUNDFILE self + -- @usage + -- local BlueVictory = USERFLAG:New( "VictoryBlue" ) + -- BlueVictory:Set( 100 ) -- Set the UserFlag VictoryBlue to 100. + -- + function SOUNDFILE: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 + +end \ No newline at end of file diff --git a/Moose Development/Moose/Core/UserSound.lua b/Moose Development/Moose/Sound/UserSound.lua similarity index 100% rename from Moose Development/Moose/Core/UserSound.lua rename to Moose Development/Moose/Sound/UserSound.lua diff --git a/Moose Development/Moose/Utilities/Utils.lua b/Moose Development/Moose/Utilities/Utils.lua index 3fd6e9482..af7642406 100644 --- a/Moose Development/Moose/Utilities/Utils.lua +++ b/Moose Development/Moose/Utilities/Utils.lua @@ -682,7 +682,10 @@ function UTILS.IsInSphere( InVec3, Vec3, Radius ) return InSphere end --- Beaufort scale: returns Beaufort number and wind description as a function of wind speed in m/s. +--- Beaufort scale: returns Beaufort number and wind description as a function of wind speed in m/s. +-- @param #number speed Wind speed in m/s. +-- @return #number Beaufort number. +-- @return #string Beauford wind description. function UTILS.BeaufortScale(speed) local bn=nil local bd=nil @@ -742,6 +745,21 @@ function UTILS.Split(str, sep) return result end +--- Get a table of all characters in a string. +-- @param #string str Sting. +-- @return #table Individual characters. +function UTILS.GetCharacters(str) + + local chars={} + + for i=1,#str do + local c=str:sub(i,i) + table.insert(chars, c) + end + + return chars +end + --- Convert time in seconds to hours, minutes and seconds. -- @param #number seconds Time in seconds, e.g. from timer.getAbsTime() function. -- @param #boolean short (Optional) If true, use short output, i.e. (HH:)MM:SS without day. diff --git a/Moose Setup/Moose.files b/Moose Setup/Moose.files index 79c9b120e..939bf7770 100644 --- a/Moose Setup/Moose.files +++ b/Moose Setup/Moose.files @@ -7,7 +7,6 @@ Utilities/Templates.lua Core/Base.lua Core/UserFlag.lua -Core/UserSound.lua Core/Report.lua Core/Scheduler.lua Core/ScheduleDispatcher.lua @@ -22,9 +21,6 @@ Core/Point.lua Core/Velocity.lua Core/Message.lua Core/Fsm.lua -Core/Radio.lua -Core/RadioQueue.lua -Core/RadioSpeech.lua Core/Spawn.lua Core/SpawnStatic.lua Core/Timer.lua @@ -114,6 +110,13 @@ Actions/Act_Route.lua Actions/Act_Account.lua Actions/Act_Assist.lua +Sound/UserSound.lua +Sound/SoundFile.lua +Sound/Radio.lua +Sound/RadioQueue.lua +Sound/RadioSpeech.lua +Sound/SRS.lua + Tasking/CommandCenter.lua Tasking/Mission.lua Tasking/Task.lua