iw6-scripts/maps/_geo_mover.gsc
2024-02-13 13:20:49 +01:00

185 lines
4.8 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
trigger_moveto( var_0 )
{
if ( !isdefined( level.mover_candidates ) )
{
level.mover_candidates = getentarray( "script_brushmodel", "classname" );
level.mover_candidates = common_scripts\utility::array_combine( level.mover_candidates, getentarray( "script_model", "classname" ) );
level.mover_object = common_scripts\utility::spawn_tag_origin();
}
var_1 = getentarray( self.target, "targetname" );
common_scripts\utility::array_thread( var_1, ::moveto_volume_think, self );
}
moveto_volume_think( var_0 )
{
var_1 = [];
var_2 = self;
foreach ( var_4 in level.mover_candidates )
{
level.mover_object.origin = var_4.origin;
if ( level.mover_object istouching( var_2 ) )
{
level.mover_candidates = common_scripts\utility::array_remove( level.mover_candidates, var_4 );
var_1 = common_scripts\utility::array_add( var_1, var_4 );
}
}
var_6 = undefined;
foreach ( var_4 in var_1 )
{
if ( isdefined( var_4.script_noteworthy ) && var_4.script_noteworthy == "mover" || isdefined( var_4.targetname ) && var_4.targetname == "mover" )
{
var_6 = var_4;
break;
}
}
foreach ( var_4 in var_1 )
{
if ( var_6 != var_4 )
var_4 linkto( var_6 );
}
var_11 = common_scripts\utility::get_target_ent();
if ( !isdefined( var_11.angles ) )
var_11.angles = ( 0, 0, 0 );
var_0.mover = var_6;
var_6.origin = var_11.origin;
var_6.angles = var_11.angles;
var_12 = undefined;
var_13 = 5;
var_14 = 0;
var_15 = 0;
if ( isdefined( var_11.script_duration ) )
var_13 = var_11.script_duration;
if ( isdefined( var_11.script_accel ) )
var_14 = var_11.script_accel;
if ( isdefined( var_11.script_decel ) )
var_15 = var_11.script_decel;
if ( isdefined( var_11.script_earthquake ) )
var_12 = var_11.script_earthquake;
var_0 waittill( "trigger" );
var_11 maps\_utility::script_delay();
if ( isdefined( var_11.target ) )
var_11 = var_11 common_scripts\utility::get_target_ent();
else
var_11 = undefined;
while ( isdefined( var_11 ) )
{
if ( isdefined( var_12 ) )
{
if ( issubstr( var_12, "constant" ) )
var_6 thread constant_quake( var_12 );
}
if ( !isdefined( var_11.angles ) )
var_11.angles = ( 0, 0, 0 );
var_6 moveto_rotateto( var_11, var_13, var_14, var_15 );
var_6 notify( "stop_constant_quake" );
var_13 = 5;
var_14 = 0;
var_15 = 0;
var_12 = undefined;
var_11 maps\_utility::script_delay();
if ( isdefined( var_11.script_duration ) )
var_13 = var_11.script_duration;
if ( isdefined( var_11.script_accel ) )
var_14 = var_11.script_accel;
if ( isdefined( var_11.script_decel ) )
var_15 = var_11.script_decel;
if ( isdefined( var_11.script_earthquake ) )
var_12 = var_11.script_earthquake;
var_16 = var_11 common_scripts\utility::get_linked_ents();
if ( var_16.size > 0 )
{
if ( issubstr( var_16[0].classname, "trigger" ) )
var_16[0] waittill( "trigger" );
}
if ( isdefined( var_11.target ) )
{
var_11 = var_11 common_scripts\utility::get_target_ent();
continue;
}
var_11 = undefined;
}
self notify( "done_moving" );
}
constant_quake( var_0 )
{
self endon( "stop_constant_quake" );
for (;;)
{
thread common_scripts\utility::do_earthquake( var_0, self.origin );
wait( randomfloatrange( 0.1, 0.2 ) );
}
}
moveto_rotateto_speed( var_0, var_1, var_2, var_3 )
{
var_4 = var_0.origin;
var_5 = self.origin;
var_6 = distance( var_5, var_4 );
var_7 = var_6 / var_1;
if ( !isdefined( var_2 ) )
var_2 = 0;
if ( !isdefined( var_3 ) )
var_3 = 0;
self rotateto( var_0.angles, var_7, var_7 * var_2, var_7 * var_3 );
self moveto( var_4, var_7, var_7 * var_2, var_7 * var_3 );
self waittill( "movedone" );
}
moveto_rotateto( var_0, var_1, var_2, var_3 )
{
self moveto( var_0.origin, var_1, var_2, var_3 );
self rotateto( var_0.angles, var_1, var_2, var_3 );
self waittill( "movedone" );
}
set_start_positions( var_0 )
{
var_1 = common_scripts\utility::getstructarray( var_0, "targetname" );
foreach ( var_3 in var_1 )
{
switch ( var_3.script_noteworthy )
{
case "player":
level.player setorigin( var_3.origin );
level.player setplayerangles( var_3.angles );
break;
}
}
}