
--Script:LoadScript("scripts/Default/Entities/AI/SoundSupressor.lua");
TV={
	PropertiesInstance = {
		object_Model="Objects/Outdoor/props/PORTABLE_TV/portable_TV.cgf",
		object_ModelDestroyed="",
		nDamage=5,
		fSndRadius = 25,
		fSndVolume = 255,
		AliveSoundLoop={
			sndFilename="",
			InnerRadius=1,
			OuterRadius=10,
			nVolume=255,
		},
		DeadSoundLoop={
			sndFilename="",
			InnerRadius=1,
			OuterRadius=10,
			nVolume=255,
		},
		DyingSound={
			sndFilename="",
			InnerRadius=1,
			OuterRadius=10,
			nVolume=255,
		},

--		nPlayerDamage=100,
--		nPlayerDamageRadius=3,
	},

	Properties = {
		mass = 5,
	},

}

function TV:OnInit()
	self:EnableUpdate(0);
	AI:RegisterWithAI(self.id, AIOBJECT_SNDSUPRESSOR, self.Properties);
	self:SetAICustomFloat( self.PropertiesInstance.fSndRadius );


	self:OnReset();
end

function TV:OnPropertyChange()
	self:OnReset();
end

function TV:OnShutDown()

end



function TV:OnReset()


	if (self.PropertiesInstance.object_Model ~= self.CurrModel) then
		self.CurrModel = self.PropertiesInstance.object_Model;
		self:LoadObject(self.PropertiesInstance.object_Model,0,1);
		self:DrawObject(0,1);
		self:CreateStaticEntity( 10,100 );
		self:CreateRigidBody( 0,self.Properties.Mass,0 );		
	end
	if ((self.PropertiesInstance.object_ModelDestroyed ~="") and 
	(self.PropertiesInstance.object_ModelDestroyed ~= self.CurrDestroyedModel)) then
		self.CurrDestroyedModel = self.PropertiesInstance.object_ModelDestroyed;
		self:LoadObject(self.PropertiesInstance.object_ModelDestroyed,1,1);
		self:DrawObject(1,0);
		self:CreateStaticEntity( 10,100 );
	end
	
	-- stop old sounds
	if (self.DyingSoundLoop and Sound:IsPlaying(self.DyingSound)) then
		Sound:StopSound(self.DyingSound);
	end
	if (self.DeadSoundLoop and Sound:IsPlaying(self.DeadSoundLoop)) then
		Sound:StopSound(self.DeadSoundLoop);
	end
	if (self.AliveSoundLoop and Sound:IsPlaying(self.AliveSoundLoop)) then
		Sound:StopSound(self.AliveSoundLoop);
	end
	-- load sounds
	local SndTbl;
	SndTbl=self.PropertiesInstance.AliveSoundLoop;
	if (SndTbl.sndFilename~="") then
		self.AliveSoundLoop=Sound:Load3DSound(SndTbl.sndFilename, 0);
		if (self.AliveSoundLoop) then
			Sound:SetSoundPosition(self.AliveSoundLoop, self:GetPos());
			Sound:SetSoundLoop(self.AliveSoundLoop, 1);
			Sound:SetSoundVolume(self.AliveSoundLoop, SndTbl.nVolume);
			Sound:SetMinMaxDistance(self.AliveSoundLoop, SndTbl.InnerRadius, SndTbl.OuterRadius);
		end
	else
		self.AliveSoundLoop=nil;
	end
	SndTbl=self.PropertiesInstance.DeadSoundLoop;
	if (SndTbl.sndFilename~="") then
		self.DeadSoundLoop=Sound:Load3DSound(SndTbl.sndFilename, 0);
		if (self.DeadSoundLoop) then
			Sound:SetSoundPosition(self.DeadSoundLoop, self:GetPos());
			Sound:SetSoundLoop(self.DeadSoundLoop, 1);
			Sound:SetSoundVolume(self.DeadSoundLoop, SndTbl.nVolume);
			Sound:SetMinMaxDistance(self.DeadSoundLoop, SndTbl.InnerRadius, SndTbl.OuterRadius);
		end
	else
		self.DeadSoundLoop=nil;
	end
	SndTbl=self.PropertiesInstance.DyingSound;
	if (SndTbl.sndFilename~="") then
		self.DyingSound=Sound:Load3DSound(SndTbl.sndFilename, 0);
		if (self.DyingSound) then
			Sound:SetSoundPosition(self.DyingSound, self:GetPos());
			Sound:SetSoundVolume(self.DyingSound, SndTbl.nVolume);
			Sound:SetMinMaxDistance(self.DyingSound, SndTbl.InnerRadius, SndTbl.OuterRadius);
		end
	else
		self.DyingSound=nil;
	end

	self.curr_damage=self.PropertiesInstance.nDamage;

	System:Log("---RESET TV");
	self:GoAlive();
end

function TV:GoAlive()

	self:EnablePhysics(1);
	self:DrawObject(0,1);
	self:DrawObject(1,0);
	if (self.DeadSoundLoop) then
		Sound:StopSound(self.DeadSoundLoop);
		System:Log("stopping dead-loop");
	end
	self:GotoState( "Active" );
end

function TV:GoDead()
	if (self.DyingSound and (not Sound:IsPlaying(self.DyingSound))) then
		Sound:PlaySound(self.DyingSound);
		System:Log("starting dying");
	end
	if (self.DeadSoundLoop and (not Sound:IsPlaying(self.DeadSoundLoop))) then
		Sound:PlaySound(self.DeadSoundLoop);
		System:Log("starting dead-loop");
	end

	self:GotoState( "Dead" );
end

TV.Active={
	OnBeginState=function(self)
		self:Event_On();
	end,
	OnDamage = function(self,hit)
--		System:Log("ON DAMAGE "..self.id.." AMOUNT="..hit.damage);

			
		self.curr_damage=self.curr_damage-hit.damage;
		
		if(self.curr_damage<=0)then
			self:GoDead();
		end
	end,
}

TV.Dead={
	OnBeginState=function(self)
		System:Log("enter dead");
	
		self:Event_Off();
				
		self:DrawObject(0,0);
		if(self.PropertiesInstance.object_ModelDestroyed~="")then
			self:DrawObject(1,1);
		else
			self:EnablePhysics(0);		
		end
	end,
}


function TV:Event_OnDamage( sender )
	BroadcastEvent( self,"OnDamage" );
end


function TV:Event_On( sender )

	self:TriggerEvent(AIEVENT_ENABLE);

	if (self.AliveSoundLoop and (not Sound:IsPlaying(self.AliveSoundLoop))) then
		Sound:PlaySound(self.AliveSoundLoop);
		System:Log("starting alive-loop");
	end

end

function TV:Event_Off( sender )

	self:TriggerEvent(AIEVENT_DISABLE);

	if (self.AliveSoundLoop) then
		Sound:StopSound(self.AliveSoundLoop);
		System:Log("stopping alive-loop");
	end
end