[Fix?] Continue in switch case doesn't behave as I thought it did.....
This commit is contained in:
parent
29f58fe1e4
commit
c8fe8e8eb8
28
src/weapon.c
28
src/weapon.c
@ -310,6 +310,7 @@ static void weapons_updateLayer(const double dt, const WeaponLayer layer) {
|
||||
Weapon* w;
|
||||
int i;
|
||||
|
||||
/* Choose layer. */
|
||||
switch(layer) {
|
||||
case WEAPON_LAYER_BG:
|
||||
wlayer = wbackLayer;
|
||||
@ -341,7 +342,7 @@ static void weapons_updateLayer(const double dt, const WeaponLayer layer) {
|
||||
wlayer[i]->timer -= dt;
|
||||
if(wlayer[i]->timer < 0.) {
|
||||
weapon_destroy(wlayer[i], layer);
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
/* Beam weapons handled apart. */
|
||||
@ -350,7 +351,7 @@ static void weapons_updateLayer(const double dt, const WeaponLayer layer) {
|
||||
wlayer[i]->timer -= dt;
|
||||
if(wlayer[i]->timer < 0.) {
|
||||
weapon_destroy(wlayer[i],layer);
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
wlayer[i]->lockon -= dt;
|
||||
if(wlayer[i]->lockon < 0.) {
|
||||
@ -365,13 +366,14 @@ static void weapons_updateLayer(const double dt, const WeaponLayer layer) {
|
||||
w->outfit->name);
|
||||
break;
|
||||
}
|
||||
weapon_update(wlayer[i], dt, layer);
|
||||
|
||||
/* Only increment if weapon wasn't deleted. */
|
||||
if(w == wlayer[i])
|
||||
if(w == wlayer[i]) {
|
||||
weapon_update(wlayer[i], dt, layer);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn void weapons_render(const WeaponLayer layer)
|
||||
@ -505,6 +507,12 @@ static void weapon_update(Weapon* w, const double dt, WeaponLayer layer) {
|
||||
glTexture* gfx;
|
||||
Vec2 crash[2];
|
||||
|
||||
/* Get the sprite direction to speed up calculations. */
|
||||
if(!outfit_isBeam(w->outfit)) {
|
||||
gfx = outfit_gfx(w->outfit);
|
||||
gl_getSpriteFromDir(&wsx, &wsy, gfx, w->solid->dir);
|
||||
}
|
||||
|
||||
for(i = 0; i < pilot_nstack; i++) {
|
||||
/* Check for player to exist. */
|
||||
if((i == 0) && (player == NULL)) continue;
|
||||
@ -531,8 +539,6 @@ static void weapon_update(Weapon* w, const double dt, WeaponLayer layer) {
|
||||
|
||||
/* Smart weapons only collide with their target. */
|
||||
else if(weapon_isSmart(w)) {
|
||||
gfx = outfit_gfx(w->outfit);
|
||||
gl_getSpriteFromDir(&wsx, &wsy, gfx, w->solid->dir);
|
||||
if((pilot_stack[i]->id == w->target) &&
|
||||
CollideSprite(gfx, wsx, wsy, &w->solid->pos,
|
||||
pilot_stack[i]->ship->gfx_space, psx, psy, &pilot_stack[i]->solid->pos,
|
||||
@ -542,11 +548,8 @@ static void weapon_update(Weapon* w, const double dt, WeaponLayer layer) {
|
||||
return; /* Weapon is destroyed. */
|
||||
}
|
||||
}
|
||||
/* Dumb weapons hit anything not of the same faction. */
|
||||
else if(!weapon_isSmart(w)) {
|
||||
gfx = outfit_gfx(w->outfit);
|
||||
gl_getSpriteFromDir(&wsx, &wsy, gfx, w->solid->dir);
|
||||
|
||||
/* Dump weapons hit anything not of the same faction. */
|
||||
else {
|
||||
if(!areAllies(w->faction, pilot_stack[i]->faction) &&
|
||||
CollideSprite(gfx, wsx, wsy, &w->solid->pos,
|
||||
pilot_stack[i]->ship->gfx_space, psx, psy, &pilot_stack[i]->solid->pos,
|
||||
@ -557,7 +560,8 @@ static void weapon_update(Weapon* w, const double dt, WeaponLayer layer) {
|
||||
}
|
||||
}
|
||||
/* Smart weapons also get to think their next move. */
|
||||
if(weapon_isSmart(w)) (*w->think)(w,dt);
|
||||
if(weapon_isSmart(w))
|
||||
(*w->think)(w,dt);
|
||||
|
||||
/* Update the solid position. */
|
||||
(*w->solid->update)(w->solid, dt);
|
||||
|
Loading…
Reference in New Issue
Block a user