Start of bullet, debris, and effect performance updates. Dynamic array sizing.
This commit is contained in:
parent
ba41d615a2
commit
56540a56ac
|
@ -429,4 +429,10 @@ void destroyBattle(void)
|
||||||
destroyScript();
|
destroyScript();
|
||||||
|
|
||||||
destroyQuadtree();
|
destroyQuadtree();
|
||||||
|
|
||||||
|
destroyDebris();
|
||||||
|
|
||||||
|
destroyBullets();
|
||||||
|
|
||||||
|
destroyEffects();
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,16 +22,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
static void huntTarget(Bullet *b);
|
static void huntTarget(Bullet *b);
|
||||||
static void checkCollisions(Bullet *b);
|
static void checkCollisions(Bullet *b);
|
||||||
|
static void resizeDrawList(void);
|
||||||
|
|
||||||
static Bullet bulletDef[BT_MAX];
|
static Bullet bulletDef[BT_MAX];
|
||||||
static Bullet *bulletsToDraw[MAX_BULLETS_TO_DRAW];
|
static Bullet **bulletsToDraw;
|
||||||
static int incomingMissile;
|
static int incomingMissile;
|
||||||
|
static int drawCapacity;
|
||||||
|
|
||||||
void initBullets(void)
|
void initBullets(void)
|
||||||
{
|
{
|
||||||
incomingMissile = 0;
|
incomingMissile = 0;
|
||||||
|
|
||||||
memset(bulletsToDraw, 0, sizeof(Bullet*) * MAX_BULLETS_TO_DRAW);
|
drawCapacity = INITIAL_BULLET_DRAW_CAPACITY;
|
||||||
|
|
||||||
|
bulletsToDraw = malloc(sizeof(Bullet*) * drawCapacity);
|
||||||
|
memset(bulletsToDraw, 0, sizeof(Bullet*) * drawCapacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void initBulletDefs(void)
|
void initBulletDefs(void)
|
||||||
|
@ -119,10 +124,10 @@ void doBullets(void)
|
||||||
if (collision(b->x - (b->w / 2) - battle.camera.x, b->y - (b->h / 2) - battle.camera.y, b->w * 2, b->h * 2, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT))
|
if (collision(b->x - (b->w / 2) - battle.camera.x, b->y - (b->h / 2) - battle.camera.y, b->w * 2, b->h * 2, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT))
|
||||||
{
|
{
|
||||||
bulletsToDraw[i++] = b;
|
bulletsToDraw[i++] = b;
|
||||||
if (i >= MAX_BULLETS_TO_DRAW)
|
|
||||||
|
if (i == drawCapacity)
|
||||||
{
|
{
|
||||||
printf("Too many bullets to draw\n");
|
resizeDrawList();
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,6 +136,29 @@ void doBullets(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void resizeDrawList(void)
|
||||||
|
{
|
||||||
|
int i, n;
|
||||||
|
Bullet **bullets;
|
||||||
|
|
||||||
|
n = drawCapacity + INITIAL_BULLET_DRAW_CAPACITY;
|
||||||
|
|
||||||
|
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Resizing bullet draw capacity: %d -> %d\n", drawCapacity, n);
|
||||||
|
|
||||||
|
bullets = malloc(sizeof(Bullet*) * n);
|
||||||
|
memset(bullets, 0, sizeof(Bullet*) * n);
|
||||||
|
|
||||||
|
for (i = 0 ; i < drawCapacity ; i++)
|
||||||
|
{
|
||||||
|
bullets[i] = bulletsToDraw[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
free(bulletsToDraw);
|
||||||
|
|
||||||
|
bulletsToDraw = bullets;
|
||||||
|
drawCapacity = n;
|
||||||
|
}
|
||||||
|
|
||||||
static void checkCollisions(Bullet *b)
|
static void checkCollisions(Bullet *b)
|
||||||
{
|
{
|
||||||
Entity *e, **candidates;
|
Entity *e, **candidates;
|
||||||
|
@ -380,4 +408,7 @@ void fireMissile(Entity *owner)
|
||||||
|
|
||||||
void destroyBulletDefs(void)
|
void destroyBulletDefs(void)
|
||||||
{
|
{
|
||||||
|
free(bulletsToDraw);
|
||||||
|
|
||||||
|
bulletsToDraw = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#define TURN_SPEED 2
|
#define TURN_SPEED 2
|
||||||
#define TURN_THRESHOLD 3
|
#define TURN_THRESHOLD 3
|
||||||
#define MAX_BULLETS_TO_DRAW 512
|
#define INITIAL_BULLET_DRAW_CAPACITY 32
|
||||||
|
|
||||||
extern SDL_Texture *getTexture(char *filename);
|
extern SDL_Texture *getTexture(char *filename);
|
||||||
extern void blitRotated(SDL_Texture *texture, int x, int y, float angle);
|
extern void blitRotated(SDL_Texture *texture, int x, int y, float angle);
|
||||||
|
|
|
@ -21,20 +21,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "debris.h"
|
#include "debris.h"
|
||||||
|
|
||||||
static void changeCourse(Debris *d);
|
static void changeCourse(Debris *d);
|
||||||
|
static void resizeDrawList(void);
|
||||||
|
|
||||||
static Debris *debrisToDraw[MAX_DEBRIS_TO_DRAW];
|
static Debris **debrisToDraw;
|
||||||
static SDL_Texture *debrisTexture[MAX_DEBRIS_TEXTURES];
|
static SDL_Texture *debrisTexture[MAX_DEBRIS_TEXTURES];
|
||||||
|
static int drawCapacity;
|
||||||
|
|
||||||
void initDebris(void)
|
void initDebris(void)
|
||||||
{
|
{
|
||||||
memset(debrisToDraw, 0, sizeof(Debris*) * MAX_DEBRIS_TO_DRAW);
|
|
||||||
|
|
||||||
debrisTexture[0] = getTexture("gfx/debris/debris1.png");
|
debrisTexture[0] = getTexture("gfx/debris/debris1.png");
|
||||||
debrisTexture[1] = getTexture("gfx/debris/debris2.png");
|
debrisTexture[1] = getTexture("gfx/debris/debris2.png");
|
||||||
debrisTexture[2] = getTexture("gfx/debris/debris3.png");
|
debrisTexture[2] = getTexture("gfx/debris/debris3.png");
|
||||||
debrisTexture[3] = getTexture("gfx/debris/debris4.png");
|
debrisTexture[3] = getTexture("gfx/debris/debris4.png");
|
||||||
debrisTexture[4] = getTexture("gfx/debris/debris5.png");
|
debrisTexture[4] = getTexture("gfx/debris/debris5.png");
|
||||||
debrisTexture[5] = getTexture("gfx/debris/debris6.png");
|
debrisTexture[5] = getTexture("gfx/debris/debris6.png");
|
||||||
|
|
||||||
|
drawCapacity = INITIAL_BULLET_DRAW_CAPACITY;
|
||||||
|
|
||||||
|
debrisToDraw = malloc(sizeof(Bullet*) * drawCapacity);
|
||||||
|
memset(debrisToDraw, 0, sizeof(Bullet*) * drawCapacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void addDebris(int x, int y, int amount)
|
void addDebris(int x, int y, int amount)
|
||||||
|
@ -102,10 +107,10 @@ void doDebris(void)
|
||||||
if (collision(d->x - 16 - battle.camera.x, d->y - 16 - battle.camera.y, 32, 32, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT))
|
if (collision(d->x - 16 - battle.camera.x, d->y - 16 - battle.camera.y, 32, 32, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT))
|
||||||
{
|
{
|
||||||
debrisToDraw[i++] = d;
|
debrisToDraw[i++] = d;
|
||||||
if (i >= MAX_DEBRIS_TO_DRAW)
|
|
||||||
|
if (i == drawCapacity)
|
||||||
{
|
{
|
||||||
printf("Too much debris to draw\n");
|
resizeDrawList();
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,6 +119,29 @@ void doDebris(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void resizeDrawList(void)
|
||||||
|
{
|
||||||
|
int i, n;
|
||||||
|
Debris **debris;
|
||||||
|
|
||||||
|
n = drawCapacity + INITIAL_BULLET_DRAW_CAPACITY;
|
||||||
|
|
||||||
|
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Resizing debris draw capacity: %d -> %d\n", drawCapacity, n);
|
||||||
|
|
||||||
|
debris = malloc(sizeof(Debris*) * n);
|
||||||
|
memset(debris, 0, sizeof(Debris*) * n);
|
||||||
|
|
||||||
|
for (i = 0 ; i < drawCapacity ; i++)
|
||||||
|
{
|
||||||
|
debris[i] = debrisToDraw[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
free(debrisToDraw);
|
||||||
|
|
||||||
|
debrisToDraw = debris;
|
||||||
|
drawCapacity = n;
|
||||||
|
}
|
||||||
|
|
||||||
static void changeCourse(Debris *d)
|
static void changeCourse(Debris *d)
|
||||||
{
|
{
|
||||||
float dir;
|
float dir;
|
||||||
|
@ -139,3 +167,10 @@ void drawDebris(void)
|
||||||
blitRotated(d->texture, d->x - battle.camera.x, d->y - battle.camera.y, d->angle);
|
blitRotated(d->texture, d->x - battle.camera.x, d->y - battle.camera.y, d->angle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void destroyDebris(void)
|
||||||
|
{
|
||||||
|
free(debrisToDraw);
|
||||||
|
|
||||||
|
debrisToDraw = NULL;
|
||||||
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#include "../json/cJSON.h"
|
#include "../json/cJSON.h"
|
||||||
|
|
||||||
#define MAX_DEBRIS_TO_DRAW 512
|
#define INITIAL_DEBRIS_DRAW_CAPACITY 32
|
||||||
#define MAX_DEBRIS_TEXTURES 6
|
#define MAX_DEBRIS_TEXTURES 6
|
||||||
|
|
||||||
extern float mod(float n, float x);
|
extern float mod(float n, float x);
|
||||||
|
|
|
@ -26,12 +26,17 @@ static void setRandomShieldHue(Effect *e);
|
||||||
static SDL_Texture *explosionTexture;
|
static SDL_Texture *explosionTexture;
|
||||||
static SDL_Texture *shieldHitTexture;
|
static SDL_Texture *shieldHitTexture;
|
||||||
static SDL_Texture *haloTexture;
|
static SDL_Texture *haloTexture;
|
||||||
|
static Effect **effectsToDraw;
|
||||||
|
|
||||||
void initEffects(void)
|
void initEffects(void)
|
||||||
{
|
{
|
||||||
explosionTexture = getTexture("gfx/effects/explosion.png");
|
explosionTexture = getTexture("gfx/effects/explosion.png");
|
||||||
shieldHitTexture = getTexture("gfx/effects/shieldHit.png");
|
shieldHitTexture = getTexture("gfx/effects/shieldHit.png");
|
||||||
haloTexture = getTexture("gfx/effects/halo.png");
|
haloTexture = getTexture("gfx/effects/halo.png");
|
||||||
|
|
||||||
|
drawCapacity = INITIAL_EFFECTS_TO_DRAW;
|
||||||
|
|
||||||
|
effectsToDraw = malloc(sizeof(Effect*) * drawCapacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doEffects(void)
|
void doEffects(void)
|
||||||
|
@ -62,18 +67,54 @@ void doEffects(void)
|
||||||
free(e);
|
free(e);
|
||||||
e = prev;
|
e = prev;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (e->type == EFFECT_LINE || collision(e->x - (e->size / 2) - battle.camera.x, e->y - (b->size / 2) - battle.camera.y, e->size * 2, e->size * 2, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT))
|
||||||
|
{
|
||||||
|
effectsToDraw[i++] = e;
|
||||||
|
|
||||||
|
if (i == drawCapacity)
|
||||||
|
{
|
||||||
|
resizeDrawList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
prev = e;
|
prev = e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void resizeDrawList(void)
|
||||||
|
{
|
||||||
|
int i, n;
|
||||||
|
Effect **effects;
|
||||||
|
|
||||||
|
n = drawCapacity + INITIAL_EFFECT_DRAW_CAPACITY;
|
||||||
|
|
||||||
|
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Resizing effect draw capacity: %d -> %d\n", drawCapacity, n);
|
||||||
|
|
||||||
|
effects = malloc(sizeof(Effect*) * n);
|
||||||
|
memset(effects, 0, sizeof(Effect*) * n);
|
||||||
|
|
||||||
|
for (i = 0 ; i < drawCapacity ; i++)
|
||||||
|
{
|
||||||
|
effects[i] = effectsToDraw[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
free(effectsToDraw);
|
||||||
|
|
||||||
|
effectsToDraw = effects;
|
||||||
|
drawCapacity = n;
|
||||||
|
}
|
||||||
|
|
||||||
void drawEffects(void)
|
void drawEffects(void)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
Effect *e;
|
Effect *e;
|
||||||
|
|
||||||
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
|
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
for (e = battle.effectHead.next ; e != NULL ; e = e->next)
|
for (i = 0, e = effectsToDraw[i] ; e != NULL ; e = effectsToDraw[++i])
|
||||||
{
|
{
|
||||||
SDL_SetRenderDrawColor(app.renderer, e->r, e->g, e->b, e->a);
|
SDL_SetRenderDrawColor(app.renderer, e->r, e->g, e->b, e->a);
|
||||||
|
|
||||||
|
@ -478,3 +519,10 @@ static void setRandomShieldHue(Effect *e)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void destroyEffects(void)
|
||||||
|
{
|
||||||
|
free(effectsToDraw);
|
||||||
|
|
||||||
|
effectsToDraw = NULL;
|
||||||
|
}
|
||||||
|
|
|
@ -20,6 +20,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#include "../common.h"
|
#include "../common.h"
|
||||||
|
|
||||||
|
#define INITIAL_EFFECTS_TO_DRAW 128
|
||||||
|
|
||||||
extern void blitScaled(SDL_Texture *texture, int x, int y, int w, int h);
|
extern void blitScaled(SDL_Texture *texture, int x, int y, int w, int h);
|
||||||
extern SDL_Texture *getTexture(char *name);
|
extern SDL_Texture *getTexture(char *name);
|
||||||
extern void blit(SDL_Texture *t, int x, int y, int center);
|
extern void blit(SDL_Texture *t, int x, int y, int center);
|
||||||
|
|
Loading…
Reference in New Issue