1
0
KF2-Dev-Scripts/Engine/Classes/AmbientSoundSimpleToggleable.uc
2020-12-13 18:01:13 +03:00

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
}