133 lines
3.0 KiB
Plaintext

#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
main()
{
debug_anim_print( "dog_stop::main()" );
self endon( "killanimscript" );
self setaimanimweights( 0, 0 );
self thread lookattarget( "attackIdle" );
while ( 1 )
{
if ( shouldattackidle() )
{
self randomattackidle();
maps/mp/animscripts/shared::donotetracks( "done" );
}
else
{
self set_orient_mode( "face current" );
debug_anim_print( "dog_stop::main() - Setting stop_idle" );
self notify( "stop tracking" );
self setaimanimweights( 0, 0 );
self setanimstate( "stop_idle" );
maps/mp/animscripts/shared::donotetracks( "done" );
self thread lookattarget( "attackIdle" );
}
debug_anim_print( "dog_stop::main() - stop idle loop notify done." );
}
}
isfacingenemy( tolerancecosangle )
{
/#
assert( isDefined( self.enemy ) );
#/
vectoenemy = self.enemy.origin - self.origin;
disttoenemy = length( vectoenemy );
if ( disttoenemy < 1 )
{
return 1;
}
forward = anglesToForward( self.angles );
val1 = ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] );
val2 = ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy;
return ( ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy ) > tolerancecosangle;
}
randomattackidle()
{
if ( isfacingenemy( -0,5 ) )
{
self set_orient_mode( "face current" );
}
else
{
self set_orient_mode( "face enemy" );
}
if ( should_growl() )
{
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" );
self setanimstate( "stop_attackidle_growl" );
return;
}
idlechance = 33;
barkchance = 66;
if ( isDefined( self.mode ) )
{
if ( self.mode == "growl" )
{
idlechance = 15;
barkchance = 30;
}
else
{
if ( self.mode == "bark" )
{
idlechance = 15;
barkchance = 85;
}
}
}
rand = randomint( 100 );
if ( rand < idlechance )
{
debug_anim_print( "dog_stop::main() - Setting stop_attackidle" );
self setanimstate( "stop_attackidle" );
}
else if ( rand < barkchance )
{
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_bark " );
self setanimstate( "stop_attackidle_bark" );
}
else
{
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl " );
self setanimstate( "stop_attackidle_growl" );
}
}
shouldattackidle()
{
if ( isDefined( self.enemy ) && isalive( self.enemy ) )
{
return distancesquared( self.origin, self.enemy.origin ) < 1000000;
}
}
should_growl()
{
if ( isDefined( self.script_growl ) )
{
return 1;
}
if ( !isalive( self.enemy ) )
{
return 1;
}
return !self cansee( self.enemy );
}
lookattarget( lookposeset )
{
self endon( "killanimscript" );
self endon( "stop tracking" );
debug_anim_print( "dog_stop::lookAtTarget() - Starting look at " + lookposeset );
self.rightaimlimit = 90;
self.leftaimlimit = -90;
self.upaimlimit = 45;
self.downaimlimit = -45;
self maps/mp/animscripts/shared::setanimaimweight( 1, 0,2 );
self maps/mp/animscripts/shared::trackloop();
}