102 lines
2.5 KiB
Ucode
102 lines
2.5 KiB
Ucode
//=================================================
|
|
// BEResettableCounter - Slinky - 4/28/05
|
|
//=================================================
|
|
// Just like Counter, but resets itself when
|
|
// untriggered.
|
|
//=================================================
|
|
// Black Ether Studios, 2005.
|
|
//=================================================
|
|
class BEResettableCounter extends Counter;
|
|
|
|
var () int CountDownInterval; // time between each decrement of the counter when it is in state_TimedCountDown
|
|
var () string TimeUpMessage;
|
|
var bool bCounting; // True when counter is counting down. False when it has been halted, via another trigger call.
|
|
|
|
event Untrigger( Actor Other, Pawn EventInstigator )
|
|
{
|
|
Reset();
|
|
}
|
|
|
|
// Counter was triggered.
|
|
// Other trigger turns this on.
|
|
function Trigger( actor Other, pawn EventInstigator )
|
|
{
|
|
local string S;
|
|
local string Num;
|
|
|
|
if( NumToCount > 0 )
|
|
{
|
|
if( --NumToCount == 0 )
|
|
{
|
|
// Trigger all matching actors.
|
|
if( bShowMessage && (CompleteMessage != ""))
|
|
Level.Game.Broadcast(Self,CompleteMessage,'CriticalEvent');
|
|
TriggerEvent(Event,Other,EventInstigator);
|
|
}
|
|
else if( bShowMessage && CountMessage != "" )
|
|
{
|
|
// Still counting down.
|
|
switch( NumToCount )
|
|
{
|
|
case 1: Num="one"; break;
|
|
case 2: Num="two"; break;
|
|
case 3: Num="three"; break;
|
|
case 4: Num="four"; break;
|
|
case 5: Num="five"; break;
|
|
case 6: Num="six"; break;
|
|
default: Num=string(NumToCount); break;
|
|
}
|
|
S = CountMessage;
|
|
ReplaceText(S,"%i",Num);
|
|
Level.Game.Broadcast(Self,S,'CriticalEvent');
|
|
}
|
|
}
|
|
}
|
|
|
|
function Timer()
|
|
{
|
|
if (!bCounting)
|
|
return;
|
|
|
|
NumToCount --;
|
|
|
|
// Counter made it to zero. we failed.
|
|
if(NumToCount <= 0)
|
|
{
|
|
if( TimeUpMessage!="" )
|
|
Level.Game.Broadcast(Self,TimeUpMessage,'CriticalEvent');
|
|
TriggerEvent(Event,self,Instigator);
|
|
SetTimer(0,false);
|
|
bCounting = false;
|
|
}
|
|
else Level.Game.Broadcast(Self,"00:"$NumToCount,'CriticalEvent');
|
|
}
|
|
|
|
// Other trigger turns this on.
|
|
state() TimedCountDown
|
|
{
|
|
function Trigger( actor Other, pawn EventInstigator )
|
|
{
|
|
Instigator = EventInstigator;
|
|
|
|
// If we ARE counting down, start the timer. Otherwise, we've been asked to halt. Let the timer know, so it can
|
|
// stop itself in the next iteration.
|
|
if (!bCounting)
|
|
{
|
|
SetTimer(CountDownInterval,true);
|
|
bCounting = true;
|
|
}
|
|
else if(bCounting)
|
|
{
|
|
bCounting = false;
|
|
SetTimer(0,false);
|
|
}
|
|
}
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
CountDownInterval=1
|
|
TimeUpMessage="TIME UP"
|
|
}
|