SuperApe/VariableTimedMover
This verion is for use with any number of Keys and in all Mover InitialStates. Mover → MoveTime becomes a multiplier for the VariableTimedMover → KeyMoveTime array, so keep MoveTime at 1.0 to allow the KeyMoveTime values to represent seconds.
A test map file with this actor is available on this UnrealPlayground Forum thread: [VariableTimedMover]
Properties
Main
- bool bActAsClientMover
- This mover will be disabled on Servers, just as ClientMover.
- array<float> KeyMoveTime
- The time (multiplier of MoveTime) it takes to go from this key number to the next. (Tip: Keep MoveTime at 1.0 to allow the KeyMoveTime values to represent seconds.)
Hidden
- array<float> KeyMoveSpeed
- The actual time in seconds it takes to go from this key number to the next.
Source Code
//============================================================================= // VariableTimedMover // Allows custom MoveTimes per key (modified from a version by Fataloverdose) // by SuperApe -- Sept 2005 //============================================================================= class VariableTimedMover extends Mover; var() bool bActAsClientMover; var() array<float> KeyMoveTime; var array<float> KeyMoveSpeed; function PostBeginPlay() { local int n; for ( n = 0; n < KeyMoveTime.length; n++ ) KeyMoveSpeed[n] = KeyMoveTime[n] * MoveTime; Super.PostBeginPlay(); MoveTime = KeyMoveSpeed[ KeyNum ]; if ( bActAsClientMover && Level.NetMode == NM_DedicatedServer ) { SetTimer( 0, false ); SetPhysics( PHYS_None ); GotoState('ServerIdle'); } } simulated event KeyFrameReached() { MoveTime = KeyMoveSpeed[ KeyNum ]; Super.KeyFrameReached(); } function DoOpen() { MoveTime = KeyMoveSpeed[ KeyNum ]; Super.DoOpen(); } function DoClose() { MoveTime = KeyMoveSpeed[ KeyNum ]; Super.DoClose(); } state ServerIdle { // Do nothing on the Server } state() LoopMove { event KeyFrameReached() { MoveTime = KeyMoveSpeed[ KeyNum ]; Super.KeyFrameReached(); } } state() ConstantLoop { event KeyFrameReached() { MoveTime = KeyMoveSpeed[ KeyNum ]; Super.KeyFrameReached(); } } state() LeadInOutLooper { event KeyFrameReached() { MoveTime = KeyMoveSpeed[ KeyNum ]; Super.KeyFrameReached(); } } state LeadInOutLooping { event KeyFrameReached() { MoveTime = KeyMoveSpeed[ KeyNum ]; Super.KeyFrameReached(); } }