limit homing missle turn-rate

This commit is contained in:
zicodxx 2007-01-13 16:22:27 +00:00
parent b6481037db
commit 685216ca8d
2 changed files with 35 additions and 2 deletions

View file

@ -3,6 +3,7 @@ D1X-Rebirth Changelog
20070113
--------
main/game.c: fixed key combo to shrink/grow window (lost while porting to GP2X)
main/laser.c: limit homing missle turn-rate
20070110
--------

View file

@ -29,6 +29,7 @@ static char rcsid[] = "$Id: laser.c,v 1.1.1.1 2006/03/17 19:42:14 zicodxx Exp $"
#endif
#include <stdlib.h>
#include <time.h>
#include "inferno.h"
#include "game.h"
@ -954,7 +955,11 @@ void Flare_create(object *obj)
}
#define HOMING_MISSILE_SCALE 8
#define HOMING_MISSILE_SCALE 16
#define LIMIT_HOMERS 1
#define HOMER_MAX_FPS 30
#define HOMER_MIN_DELAY (1000 / HOMER_MAX_FPS)
//-------------------------------------------------------------------------------------------
// Set object *objp's orientation to (or towards if I'm ambitious) its velocity.
@ -962,9 +967,36 @@ void homing_missile_turn_towards_velocity(object *objp, vms_vector *norm_vel)
{
vms_vector new_fvec;
#ifdef LIMIT_HOMERS
static time_t last_time = -1;
static int nFrames = 1;
time_t this_time, delta_time;
fix frame_time;
int fps;
if (last_time == -1) {
last_time = clock ();
frame_time = FrameTime;
} else {
nFrames++;
this_time = clock ();
delta_time = this_time - last_time;
if (delta_time < HOMER_MIN_DELAY) {
return;
} else {
fps = (1000 + delta_time / 2) / delta_time;
frame_time = fps ? (f1_0 + fps / 2) / fps : f1_0;
// frame_time /= nFrames;
nFrames = 0;
last_time = this_time;
}
}
#else
fix frame_time = FrameTime;
#endif
new_fvec = *norm_vel;
vm_vec_scale(&new_fvec, FrameTime*HOMING_MISSILE_SCALE);
vm_vec_scale(&new_fvec, frame_time * HOMING_MISSILE_SCALE);
vm_vec_add2(&new_fvec, &objp->orient.fvec);
vm_vec_normalize_quick(&new_fvec);