Skip to content

Commit

Permalink
Revert to the simpler sensor range model.
Browse files Browse the repository at this point in the history
  • Loading branch information
Deiz committed Feb 27, 2012
1 parent 2e69fd0 commit a45d2ff
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 23 deletions.
2 changes: 2 additions & 0 deletions src/pilot.h
Expand Up @@ -305,6 +305,8 @@ typedef struct Pilot_ {
double ew_mass; /**< Mass factor. */ double ew_mass; /**< Mass factor. */
double ew_heat; /**< Heat factor, affects hide. */ double ew_heat; /**< Heat factor, affects hide. */
double ew_hide; /**< Static hide factor. */ double ew_hide; /**< Static hide factor. */
double ew_movement; /**< Movement factor. */
double ew_evasion; /**< Dynamic evasion factor. */
double ew_detect; /**< Static detection factor. */ double ew_detect; /**< Static detection factor. */
double ew_jumpDetect; /** Static jump detection factor */ double ew_jumpDetect; /** Static jump detection factor */


Expand Down
35 changes: 14 additions & 21 deletions src/pilot_ew.c
Expand Up @@ -35,7 +35,7 @@ void pilot_ewUpdateStatic( Pilot *p )
{ {
p->ew_mass = pilot_ewMass( p->solid->mass ); p->ew_mass = pilot_ewMass( p->solid->mass );
p->ew_heat = pilot_ewHeat( p->heat_T ); p->ew_heat = pilot_ewHeat( p->heat_T );
p->ew_hide = pow2(p->ew_base_hide * p->ew_mass * p->ew_heat); p->ew_hide = p->ew_base_hide * p->ew_mass * p->ew_heat;
} }




Expand All @@ -49,6 +49,10 @@ void pilot_ewUpdateDynamic( Pilot *p )
/* Update hide. */ /* Update hide. */
p->ew_heat = pilot_ewHeat( p->heat_T ); p->ew_heat = pilot_ewHeat( p->heat_T );
p->ew_hide = p->ew_base_hide * p->ew_mass * p->ew_heat; p->ew_hide = p->ew_base_hide * p->ew_mass * p->ew_heat;

/* Update evasion. */
p->ew_movement = pilot_ewMovement( VMOD(p->solid->vel) );
p->ew_evasion = p->ew_hide * p->ew_movement * EVASION_SCALE;
} }




Expand All @@ -60,19 +64,9 @@ void pilot_ewUpdateDynamic( Pilot *p )
*/ */
double pilot_ewMovement( double vmod ) double pilot_ewMovement( double vmod )
{ {
return 1. + vmod / 1000.; return 1. + vmod / 100.;
} }


/**
* @brief Gets the electronic warfare evasion modifier for a given pilot.
*
* @param target The pilot doing the evading.
* @return The electronic warfare evasion modifier.
*/
double pilot_ewEvasion( const Pilot *target )
{
return (target->ew_hide * EVASION_SCALE);
}


/** /**
* @brief Gets the electronic warfare heat modifier for a given temperature. * @brief Gets the electronic warfare heat modifier for a given temperature.
Expand Down Expand Up @@ -156,7 +150,7 @@ int pilot_inRange( const Pilot *p, double x, double y )
*/ */
int pilot_inRangePilot( const Pilot *p, const Pilot *target ) int pilot_inRangePilot( const Pilot *p, const Pilot *target )
{ {
double d, sense, ewMovement; double d, sense;


/* Special case player or omni-visible. */ /* Special case player or omni-visible. */
if ((pilot_isPlayer(p) && pilot_isFlag(target, PILOT_VISPLAYER)) || if ((pilot_isPlayer(p) && pilot_isFlag(target, PILOT_VISPLAYER)) ||
Expand All @@ -167,10 +161,9 @@ int pilot_inRangePilot( const Pilot *p, const Pilot *target )
d = vect_dist2( &p->solid->pos, &target->solid->pos ); d = vect_dist2( &p->solid->pos, &target->solid->pos );


sense = sensor_curRange * p->ew_detect; sense = sensor_curRange * p->ew_detect;
ewMovement = pilot_ewMovement( vect_dist( &p->solid->vel, &target->solid->vel )); if (d * target->ew_evasion < sense)
if (d * pilot_ewEvasion( target ) * ewMovement < sense)
return 1; return 1;
else if (d * target->ew_hide < sense * ewMovement) else if (d * target->ew_hide < sense)
return -1; return -1;


return 0; return 0;
Expand Down Expand Up @@ -201,7 +194,8 @@ int pilot_inRangePlanet( const Pilot *p, int target )
if ( !pnt->real ) if ( !pnt->real )
return 0; return 0;


sense = sensor_curRange * p->ew_detect; /* @TODO ew_detect should be squared upon being set. */
sense = sensor_curRange * pow2(p->ew_detect);


/* Get distance. */ /* Get distance. */
d = vect_dist2( &p->solid->pos, &pnt->pos ); d = vect_dist2( &p->solid->pos, &pnt->pos );
Expand Down Expand Up @@ -259,14 +253,13 @@ int pilot_inRangeJump( const Pilot *p, int i )
*/ */
double pilot_ewWeaponTrack( const Pilot *p, const Pilot *t, double track ) double pilot_ewWeaponTrack( const Pilot *p, const Pilot *t, double track )
{ {
double limit, lead, evade; double limit, lead;


limit = track * p->ew_detect; limit = track * p->ew_detect;
evade = pilot_ewEvasion( t ) * pilot_ewMovement( vect_dist( &p->solid->vel, &t->solid->vel )); if (t->ew_evasion < limit)
if ( evade < limit )
lead = 1.; lead = 1.;
else else
lead = MAX( 0., 1. - 0.5*(evade/limit - 1.)); lead = MAX( 0., 1. - 0.5*(t->ew_evasion/limit - 1.));
return lead; return lead;
} }


Expand Down
1 change: 0 additions & 1 deletion src/pilot_ew.h
Expand Up @@ -36,7 +36,6 @@ void pilot_ewUpdateDynamic( Pilot *p );
* Individual electronic warfare properties. * Individual electronic warfare properties.
*/ */
double pilot_ewMovement( double vmod ); double pilot_ewMovement( double vmod );
double pilot_ewEvasion( const Pilot *target );
double pilot_ewHeat( double T ); double pilot_ewHeat( double T );
double pilot_ewMass( double mass ); double pilot_ewMass( double mass );


Expand Down
2 changes: 1 addition & 1 deletion src/pilot_outfit.c
Expand Up @@ -864,7 +864,7 @@ void pilot_calcStats( Pilot* pilot )
s->ew_detect = 1. + (s->ew_detect-1.) * exp( -0.2 * (double)(MAX(amount.ew_detect-1,0)) ); s->ew_detect = 1. + (s->ew_detect-1.) * exp( -0.2 * (double)(MAX(amount.ew_detect-1,0)) );
s->ew_jumpDetect = 1. + (s->ew_jumpDetect-1.) * exp( -0.2 * (double)(MAX(amount.ew_jumpDetect-1,0)) ); s->ew_jumpDetect = 1. + (s->ew_jumpDetect-1.) * exp( -0.2 * (double)(MAX(amount.ew_jumpDetect-1,0)) );
pilot->ew_base_hide = s->ew_hide; pilot->ew_base_hide = s->ew_hide;
pilot->ew_detect = pow2(s->ew_detect); pilot->ew_detect = s->ew_detect;
pilot->ew_jumpDetect = pow2(s->ew_jumpDetect); pilot->ew_jumpDetect = pow2(s->ew_jumpDetect);


/* /*
Expand Down

0 comments on commit a45d2ff

Please sign in to comment.