//=============================================================================
// TriggeredAmbSound.
// A sound source which can be triggered on or off.
//=============================================================================
class TriggeredAmbSound expands AmbientSound;
var() float TurnOnTime; // Time sound takes to change from off to on
var() float TurnOffTime; // Time sound takes to change from on to off
var() bool bInitiallyOn; // Whether it's initially on
var() float RemainOnTime; // How long the TriggerPound effect lasts
var float InitialSoundVolume; // Initial volume
var Sound InitialAmbientSound; // Initial sound
var float Alpha;
var bool bNextOn;
var Actor SavedTrigger;
var float PoundTime;
event BeginPlay()
{
InitialSoundVolume = SoundVolume;
InitialAmbientSound = AmbientSound;
bNextOn = bInitiallyOn;
if (bInitiallyOn)
Alpha = 1;
else
Alpha = 0;
}
event Tick(float DeltaTime)
{
if (bNextOn)
{
Alpha += DeltaTime / FMax(TurnOnTime, DeltaTime);
if (Alpha >= 1)
{
Alpha = 1;
Disable('Tick');
if (SavedTrigger != none)
SavedTrigger.EndEvent();
}
}
else
{
Alpha -= DeltaTime / FMax(TurnOffTime, DeltaTime);
if (Alpha <= 0)
{
Alpha = 0;
Disable('Tick');
if (SavedTrigger != none)
SavedTrigger.EndEvent();
}
}
UpdateAmbientSound();
}
// Trigger turns the sound on
state() TriggerTurnsOn
{
event Trigger(Actor A, Pawn EventInstigator)
{
if (SavedTrigger != none)
SavedTrigger.EndEvent();
SavedTrigger = A;
if (SavedTrigger != none)
SavedTrigger.BeginEvent();
bNextOn = true;
Enable('Tick');
}
}
// Trigger turns the sound off
state() TriggerTurnsOff
{
event Trigger(Actor A, Pawn EventInstigator)
{
if (SavedTrigger != none)
SavedTrigger.EndEvent();
SavedTrigger = A;
if (SavedTrigger != none)
SavedTrigger.BeginEvent();
bNextOn = false;
Enable('Tick');
}
}
// Trigger toggles the sound
state() TriggerToggle
{
event Trigger(Actor A, Pawn EventInstigator)
{
if (SavedTrigger != none)
SavedTrigger.EndEvent();
SavedTrigger = A;
if (SavedTrigger != none)
SavedTrigger.BeginEvent();
bNextOn = !bNextOn;
Enable('Tick');
}
}
// Trigger controls the sound
state() TriggerControl
{
event Trigger(Actor A, Pawn EventInstigator)
{
if (SavedTrigger != none)
SavedTrigger.EndEvent();
SavedTrigger = A;
if (SavedTrigger != none)
SavedTrigger.BeginEvent();
bNextOn = !bInitiallyOn;
Enable('Tick');
}
event UnTrigger(Actor A, Pawn EventInstigator)
{
if (SavedTrigger != none)
SavedTrigger.EndEvent();
SavedTrigger = A;
if (SavedTrigger != none)
SavedTrigger.BeginEvent();
bNextOn = bInitiallyOn;
Enable('Tick');
}
}
state() TriggerPound
{
event Timer()
{
if (RemainOnTime > 0 && PoundTime >= RemainOnTime)
return;
bNextOn = !bNextOn;
if (bNextOn)
{
PoundTime += TurnOnTime;
SetTimer(TurnOnTime, false);
}
else
{
PoundTime += TurnOffTime;
SetTimer(TurnOffTime, false);
}
}
event Trigger(Actor A, Pawn EventInstigator)
{
if (SavedTrigger != none)
SavedTrigger.EndEvent();
SavedTrigger = A;
if (SavedTrigger != none)
SavedTrigger.BeginEvent();
bNextOn = !bInitiallyOn;
// how much time will pass till reversal
if (bNextOn)
PoundTime = TurnOnTime;
else
PoundTime = TurnOffTime;
SetTimer(PoundTime, false); // wake up when it's time to reverse
Enable('Tick');
}
function Reset()
{
SetTimer(0, false);
global.Reset();
}
}
// Reset the sound
function Reset()
{
if (bInitiallyOn)
{
Alpha = 1;
bNextOn = true;
}
else
{
Alpha = 0;
bNextOn = false;
}
UpdateAmbientSound();
}
function UpdateAmbientSound()
{
SoundVolume = Alpha * InitialSoundVolume;
if (SoundVolume > 0)
AmbientSound = InitialAmbientSound;
else
AmbientSound = none;
}
defaultproperties
{
bNoDelete=True
bStatic=False
}