Update Radio.lua

This commit is contained in:
Frank
2019-05-07 21:25:24 +02:00
parent e206fcd5d5
commit 96a7a963e6
+62 -18
View File
@@ -889,10 +889,8 @@ end
--- Stop the radio queue. Stop scheduler and delete queue. --- Stop the radio queue. Stop scheduler and delete queue.
-- @param #RADIOQUEUE self -- @param #RADIOQUEUE self
-- @param #number delay (Optional) Delay in seconds, before the radio queue is started. Default 1 sec.
-- @param #number dt (Optional) Time step in seconds for checking the queue. Default 0.01 sec.
-- @return #RADIOQUEUE self The RADIOQUEUE object. -- @return #RADIOQUEUE self The RADIOQUEUE object.
function RADIOQUEUE:Stop(delay, dt) function RADIOQUEUE:Stop()
self:I(self.lid.."Stopping RADIOQUEUE.") self:I(self.lid.."Stopping RADIOQUEUE.")
self.scheduler:Stop(self.RQid) self.scheduler:Stop(self.RQid)
self.queue={} self.queue={}
@@ -908,6 +906,15 @@ function RADIOQUEUE:SetSenderCoordinate(coordinate)
return self return self
end end
--- Set name of unit or static from which transmissions are made.
-- @param #RADIOQUEUE self
-- @param #string name Name of the unit or static used for transmissions.
-- @return #RADIOQUEUE self The RADIOQUEUE object.
function RADIOQUEUE:SetSenderUnitName(name)
self.sendername=name
return self
end
--- Set parameters of a digit. --- Set parameters of a digit.
-- @param #RADIOQUEUE self -- @param #RADIOQUEUE self
-- @param #number digit The digit 0-9. -- @param #number digit The digit 0-9.
@@ -1046,9 +1053,9 @@ end
function RADIOQUEUE:Broadcast(transmission) function RADIOQUEUE:Broadcast(transmission)
-- Get unit sending the transmission. -- Get unit sending the transmission.
local sender=nil --self:_GetRadioSender(radio) local sender=self:_GetRadioSender()
-- Construct file name and subtitle. -- Construct file name.
local filename=string.format("%s%s", transmission.path, transmission.filename) local filename=string.format("%s%s", transmission.path, transmission.filename)
-- Create subtitle for transmission. -- Create subtitle for transmission.
@@ -1072,8 +1079,8 @@ function RADIOQUEUE:Broadcast(transmission)
id = "TransmitMessage", id = "TransmitMessage",
params = { params = {
file=filename, file=filename,
duration=call.subduration or 5, duration=transmission.subduration or 5,
subtitle=subtitle, subtitle=transmission.subtitle or "",
loop=false, loop=false,
}} }}
@@ -1088,11 +1095,26 @@ function RADIOQUEUE:Broadcast(transmission)
-- Broadcasting from carrier. No subtitle possible. Need to send messages to players. -- Broadcasting from carrier. No subtitle possible. Need to send messages to players.
self:T(self.lid..string.format("Broadcasting from carrier via trigger.action.radioTransmission().")) self:T(self.lid..string.format("Broadcasting from carrier via trigger.action.radioTransmission()."))
-- Transmit from carrier position. -- Position from where to transmit.
local vec3=self.sendercoord:GetVec3() local vec3=nil
-- Try to get positon from sender unit/static.
if self.sendername then
local coord=self:_GetRadioSenderCoord()
if coord then
vec3=coord:GetVec3()
end
end
-- Try to get fixed positon.
if self.sendercoord and not vec3 then
vec3=self.sendercoord:GetVec3()
end
-- Transmit via trigger. -- Transmit via trigger.
trigger.action.radioTransmission(filename, vec3, self.modulation, false, self.frequency, self.power) if vec3 then
trigger.action.radioTransmission(filename, vec3, self.modulation, false, self.frequency, self.power)
end
end end
end end
@@ -1206,17 +1228,39 @@ function RADIOQUEUE:_GetRadioSender()
return sender return sender
end end
end
if not sender then return nil
sender=STATIC:FindByName(self.sendername) end
--- Get unit from which we want to transmit a radio message. This has to be an aircraft for subtitles to work.
-- @param #RADIOQUEUE self
-- @return Core.Point#COORDINATE Coordinate of the sender unit.
function RADIOQUEUE:_GetRadioSenderCoord()
local vec3=nil
-- Try the general default.
if self.sendername then
-- First try to find a unit
local sender=UNIT:FindByName(self.sendername)
-- Check that sender is alive and an aircraft.
if sender and sender:IsAlive() then
return sender:GetCoodinate()
end
-- Now try a static.
local sender=STATIC:FindByName(self.sendername)
-- Check that sender is alive and an aircraft.
if sender then
return sender:GetCoodinate()
end end
end end
-- Check that sender is alive and an aircraft. return nil
if sender and sender:IsAlive() and sender:IsAir() then
return sender
end
return nil,nil
end end