iw6-scripts/animscripts/cover_multi.gsc
2024-02-13 13:20:49 +01:00

344 lines
8.5 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
if ( !isdefined( self.cover ) )
self.cover = spawnstruct();
self.cover.state = "none";
self.cover.laststatechangetime = 0;
self.cover.istatechange = 0;
self.cover.hidestate = covermulti_choosehidestate();
self.cover.fnoverlord = ::covermulti_think;
self.covernode = self.node;
covermulti_think();
}
end_script()
{
covermulti_exitstate( self.cover.state );
self.cover.fnoverlord = undefined;
self.cover.laststatechangetime = undefined;
self.cover.istatechange = undefined;
animscripts\corner::end_script_corner();
animscripts\cover_behavior::end_script( "multi" );
}
covermulti_think()
{
if ( !isdefined( self.covernode ) )
return;
var_0 = self.covernode getvalidcoverpeekouts();
if ( isdefined( self.cover.arrivalnodetype ) )
{
if ( covermulti_isvaliddir( self.cover.arrivalnodetype, var_0 ) )
{
var_1 = covermulti_setdir( self.cover.arrivalnodetype );
self.cover.arrivalnodetype = undefined;
return;
}
}
if ( !isdefined( self.enemy ) )
{
covermulti_setdir( covermulti_getrandomvaliddir( var_0 ) );
return;
}
var_2 = self.covernode.origin;
var_3 = self.enemy.origin;
var_4 = var_3 - var_2;
var_5 = vectortoangles( var_4 );
var_6 = angleclamp180( var_5[1] - self.covernode.angles[1] );
var_7 = undefined;
if ( var_6 > 12 )
var_8 = [ "left", "over", "right" ];
else if ( var_6 < -12 )
var_8 = [ "right", "over", "left" ];
else if ( var_6 > 5 )
{
var_8 = [ [ "left", "over" ], "right" ];
var_7 = 15000;
}
else if ( var_6 < -5 )
{
var_8 = [ [ "right", "over" ], "left" ];
var_7 = 15000;
}
else
{
var_8 = [ "over", [ "right", "left" ] ];
var_7 = 15000;
}
var_9 = covermulti_getbestvaliddir( var_8, var_0 );
var_1 = covermulti_setdir( var_9, var_7 );
}
covermulti_isvaliddir( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = self.node getvalidcoverpeekouts();
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
if ( var_1[var_2] == var_0 )
return 1;
}
return 0;
}
covermulti_getbestvaliddir( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = self.node getvalidcoverpeekouts();
var_2 = [];
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
{
var_4 = var_0[var_3];
if ( !isarray( var_4 ) )
{
var_2[var_2.size] = var_4;
continue;
}
var_4 = common_scripts\utility::array_randomize( var_4 );
for ( var_5 = 0; var_5 < var_4.size; var_5++ )
var_2[var_2.size] = var_4[var_5];
}
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
{
if ( covermulti_isvaliddir( var_2[var_3], var_1 ) )
return var_2[var_3];
}
}
covermulti_getrandomvaliddir( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = self.node getvalidcoverpeekouts();
var_1 = randomint( var_0.size );
return var_0[var_1];
}
covermulti_getnonrandomvaliddir( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = self getvalidcoverpeekouts();
if ( var_0[0] == "over" )
{
if ( self doesnodeallowstance( "stand" ) )
return "stand";
else
return "crouch";
}
return var_0[0];
}
covermulti_setdir( var_0, var_1 )
{
if ( var_0 == "over" )
{
var_2 = self.node doesnodeallowstance( "stand" );
var_3 = self.node doesnodeallowstance( "crouch" );
if ( var_2 )
{
if ( self.cover.state != "crouch" || !var_3 )
covermulti_setstate( "stand", var_1 );
return 1;
}
else if ( var_3 )
{
if ( self.cover.state != "stand" || !var_2 )
covermulti_setstate( "crouch", var_1 );
return 1;
}
else
{
}
}
else
{
covermulti_setstate( var_0, var_1 );
return 1;
}
return 0;
}
covermulti_setstate( var_0, var_1 )
{
if ( self.cover.state == var_0 )
return 0;
if ( !isdefined( var_1 ) || var_1 < 0 )
var_1 = 5000;
var_2 = gettime();
if ( self.cover.laststatechangetime > 0 && var_2 - self.cover.laststatechangetime < var_1 )
return 0;
self.cover.laststatechangetime = var_2;
thread covermulti_setstateinternal( var_0 );
return 1;
}
covermulti_setstateinternal( var_0 )
{
self notify( "killanimscript" );
var_1 = covermulti_choosehidestate();
covermulti_dotransition( self.cover.state, self.a.pose, self.cover.hidestate, var_0, self.a.pose, var_1 );
covermulti_exitstate( self.cover.state );
self.cover.state = var_0;
self.cover.hidestate = var_1;
covermulti_enterstate( self.cover.state );
}
covermulti_enterstate( var_0 )
{
if ( var_0 == "left" )
animscripts\cover_left::main();
else if ( var_0 == "right" )
animscripts\cover_right::main();
else if ( var_0 == "stand" )
animscripts\cover_stand::main();
else if ( var_0 == "crouch" )
animscripts\cover_crouch::main();
else
{
}
}
covermulti_exitstate( var_0 )
{
switch ( var_0 )
{
case "left":
animscripts\cover_left::end_script();
break;
case "right":
animscripts\cover_right::end_script();
break;
case "stand":
animscripts\cover_stand::end_script();
break;
case "crouch":
animscripts\cover_crouch::end_script();
break;
}
}
#using_animtree("generic_human");
covermulti_dotransition( var_0, var_1, var_2, var_3, var_4, var_5 )
{
self endon( "killanimscript" );
if ( var_0 == "none" || var_3 == "none" )
return;
var_6 = covermulti_getanimtransition( var_0, var_1, var_2, var_3, var_4, var_5 );
if ( !isdefined( var_6 ) )
return;
self setflaggedanimknoball( "cover_multi_trans", var_6, %body, 1, 0.2, 1 );
animscripts\shared::donotetracks( "cover_multi_trans" );
}
covermulti_choosehidestate()
{
if ( !isdefined( self.a.array ) || !isdefined( self.a.array["alert_idle_back"] ) )
return "forward";
if ( common_scripts\utility::cointoss() )
return "forward";
else
return "back";
}
covermulti_getstatefromdir( var_0, var_1 )
{
if ( var_1 == "left" || var_1 == "right" )
return var_1;
if ( var_0 doesnodeallowstance( "stand" ) )
return "stand";
return "crouch";
}
covermulti_getanimtransition( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( var_2 == "back" )
var_6 = var_1 + "_back";
else if ( var_0 == "stand" || var_0 == "crouch" )
var_6 = var_0 + "_forward";
else
var_6 = var_0 + "_" + var_1;
var_6 = var_6 + "_to_";
if ( var_5 == "back" )
var_6 = var_6 + ( var_4 + "_back" );
else if ( var_3 == "stand" || var_3 == "crouch" )
var_6 = var_6 + ( var_3 + "_forward" );
else
var_6 = var_6 + ( var_3 + "_" + var_4 );
var_7 = self.animarchetype;
if ( !isdefined( var_7 ) || !isdefined( anim.archetypes[var_7]["cover_multi"] ) )
var_7 = "soldier";
return anim.archetypes[var_7]["cover_multi"][var_6];
}
init_animset_cover_multi()
{
var_0 = [];
var_0["stand"] = [];
var_0["stand"]["trans"] = [];
var_0["stand"]["trans"]["left_stand"] = [];
var_0["stand"]["trans"]["left_crouch"] = [];
var_0["stand"]["trans"]["right_stand"] = [];
var_0["stand"]["trans"]["right_crouch"] = [];
var_0["stand"]["trans"]["front_stand"] = [];
var_0["stand"]["trans"]["front_crouch"] = [];
var_0["stand"]["trans"]["back_stand"] = [];
var_0["stand"]["trans"]["back_crouch"] = [];
var_0["left_stand_to_right_stand"] = undefined;
var_0["left_stand_to_right_crouch"] = undefined;
var_0["left_stand_to_stand_back"] = undefined;
var_0["left_stand_to_stand_forward"] = undefined;
var_0["left_stand_to_crouch_back"] = undefined;
var_0["left_stand_to_crouch_forward"] = undefined;
var_0["left_crouch_to_right_stand"] = undefined;
var_0["left_crouch_to_right_crouch"] = undefined;
var_0["left_crouch_to_stand_back"] = undefined;
var_0["left_crouch_to_stand_forward"] = undefined;
var_0["left_crouch_to_crouch_back"] = undefined;
var_0["left_crouch_to_crouch_forward"] = undefined;
var_0["crouch"] = [];
anim.archetypes["soldier"]["cover_multi"] = var_0;
}