The fourth part removes the fire-box hack (another premature optimisation).
Author: EvilGuru Signed-off-by: Dennis Schridde <devurandom@gna.org> git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@6501 4a71c877-e1ca-e34f-864e-861f7616d084master
parent
d3e29ec540
commit
defb67afbb
|
@ -65,14 +65,6 @@
|
||||||
#define DIRECT_PROJ_SPEED 500
|
#define DIRECT_PROJ_SPEED 500
|
||||||
#define VTOL_HITBOX_MODIFICATOR 100
|
#define VTOL_HITBOX_MODIFICATOR 100
|
||||||
|
|
||||||
/** Used for passing data to the checkBurnDamage function */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
SWORD x1, y1;
|
|
||||||
SWORD x2, y2;
|
|
||||||
SWORD rad;
|
|
||||||
} FIRE_BOX;
|
|
||||||
|
|
||||||
// Watermelon:they are from droid.c
|
// Watermelon:they are from droid.c
|
||||||
/* The range for neighbouring objects */
|
/* The range for neighbouring objects */
|
||||||
#define PROJ_NAYBOR_RANGE (TILE_UNITS*4)
|
#define PROJ_NAYBOR_RANGE (TILE_UNITS*4)
|
||||||
|
@ -104,8 +96,7 @@ static void proj_InFlightDirectFunc( PROJECTILE *psObj );
|
||||||
static void proj_InFlightIndirectFunc( PROJECTILE *psObj );
|
static void proj_InFlightIndirectFunc( PROJECTILE *psObj );
|
||||||
static void proj_ImpactFunc( PROJECTILE *psObj );
|
static void proj_ImpactFunc( PROJECTILE *psObj );
|
||||||
static void proj_PostImpactFunc( PROJECTILE *psObj );
|
static void proj_PostImpactFunc( PROJECTILE *psObj );
|
||||||
static void proj_checkBurnDamage( BASE_OBJECT *apsList, PROJECTILE *psProj,
|
static void proj_checkBurnDamage( BASE_OBJECT *apsList, PROJECTILE *psProj);
|
||||||
FIRE_BOX *pFireBox );
|
|
||||||
static void proj_Free(PROJECTILE *psObj);
|
static void proj_Free(PROJECTILE *psObj);
|
||||||
|
|
||||||
static float objectDamage(BASE_OBJECT *psObj, UDWORD damage, UDWORD weaponClass,UDWORD weaponSubClass, HIT_SIDE impactSide);
|
static float objectDamage(BASE_OBJECT *psObj, UDWORD damage, UDWORD weaponClass,UDWORD weaponSubClass, HIT_SIDE impactSide);
|
||||||
|
@ -1502,7 +1493,6 @@ static void proj_PostImpactFunc( PROJECTILE *psObj )
|
||||||
{
|
{
|
||||||
WEAPON_STATS *psStats;
|
WEAPON_STATS *psStats;
|
||||||
SDWORD i, age;
|
SDWORD i, age;
|
||||||
FIRE_BOX flame;
|
|
||||||
|
|
||||||
CHECK_PROJECTILE(psObj);
|
CHECK_PROJECTILE(psObj);
|
||||||
|
|
||||||
|
@ -1523,21 +1513,13 @@ static void proj_PostImpactFunc( PROJECTILE *psObj )
|
||||||
if (psStats->incenTime > 0)
|
if (psStats->incenTime > 0)
|
||||||
{
|
{
|
||||||
/* See if anything is in the fire and burn it */
|
/* See if anything is in the fire and burn it */
|
||||||
|
|
||||||
/* Calculate the fire's bounding box */
|
|
||||||
flame.x1 = (SWORD)(psObj->pos.x - psStats->incenRadius);
|
|
||||||
flame.y1 = (SWORD)(psObj->pos.y - psStats->incenRadius);
|
|
||||||
flame.x2 = (SWORD)(psObj->pos.x + psStats->incenRadius);
|
|
||||||
flame.y2 = (SWORD)(psObj->pos.y + psStats->incenRadius);
|
|
||||||
flame.rad = (SWORD)(psStats->incenRadius*psStats->incenRadius);
|
|
||||||
|
|
||||||
for (i=0; i<MAX_PLAYERS; i++)
|
for (i=0; i<MAX_PLAYERS; i++)
|
||||||
{
|
{
|
||||||
/* Don't damage your own droids - unrealistic, but better */
|
/* Don't damage your own droids - unrealistic, but better */
|
||||||
if(i!=psObj->player)
|
if(i!=psObj->player)
|
||||||
{
|
{
|
||||||
proj_checkBurnDamage((BASE_OBJECT*)apsDroidLists[i], psObj, &flame);
|
proj_checkBurnDamage((BASE_OBJECT*)apsDroidLists[i], psObj);
|
||||||
proj_checkBurnDamage((BASE_OBJECT*)apsStructLists[i], psObj, &flame);
|
proj_checkBurnDamage((BASE_OBJECT*)apsStructLists[i], psObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1633,11 +1615,12 @@ void proj_UpdateAll()
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
static void proj_checkBurnDamage( BASE_OBJECT *apsList, PROJECTILE *psProj, FIRE_BOX *pFireBox )
|
static void proj_checkBurnDamage( BASE_OBJECT *apsList, PROJECTILE *psProj)
|
||||||
{
|
{
|
||||||
BASE_OBJECT *psCurr, *psNext;
|
BASE_OBJECT *psCurr, *psNext;
|
||||||
SDWORD xDiff,yDiff;
|
SDWORD xDiff,yDiff;
|
||||||
WEAPON_STATS *psStats;
|
WEAPON_STATS *psStats;
|
||||||
|
UDWORD radSquared;
|
||||||
UDWORD damageSoFar;
|
UDWORD damageSoFar;
|
||||||
SDWORD damageToDo;
|
SDWORD damageToDo;
|
||||||
float relativeDamage;
|
float relativeDamage;
|
||||||
|
@ -1648,6 +1631,8 @@ static void proj_checkBurnDamage( BASE_OBJECT *apsList, PROJECTILE *psProj, FIRE
|
||||||
g_pProjLastAttacker = psProj->psSource;
|
g_pProjLastAttacker = psProj->psSource;
|
||||||
|
|
||||||
psStats = psProj->psWStats;
|
psStats = psProj->psWStats;
|
||||||
|
radSquared = psStats->incenRadius * psStats->incenRadius;
|
||||||
|
|
||||||
for (psCurr = apsList; psCurr; psCurr = psNext)
|
for (psCurr = apsList; psCurr; psCurr = psNext)
|
||||||
{
|
{
|
||||||
/* have to store the next pointer as psCurr could be destroyed */
|
/* have to store the next pointer as psCurr could be destroyed */
|
||||||
|
@ -1661,16 +1646,10 @@ static void proj_checkBurnDamage( BASE_OBJECT *apsList, PROJECTILE *psProj, FIRE
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* see if psCurr is hit (don't hit main target twice) */
|
|
||||||
if (((SDWORD)psCurr->pos.x >= pFireBox->x1) &&
|
|
||||||
((SDWORD)psCurr->pos.x <= pFireBox->x2) &&
|
|
||||||
((SDWORD)psCurr->pos.y >= pFireBox->y1) &&
|
|
||||||
((SDWORD)psCurr->pos.y <= pFireBox->y2))
|
|
||||||
{
|
|
||||||
/* Within the bounding box, now check the radius */
|
/* Within the bounding box, now check the radius */
|
||||||
xDiff = psCurr->pos.x - psProj->pos.x;
|
xDiff = psCurr->pos.x - psProj->pos.x;
|
||||||
yDiff = psCurr->pos.y - psProj->pos.y;
|
yDiff = psCurr->pos.y - psProj->pos.y;
|
||||||
if ((xDiff*xDiff + yDiff*yDiff) <= pFireBox->rad)
|
if (xDiff*xDiff + yDiff*yDiff <= radSquared)
|
||||||
{
|
{
|
||||||
/* The object is in the fire */
|
/* The object is in the fire */
|
||||||
psCurr->inFire |= IN_FIRE;
|
psCurr->inFire |= IN_FIRE;
|
||||||
|
@ -1711,7 +1690,6 @@ static void proj_checkBurnDamage( BASE_OBJECT *apsList, PROJECTILE *psProj, FIRE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue