IW4-Dump-Files/maps/_escalator.gsc

102 lines
1.9 KiB
Plaintext

#include common_scripts\utility;
/*******************
- prefabs/bookstore/escalator_up.map
- prefabs/bookstore/escalator_down.map
These two prefabs are set up to work with the script.
TODO: Make them trigger or radius based so that they don't run all the time.
*******************/
init()
{
flag_init( "_escalator_on" );
flag_set( "_escalator_on" );
level.escalator_movespeed = .5;
array = getentarray( "escalator", "targetname" );
array_thread( array, ::escalator_startup );
}
escalator_startup()
{
step = self;
while ( isdefined( step.target ) )
{
step StartUsingLessFrequentLighting();
step.true_origin = step.origin;
step.next_step = getent( step.target, "targetname" );
step = step.next_step;
}
step.true_origin = step.origin;
step.last = 1;
step.next_step = self;
thread escalator_move( self );
}
escalator_move( first_step )
{
step = first_step;
first_origin = step.origin;
while ( flag( "_escalator_on" ) )
{
movespeed = level.escalator_movespeed;
next_step = step.next_step;
step show();
if ( next_step != first_step )
step moveto( next_step.true_origin, movespeed );
else
step.origin = first_origin;
if ( next_step == first_step )
{
step hide();
step.true_origin = first_origin;
first_step = step;
wait movespeed;
continue;
}
step.true_origin = next_step.true_origin;
step = next_step;
}
step = first_step;
while( 1 )
{
movespeed = 2;
next_step = step.next_step;
step show();
step thread final_move( movespeed, next_step );
if ( next_step == first_step )
{
step hide();
step.true_origin = first_origin;
}
step.true_origin = next_step.true_origin;
step = next_step;
if( step == first_step )
return;
}
}
final_move( movespeed, next_step )
{
self moveto( next_step.true_origin, movespeed, 0, movespeed );
wait movespeed;
self moveto( self.origin, .05 );
}