152 lines
2.8 KiB
Ucode
152 lines
2.8 KiB
Ucode
class AnimatedDecoration extends Decoration;
|
|
|
|
#exec OBJ LOAD FILE=Foundry_anim.ukx
|
|
|
|
var() bool bActive;
|
|
var bool bLoop;
|
|
|
|
var() float ActivationDelay;
|
|
var() bool bRandomActivationDelay;
|
|
var bool bPendingState; // bActive value, which will be set on timer
|
|
|
|
var() const name Animation;
|
|
var() const bool bHiddenWhenInactive;
|
|
var(Sound) const bool bAmbientSoundOnlyWhenActive;
|
|
|
|
|
|
replication
|
|
{
|
|
reliable if( bNetInitial && Role == Role_Authority )
|
|
Animation, bHiddenWhenInactive, bAmbientSoundOnlyWhenActive;
|
|
|
|
reliable if( (bNetInitial || bNetDirty) && Role == Role_Authority )
|
|
bActive, bLoop;
|
|
}
|
|
|
|
function PostBeginPlay()
|
|
{
|
|
if ( bActive ) {
|
|
bActive = false;
|
|
DelayedActivation(true);
|
|
}
|
|
else
|
|
SetActive(false);
|
|
}
|
|
|
|
function DelayedActivation(bool bActivate)
|
|
{
|
|
bPendingState = bActivate;
|
|
|
|
if ( ActivationDelay > 0 ) {
|
|
if ( bRandomActivationDelay )
|
|
SetTimer(fmax(ActivationDelay*frand(), 0.01), false);
|
|
else
|
|
SetTimer(ActivationDelay*frand(), false);
|
|
}
|
|
else
|
|
SetActive(bActivate);
|
|
}
|
|
|
|
simulated function Timer()
|
|
{
|
|
SetActive(bPendingState);
|
|
}
|
|
|
|
|
|
simulated function PostNetReceive()
|
|
{
|
|
SetActive(bActive);
|
|
}
|
|
|
|
|
|
simulated function SetActive(bool value)
|
|
{
|
|
if ( bActive != value ) {
|
|
bActive = value;
|
|
if ( Role == ROLE_Authority )
|
|
NetUpdateTime = Level.TimeSeconds - 1;
|
|
}
|
|
|
|
if ( Level.NetMode != NM_DedicatedServer ) {
|
|
if ( bActive ) {
|
|
if ( bLoop )
|
|
LoopAnim(Animation);
|
|
else {
|
|
PlayAnim(Animation);
|
|
// set inactive when animation ends
|
|
bPendingState = false;
|
|
SetTimer(GetAnimDuration(Animation), false);
|
|
}
|
|
|
|
if ( bAmbientSoundOnlyWhenActive )
|
|
AmbientSound = default.AmbientSound;
|
|
}
|
|
else {
|
|
StopAnimating();
|
|
if ( bAmbientSoundOnlyWhenActive )
|
|
AmbientSound = none;
|
|
}
|
|
if ( bHiddenWhenInactive )
|
|
bHidden = !bActive;
|
|
}
|
|
}
|
|
|
|
state() TriggerTurnsOn
|
|
{
|
|
function BeginState()
|
|
{
|
|
bLoop = true;
|
|
}
|
|
|
|
function Trigger( actor Other, pawn EventInstigator )
|
|
{
|
|
Instigator = EventInstigator;
|
|
DelayedActivation(true);
|
|
}
|
|
}
|
|
|
|
state() TriggerPlayOnce extends TriggerTurnsOn
|
|
{
|
|
function BeginState()
|
|
{
|
|
bLoop = false;
|
|
}
|
|
}
|
|
|
|
state() TriggerTurnsOff
|
|
{
|
|
function Trigger( actor Other, pawn EventInstigator )
|
|
{
|
|
Instigator = EventInstigator;
|
|
SetActive(false);
|
|
}
|
|
}
|
|
|
|
state() TriggerToggle
|
|
{
|
|
function BeginState()
|
|
{
|
|
bLoop = true;
|
|
}
|
|
|
|
function Trigger( actor Other, pawn EventInstigator )
|
|
{
|
|
Instigator = EventInstigator;
|
|
if ( bActive )
|
|
SetActive(false);
|
|
else
|
|
DelayedActivation(true);
|
|
}
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
bLoop=True
|
|
bStatic=False
|
|
bStasis=False
|
|
bAlwaysRelevant=True
|
|
RemoteRole=ROLE_SimulatedProxy
|
|
Mesh=SkeletalMesh'Foundry_anim.Steamengine_Wheel'
|
|
bNetNotify=True
|
|
}
|