rott/kf_sources/GamePlay/Classes/TriggerLight.uc
2026-07-14 20:27:09 +07:00

217 lines
5.0 KiB
Ucode

//=============================================================================
// TriggerLight.
// A lightsource which can be triggered on or off.
//=============================================================================
class TriggerLight extends Light;
//-----------------------------------------------------------------------------
// Variables.
var() float ChangeTime; // Time light takes to change from on to off.
var() bool bInitiallyOn; // Whether it's initially on.
var() bool bDelayFullOn; // Delay then go full-on.
var() float RemainOnTime; // How long the TriggerPound effect lasts
var float InitialBrightness; // Initial brightness.
var float Alpha, Direction;
var actor SavedTrigger;
var float poundTime;
//-----------------------------------------------------------------------------
// Engine functions.
// Called at start of gameplay.
simulated function BeginPlay()
{
if( PlatformIsOpenGL() )
{
bHidden = true;
bDynamicLight = false;
return;
}
// Remember initial light type and set new one.
InitialBrightness = LightBrightness;
if( bInitiallyOn )
{
Alpha = 1.0;
Direction = 1.0;
}
else
{
Alpha = 0.0;
Direction = -1.0;
}
SetDrawType(DT_None);
}
// Called whenever time passes.
// if_RO_
simulated function Tick( float DeltaTime )
// else
//function Tick( float DeltaTime )
{
Alpha += Direction * DeltaTime / ChangeTime;
if( Alpha > 1.0 )
{
Alpha = 1.0;
Disable( 'Tick' );
if( SavedTrigger != None )
SavedTrigger.EndEvent();
}
else if( Alpha < 0.0 )
{
Alpha = 0.0;
Disable( 'Tick' );
if( SavedTrigger != None )
SavedTrigger.EndEvent();
}
if( !bDelayFullOn )
LightBrightness = Alpha * InitialBrightness;
else if( (Direction>0 && Alpha!=1) || Alpha==0 )
LightBrightness = 0;
else
LightBrightness = InitialBrightness;
}
//-----------------------------------------------------------------------------
// Public states.
// Trigger turns the light on.
// if_RO_
simulated state() TriggerTurnsOn
// else
//state() TriggerTurnsOn
{
// if_RO_
simulated function Trigger( actor Other, pawn EventInstigator )
// else
//function Trigger( actor Other, pawn EventInstigator )
{
if( SavedTrigger!=None )
SavedTrigger.EndEvent();
SavedTrigger = Other;
SavedTrigger.BeginEvent();
Direction = 1.0;
Enable( 'Tick' );
}
}
// Trigger turns the light off.
// if_RO_
simulated state() TriggerTurnsOff
// else
//state() TriggerTurnsOff
{
// if_RO_
simulated function Trigger( actor Other, pawn EventInstigator )
// else
//function Trigger( actor Other, pawn EventInstigator )
{
if( SavedTrigger!=None )
SavedTrigger.EndEvent();
SavedTrigger = Other;
SavedTrigger.BeginEvent();
Direction = -1.0;
Enable( 'Tick' );
}
}
// Trigger toggles the light.
// if_RO_
simulated state() TriggerToggle
// else
//state() TriggerToggle
{
// if_RO_
simulated function Trigger( actor Other, pawn EventInstigator )
// else
//function Trigger( actor Other, pawn EventInstigator )
{
if( SavedTrigger!=None )
SavedTrigger.EndEvent();
SavedTrigger = Other;
SavedTrigger.BeginEvent();
Direction *= -1;
Enable( 'Tick' );
}
}
// Trigger controls the light.
simulated state() TriggerControl
// else
//state() TriggerControl
{
// if_RO_
simulated function Trigger( actor Other, pawn EventInstigator )
// else
//function Trigger( actor Other, pawn EventInstigator )
{
if( SavedTrigger!=None )
SavedTrigger.EndEvent();
SavedTrigger = Other;
SavedTrigger.BeginEvent();
if( bInitiallyOn ) Direction = -1.0;
else Direction = 1.0;
Enable( 'Tick' );
}
// if_RO_
simulated function UnTrigger( actor Other, pawn EventInstigator )
// else
//function UnTrigger( actor Other, pawn EventInstigator )
{
if( SavedTrigger!=None )
SavedTrigger.EndEvent();
SavedTrigger = Other;
SavedTrigger.BeginEvent();
if( bInitiallyOn ) Direction = 1.0;
else Direction = -1.0;
Enable( 'Tick' );
}
}
simulated state() TriggerPound
// else
//state() TriggerPound
{
// if_RO_
simulated function Timer ()
// else
//function Timer ()
{
if (poundTime >= RemainOnTime) {
Disable ('Timer');
}
poundTime += ChangeTime;
Direction *= -1;
SetTimer (ChangeTime, false);
}
// if_RO_
simulated function Trigger( actor Other, pawn EventInstigator )
// else
//function Trigger( actor Other, pawn EventInstigator )
{
if( SavedTrigger!=None )
SavedTrigger.EndEvent();
SavedTrigger = Other;
SavedTrigger.BeginEvent();
Direction = 1;
poundTime = ChangeTime; // how much time will pass till reversal
SetTimer (ChangeTime, false); // wake up when it's time to reverse
Enable ('Timer');
Enable ('Tick');
}
}
defaultproperties
{
RemoteRole=ROLE_SimulatedProxy
bHidden=False
bStatic=False
bMovable=True
bDynamicLight=True
}