--/ -----------------------------------------------------------------------------------------------
class "CDynamicMusic" --/ Динамическая музыка
--/ -----------------------------------------------------------------------------------------------
--/ CONSTRUCTION
--/ ---------------------------------------------
function CDynamicMusic:__init()
self.snd_obj_r = nil
self.snd_obj_l = nil
self.time_end = nil
end
function CDynamicMusic:initialize(sSound,iVol)
-- log("dm:initialize:sound=[%s]:[%s]", sSound, ">") --/#~#
self.snd_obj_r = sound_object(sSound.."_r")
self.snd_obj_l = sound_object(sSound.."_l")
if not (self.snd_obj_r and self.snd_obj_l) then
log("initialize:Cannot open sound file=[%s],r=[%s],l=[%s]:<%s>", sSound, self.snd_obj_r == nil, self.snd_obj_l == nil, "Error!")
abort("%s:initialize:Cannot open sound file=[%s]", sModule, sSound)
end
self.time_end = nil
if iVol then
self:Set_Volume(iVol)
end
end
function CDynamicMusic:Play(iTimePlay,iVol)
self:Stop()
local oActor = db.actor
if not (oActor and self.snd_obj_r and self.snd_obj_l) then return end --/>
local iTimeOut = 0
if iTimePlay then
iTimeOut = (math.min(0,iTimePlay - time_global()))*0.001
end
local vDir = device().cam_right:set_length(0.1)
vDir.y = 0
self.snd_obj_r:play_at_pos(oActor,vDir,iTimeOut,sound_object.s2d)
vDir.x = -vDir.x
vDir.z = -vDir.z
self.snd_obj_l:play_at_pos(oActor,vDir,iTimeOut,sound_object.s2d)
if iVol then
self:Set_Volume(iVol)
else
self:Set_Volume(iAmbientVol)
end
local iTimeLength = self:Get_Length() or 1
self.time_end = (iTimePlay or time_global()) + iTimeLength
return self.time_end
end
function CDynamicMusic:Update()
if self:Get_Playing() then
local vDir = device().cam_right:set_length(0.1)
vDir.y = 0
self.snd_obj_r:set_position(vDir)
vDir.x = -vDir.x
vDir.z = -vDir.z
self.snd_obj_l:set_position(vDir)
self:Set_Volume(iAmbientVol)
end
end
function CDynamicMusic:Stop()
if self.snd_obj_r and self.snd_obj_r:playing() then self.snd_obj_r:stop() end
if self.snd_obj_l and self.snd_obj_l:playing() then self.snd_obj_l:stop() end
end
function CDynamicMusic:Get_Playing()
return (self.snd_obj_l ~= nil and self.snd_obj_l:playing() and self.snd_obj_r ~= nil and self.snd_obj_r:playing())
end
function CDynamicMusic:Get_Length()
if self.snd_obj_r then
return self.snd_obj_r:length()
elseif self.snd_obj_l then
return self.snd_obj_l:length()
end
return nil
end
function CDynamicMusic:Set_Volume(iVol)
if self.snd_obj_r then self.snd_obj_r.volume = iVol end
if self.snd_obj_l then self.snd_obj_l.volume = iVol end
end
function CDynamicMusic:__finalize()
-- log("dm:finalize:[%s]", "x") --/#~#
end