69 lines
10 KiB
Plaintext
69 lines
10 KiB
Plaintext
#using scripts\shared\ai\systems\blackboard;
|
|
#using scripts\shared\ai\systems\shared;
|
|
#using scripts\shared\ai\archetype_utility;
|
|
|
|
|
|
|
|
|
|
|
|
#namespace Blackboard;
|
|
|
|
//*****************************************************************************
|
|
// NOTE! When adding a new blackboard variable you must also declare the
|
|
// blackboard variable within the ast_definitions file found at:
|
|
//
|
|
// //t7/main/game/share/raw/animtables/ast_definitions.json
|
|
//
|
|
// This allows the Animation Selector Table system to determine how to create
|
|
// queries based on the blackboard variable.
|
|
//
|
|
// Also, all blackboard values must be lowercased! No convert to lower is
|
|
// perform when assigning values to the blackboard.
|
|
//
|
|
//*****************************************************************************
|
|
function RegisterVehicleBlackBoardAttributes()
|
|
{
|
|
Assert(IsVehicle(self), "RegisterVehicleBlackBoardAttributes: Should only be called on vehicles");
|
|
|
|
Blackboard::RegisterBlackBoardAttribute(self,"_speed",undefined,&BB_GetSpeed); if( IsActor(self) ) { /#self TrackBlackBoardAttribute("_speed");#/ };
|
|
Blackboard::RegisterBlackBoardAttribute(self,"_enemy_yaw",undefined,&BB_VehGetEnemyYaw); if( IsActor(self) ) { /#self TrackBlackBoardAttribute("_enemy_yaw");#/ };
|
|
}
|
|
|
|
function BB_GetSpeed()
|
|
{
|
|
velocity = self GetVelocity();
|
|
return Length( velocity );
|
|
}
|
|
|
|
|
|
function BB_VehGetEnemyYaw()
|
|
{
|
|
enemy = self.enemy;
|
|
|
|
if( !IsDefined( enemy ) )
|
|
return 0;
|
|
|
|
toEnemyYaw = VehGetPredictedYawToEnemy( self, 0.2 );
|
|
|
|
return toEnemyYaw;
|
|
}
|
|
|
|
function VehGetPredictedYawToEnemy( entity, lookAheadTime )
|
|
{
|
|
// don't run this more than once per frame
|
|
if( IsDefined(entity.predictedYawToEnemy) && IsDefined(entity.predictedYawToEnemyTime) && entity.predictedYawToEnemyTime == GetTime() )
|
|
return entity.predictedYawToEnemy;
|
|
|
|
selfPredictedPos = entity.origin;
|
|
moveAngle = entity.angles[1] + entity getMotionAngle();
|
|
selfPredictedPos += (cos( moveAngle ), sin( moveAngle ), 0) * 200.0 * lookAheadTime;
|
|
|
|
yaw = VectorToAngles(entity.enemy.origin - selfPredictedPos)[1] - entity.angles[1];
|
|
yaw = AbsAngleClamp360( yaw );
|
|
|
|
// cache
|
|
entity.predictedYawToEnemy = yaw;
|
|
entity.predictedYawToEnemyTime = GetTime();
|
|
|
|
return yaw;
|
|
} |