diff options
| -rw-r--r-- | src/game/g_buildable.c | 22 | ||||
| -rw-r--r-- | src/game/g_local.h | 2 | ||||
| -rw-r--r-- | src/game/g_weapon.c | 3 | 
3 files changed, 20 insertions, 7 deletions
diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index 5449237a..300f2ad7 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -640,7 +640,7 @@ void ddef_fireonenemy( gentity_t *self, int firespeed )    }    VectorNormalize( dirToTarget ); -  vectoangles( dirToTarget, self->s.angles2 ); +  vectoangles( dirToTarget, self->turretAim );    //fire at target    FireWeapon( self ); @@ -1074,8 +1074,9 @@ Used by HDef1_Think to track enemy location  */  qboolean hdef1_trackenemy( gentity_t *self )  { -  vec3_t  dirToTarget, angleToTarget, angularDiff; -  float   temp; +  vec3_t  dirToTarget, angleToTarget, angularDiff, xNormal; +  vec3_t  refNormal = { 0.0f, 0.0f, 1.0f }; +  float   temp, rotAngle;    float   distanceToTarget = BG_FindRangeForBuildable( self->s.modelindex );    float   timeTilImpact;    vec3_t  halfAcceleration; @@ -1115,11 +1116,18 @@ qboolean hdef1_trackenemy( gentity_t *self )    VectorNormalize( dirToTarget ); +  CrossProduct( self->s.origin2, refNormal, xNormal ); +  VectorNormalize( xNormal ); +  rotAngle = RAD2DEG( acos( DotProduct( self->s.origin2, refNormal ) ) ); +  RotatePointAroundVector( dirToTarget, xNormal, dirToTarget, -rotAngle ); +      vectoangles( dirToTarget, angleToTarget );    angularDiff[ PITCH ] = AngleSubtract( self->s.angles2[ PITCH ], angleToTarget[ PITCH ] );    angularDiff[ YAW ] = AngleSubtract( self->s.angles2[ YAW ], angleToTarget[ YAW ] ); +  G_Printf( "%f\n", angularDiff[ PITCH ] ); +    //if not pointing at our target then move accordingly    if( angularDiff[ PITCH ] < -HDEF1_ACCURACYTOLERANCE )      self->s.angles2[ PITCH ] += HDEF1_ANGULARSPEED; @@ -1146,7 +1154,9 @@ qboolean hdef1_trackenemy( gentity_t *self )    else      self->s.angles2[ YAW ] = angleToTarget[ YAW ]; -  trap_LinkEntity( self ); +  AngleVectors( self->s.angles2, dirToTarget, NULL, NULL ); +  RotatePointAroundVector( self->turretAim, xNormal, dirToTarget, rotAngle ); +  vectoangles( self->turretAim, self->turretAim );    //if pointing at our target return true    if( abs( angleToTarget[ YAW ] - self->s.angles2[ YAW ] ) <= HDEF1_ACCURACYTOLERANCE && @@ -1205,7 +1215,7 @@ qboolean hdef2_trackenemy( gentity_t *self )    else      self->s.angles2[ YAW ] = angleToTarget[ YAW ]; -  trap_LinkEntity( self ); +  VectorCopy( self->s.angles2, self->turretAim );    //if pointing at our target return true    if( abs( angleToTarget[ YAW ] - self->s.angles2[ YAW ] ) <= HDEF2_ACCURACYTOLERANCE && @@ -1228,7 +1238,7 @@ void hdef3_fireonenemy( gentity_t *self, int firespeed )    VectorSubtract( self->enemy->s.pos.trBase, self->s.pos.trBase, dirToTarget );    VectorNormalize( dirToTarget ); -  vectoangles( dirToTarget, self->s.angles2 ); +  vectoangles( dirToTarget, self->turretAim );    //fire at target    FireWeapon( self ); diff --git a/src/game/g_local.h b/src/game/g_local.h index 5b51935a..c9a78a5e 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -184,6 +184,8 @@ struct gentity_s {    gentity_t *targeted;    //TA: true if the player is currently a valid target of a turret    vec4_t    animation;    //TA: animated map objects + +  vec3_t    turretAim;    //TA: aim vector for turrets  };  typedef enum { diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c index e36c42c4..d6467e02 100644 --- a/src/game/g_weapon.c +++ b/src/game/g_weapon.c @@ -1107,7 +1107,8 @@ void FireWeapon( gentity_t *ent )    }    else    { -    AngleVectors( ent->s.angles2, forward, right, up ); +    AngleVectors( ent->turretAim, forward, right, up ); +    /*AngleVectors( ent->s.angles2, forward, right, up );*/      VectorCopy( ent->s.pos.trBase, muzzle );    }  | 
