iw6-scripts/maps/mp/agents/dog/_dog_idle.gsc
2024-02-13 13:20:49 +01:00

261 lines
7.3 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
self.animsubstate = "none";
settimeofnextsound();
self.timeofnextsound = self.timeofnextsound + 2000;
self.bidlehitreaction = 0;
self scragentsetgoalpos( self.origin );
self scragentsetorientmode( "face angle abs", self.angles );
self scragentsetanimmode( "anim deltas" );
self scragentsetphysicsmode( "gravity" );
updatestate();
}
end_script()
{
if ( isdefined( self.prevturnrate ) )
{
self scragentsetmaxturnspeed( self.prevturnrate );
self.prevturnrate = undefined;
}
}
updatestate()
{
self endon( "killanimscript" );
self endon( "cancelidleloop" );
for (;;)
{
var_0 = self.animsubstate;
var_1 = determinestate();
if ( var_1 != self.animsubstate )
enterstate( var_1 );
updateangle();
switch ( self.animsubstate )
{
case "idle_combat":
wait 0.2;
break;
case "idle_noncombat":
if ( var_0 == "none" )
{
if ( self.movemode == "run" || self.movemode == "sprint" )
self playsoundonmovingent( common_scripts\utility::ter_op( self.biswolf, "anml_wolf_pants_mp_fast", "anml_dog_pants_mp_fast" ) );
else
self playsoundonmovingent( common_scripts\utility::ter_op( self.biswolf, "anml_wolf_pants_mp_med", "anml_dog_pants_mp_med" ) );
}
else if ( gettime() > self.timeofnextsound )
{
if ( randomint( 10 ) < 4 )
self playsoundonmovingent( common_scripts\utility::ter_op( self.biswolf, "anml_wolf_whine", "anml_dog_whine" ) );
else
self playsoundonmovingent( common_scripts\utility::ter_op( self.biswolf, "anml_wolf_pants_mp_med", "anml_dog_pants_mp_med" ) );
settimeofnextsound();
}
wait 0.5;
break;
default:
wait 1;
break;
}
}
}
determinestate()
{
if ( shouldattackidle() )
return "idle_combat";
else
return "idle_noncombat";
}
enterstate( var_0 )
{
exitstate( self.animsubstate );
self.animsubstate = var_0;
playidleanim();
}
exitstate( var_0 )
{
if ( isdefined( self.prevturnrate ) )
{
self scragentsetmaxturnspeed( self.prevturnrate );
self.prevturnrate = undefined;
}
}
playidleanim()
{
if ( self.animsubstate == "idle_combat" )
self setanimstate( "attack_idle" );
else
self setanimstate( "casual_idle" );
}
updateangle()
{
var_0 = undefined;
if ( isdefined( self.enemy ) && distancesquared( self.enemy.origin, self.origin ) < 1048576 )
var_0 = self.enemy;
else if ( isdefined( self.owner ) && distancesquared( self.owner.origin, self.origin ) > 576 )
var_0 = self.owner;
if ( isdefined( var_0 ) )
{
var_1 = var_0.origin - self.origin;
var_2 = vectortoangles( var_1 );
if ( abs( angleclamp180( var_2[1] - self.angles[1] ) ) > 1 )
turntoangle( var_2[1] );
}
}
shouldattackidle()
{
return isdefined( self.enemy ) && maps\mp\_utility::isreallyalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000;
}
getturnanimstate( var_0 )
{
if ( shouldattackidle() )
{
if ( var_0 < -135 || var_0 > 135 )
return "attack_turn_180";
else if ( var_0 < 0 )
return "attack_turn_right_90";
else
return "attack_turn_left_90";
}
else if ( var_0 < -135 || var_0 > 135 )
return "casual_turn_180";
else if ( var_0 < 0 )
return "casual_turn_right_90";
else
return "casual_turn_left_90";
}
turntoangle( var_0 )
{
var_1 = self.angles[1];
var_2 = angleclamp180( var_0 - var_1 );
if ( -0.5 < var_2 && var_2 < 0.5 )
return;
if ( -10 < var_2 && var_2 < 10 )
{
rotatetoangle( var_0, 2 );
return;
}
var_3 = getturnanimstate( var_2 );
var_4 = self getanimentry( var_3, 0 );
var_5 = getanimlength( var_4 );
var_6 = getangledelta3d( var_4 );
self scragentsetanimmode( "anim angle delta" );
if ( animhasnotetrack( var_4, "turn_begin" ) && animhasnotetrack( var_4, "turn_end" ) )
{
maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( var_3, 0, "turn_in_place" );
var_7 = getnotetracktimes( var_4, "turn_begin" );
var_8 = getnotetracktimes( var_4, "turn_end" );
var_9 = ( var_8[0] - var_7[0] ) * var_5;
var_10 = angleclamp180( var_2 - var_6[1] );
var_11 = abs( var_10 ) / var_9 / 20;
var_11 = var_11 * 3.14159 / 180;
var_12 = ( 0, angleclamp180( self.angles[1] + var_10 ), 0 );
self.prevturnrate = self scragentgetmaxturnspeed();
self scragentsetmaxturnspeed( var_11 );
self scragentsetorientmode( "face angle abs", var_12 );
maps\mp\agents\_scriptedagents::waituntilnotetrack( "turn_in_place", "turn_end" );
self scragentsetmaxturnspeed( self.prevturnrate );
self.prevturnrate = undefined;
maps\mp\agents\_scriptedagents::waituntilnotetrack( "turn_in_place", "end" );
}
else
{
self.prevturnrate = self scragentgetmaxturnspeed();
var_11 = abs( angleclamp180( var_2 - var_6[1] ) ) / var_5 / 20;
var_11 = var_11 * 3.14159 / 180;
self scragentsetmaxturnspeed( var_11 );
var_12 = ( 0, angleclamp180( var_0 - var_6[1] ), 0 );
self scragentsetorientmode( "face angle abs", var_12 );
maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( var_3, 0, "turn_in_place" );
self scragentsetmaxturnspeed( self.prevturnrate );
self.prevturnrate = undefined;
}
self scragentsetanimmode( "anim deltas" );
playidleanim();
}
rotatetoangle( var_0, var_1 )
{
if ( abs( angleclamp180( var_0 - self.angles[1] ) ) <= var_1 )
return;
var_2 = ( 0, var_0, 0 );
self scragentsetorientmode( "face angle abs", var_2 );
while ( angleclamp180( var_0 - self.angles[1] ) > var_1 )
wait 0.1;
}
settimeofnextsound()
{
self.timeofnextsound = gettime() + 8000 + randomint( 5000 );
}
dohitreaction( var_0 )
{
self.blockgoalpos = 1;
self.statelocked = 1;
self.bidlehitreaction = 1;
var_1 = angleclamp180( var_0 - self.angles[1] );
if ( var_1 > 0 )
var_2 = 1;
else
var_2 = 0;
self notify( "cancelidleloop" );
self scragentsetanimmode( "anim deltas" );
self scragentsetorientmode( "face angle abs", self.angles );
maps\mp\agents\_scriptedagents::playanimnuntilnotetrack( "stand_pain", var_2, "stand_pain" );
self.blockgoalpos = 0;
self.statelocked = 0;
self.bidlehitreaction = 0;
self scragentsetorientmode( "face angle abs", self.angles );
self.animsubstate = "none";
thread updatestate();
}
ondamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( self.bidlehitreaction )
return;
var_10 = vectortoangles( var_7 );
var_11 = var_10[1] - 180;
dohitreaction( var_11 );
}
onflashbanged( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( self.bidlehitreaction )
return;
dohitreaction( self.angles[1] + 180 );
}