[Fix] Major bug in weapon.c.

-- I believe it is a fix, but as only VLack can create the crash I am just guessing.
This commit is contained in:
Allanis 2013-02-07 22:25:30 +00:00
parent 5386ad0f82
commit c15699606b

View File

@ -67,20 +67,22 @@ void weapon_minimap(double res, double w, double h) {
// Update all weapons in the layer.
void weapons_update(const double dt, WeaponLayer layer) {
Weapon** wlayer;
int nlayer;
int* nlayer;
switch(layer) {
case WEAPON_LAYER_BG:
wlayer = wbackLayer;
nlayer = nwbackLayer;
nlayer = &nwbackLayer;
break;
case WEAPON_LAYER_FG:
wlayer = wfrontLayer;
nlayer = nwfrontLayer;
nlayer = &nwfrontLayer;
break;
}
int i;
for(i = 0; i < nlayer; i++) {
Weapon* w;
for(i = 0; i < (*nlayer); i++) {
w = wlayer[i];
switch(wlayer[i]->outfit->type) {
case OUTFIT_TYPE_BOLT:
if(SDL_GetTicks() > (wlayer[i]->timer + 1000*(unsigned int)
@ -93,6 +95,8 @@ void weapons_update(const double dt, WeaponLayer layer) {
break;
}
weapon_update(wlayer[i], dt, layer);
// If the weapon has been deleted we are going to have to hold back one.
if(w != wlayer[i]) i--;
}
}
@ -111,7 +115,7 @@ static void weapon_render(const Weapon* w) {
static void weapon_update(Weapon* w, const double dt, WeaponLayer layer) {
int i;
for(i = 0; i < pilots; i++) {
if((w->parent != pilot_stack[i]->id) &&
if((w->parent != pilot_stack[i]->id) && // The pilot hasn't shoot it.
(DIST(w->solid->pos, pilot_stack[i]->solid->pos) < (PILOT_SIZE_APROX *
w->outfit->gfx_space->sw/2. + pilot_stack[i]->ship->gfx_space->sw/2.))) {
pilot_hit(pilot_stack[i], w->outfit->damage_shield, w->outfit->damage_armor);
@ -145,6 +149,7 @@ static Weapon* weapon_create(const Outfit* outfit, const double dir, const Vec2*
w->solid = solid_create(mass, rdir, pos, &v);
break;
default:
w->solid = solid_create(mass, dir, pos, vel);
break;
}
return w;
@ -184,7 +189,7 @@ void weapon_add(const Outfit* outfit, const double dir, const Vec2* pos, const V
else { // Need to allocate more memory.
switch(layer) {
case WEAPON_LAYER_BG:
curLayer = wbackLayer = realloc(curLayer, (++(*mLayer))*sizeof(Weapon));
curLayer = wbackLayer = realloc(curLayer, (++(*mLayer))*sizeof(Weapon*));
break;
case WEAPON_LAYER_FG:
curLayer = wfrontLayer = realloc(curLayer, (++(*mLayer))*sizeof(Weapon*));
@ -211,6 +216,7 @@ static void weapon_destroy(Weapon* w, WeaponLayer layer) {
}
for(i = 0; wlayer[i] != w; i++); // Get us to the current posision.
weapon_free(wlayer[i]);
wlayer[i] = NULL;
(*nlayer)--;
for(; i < (*nlayer); i++)