147 lines
2.8 KiB
Ucode
147 lines
2.8 KiB
Ucode
|
/**
|
||
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
||
|
*/
|
||
|
|
||
|
// An ambient sound that can be turned on or off
|
||
|
|
||
|
class AmbientSoundSimpleToggleable extends AmbientSoundSimple
|
||
|
AutoExpandCategories( AmbientSoundSimpleToggleable )
|
||
|
native( Sound );
|
||
|
|
||
|
/** used to update status of toggleable level placed ambient sounds on clients */
|
||
|
var repnotify bool bCurrentlyPlaying;
|
||
|
|
||
|
var() bool bFadeOnToggle;
|
||
|
var() float FadeInDuration;
|
||
|
var() float FadeInVolumeLevel;
|
||
|
var() float FadeOutDuration;
|
||
|
var() float FadeOutVolumeLevel;
|
||
|
|
||
|
/** Used to track whether the sound's auto-play setting should be ignored or not */
|
||
|
var transient bool bIgnoreAutoPlay;
|
||
|
|
||
|
struct CheckpointRecord
|
||
|
{
|
||
|
var bool bCurrentlyPlaying;
|
||
|
};
|
||
|
|
||
|
replication
|
||
|
{
|
||
|
if( Role == ROLE_Authority )
|
||
|
bCurrentlyPlaying;
|
||
|
}
|
||
|
|
||
|
simulated event PostBeginPlay()
|
||
|
{
|
||
|
Super.PostBeginPlay();
|
||
|
|
||
|
bCurrentlyPlaying = AudioComponent.bAutoPlay;
|
||
|
}
|
||
|
|
||
|
simulated event ReplicatedEvent(name VarName)
|
||
|
{
|
||
|
if( VarName == 'bCurrentlyPlaying' )
|
||
|
{
|
||
|
if( bCurrentlyPlaying )
|
||
|
{
|
||
|
StartPlaying();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
StopPlaying();
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Super.ReplicatedEvent( VarName );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
simulated function StartPlaying()
|
||
|
{
|
||
|
if( bFadeOnToggle )
|
||
|
{
|
||
|
AudioComponent.FadeIn( FadeInDuration, FadeInVolumeLevel );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AudioComponent.Play();
|
||
|
}
|
||
|
|
||
|
bCurrentlyPlaying = TRUE;
|
||
|
}
|
||
|
|
||
|
simulated function StopPlaying()
|
||
|
{
|
||
|
if( bFadeOnToggle )
|
||
|
{
|
||
|
AudioComponent.FadeOut( FadeOutDuration, FadeOutVolumeLevel );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AudioComponent.Stop();
|
||
|
}
|
||
|
|
||
|
bCurrentlyPlaying = FALSE;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Handling Toggle event from Kismet.
|
||
|
*/
|
||
|
simulated function OnToggle( SeqAct_Toggle Action )
|
||
|
{
|
||
|
if( Action.InputLinks[0].bHasImpulse || ( Action.InputLinks[2].bHasImpulse && !AudioComponent.bWasPlaying ) )
|
||
|
{
|
||
|
StartPlaying();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// The sound has been intentionally toggled off, ignore autoplay from now on
|
||
|
bIgnoreAutoPlay = TRUE;
|
||
|
StopPlaying();
|
||
|
}
|
||
|
|
||
|
// we now need to replicate this Actor so clients get the updated status
|
||
|
ForceNetRelevant();
|
||
|
}
|
||
|
|
||
|
function CreateCheckpointRecord( out CheckpointRecord Record )
|
||
|
{
|
||
|
Record.bCurrentlyPlaying = bCurrentlyPlaying;
|
||
|
}
|
||
|
|
||
|
function ApplyCheckpointRecord( const out CheckpointRecord Record )
|
||
|
{
|
||
|
bCurrentlyPlaying = Record.bCurrentlyPlaying;
|
||
|
if( bCurrentlyPlaying )
|
||
|
{
|
||
|
StartPlaying();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
StopPlaying();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
defaultproperties
|
||
|
{
|
||
|
Begin Object NAME=Sprite
|
||
|
Sprite=Texture2D'EditorResources.AmbientSoundIcons.S_Ambient_Sound_Toggleable'
|
||
|
Scale=0.25
|
||
|
End Object
|
||
|
|
||
|
Begin Object Name=DrawSoundRadius0
|
||
|
SphereColor=(R=255,G=255,B=102)
|
||
|
End Object
|
||
|
|
||
|
bAutoPlay=FALSE
|
||
|
bStatic=false
|
||
|
bNoDelete=true
|
||
|
bIgnoreAutoPlay=FALSE
|
||
|
|
||
|
FadeInDuration=1.f
|
||
|
FadeInVolumeLevel=1.f
|
||
|
FadeOutDuration=1.f
|
||
|
FadeOutVolumeLevel=0.f
|
||
|
}
|