From 8a294f76c0d53126a82802758e4067ab74317018 Mon Sep 17 00:00:00 2001 From: Allanis Date: Wed, 24 Jul 2013 16:38:07 +0100 Subject: [PATCH] [Add] Fancy cargo graphics for when jettisoning. --- gfx/spfx/cargo.png | Bin 0 -> 13775 bytes src/economy.c | 32 ++++++++++++++++++++++++++++++++ src/economy.h | 1 + src/menu.c | 2 ++ src/spfx.c | 36 ++++++++++++++++++++++++++---------- 5 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 gfx/spfx/cargo.png diff --git a/gfx/spfx/cargo.png b/gfx/spfx/cargo.png new file mode 100644 index 0000000000000000000000000000000000000000..c9db109b91e8294ff1108e74131d486dc87ccd8e GIT binary patch literal 13775 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 FV1nC}b9Vp$ literal 0 HcmV?d00001 diff --git a/src/economy.c b/src/economy.c index 8e17f4f..6a90cea 100644 --- a/src/economy.c +++ b/src/economy.c @@ -6,6 +6,9 @@ #include "xml.h" #include "pack.h" #include "log.h" +#include "spfx.h" +#include "pilot.h" +#include "rng.h" #include "economy.h" #define XML_COMMODITY_ID "Commodities" /* XML section identifier. */ @@ -82,6 +85,35 @@ static Commodity* commodity_parse(xmlNodePtr parent) { return tmp; } +/* Throw cargo out into space (graphically). */ +void commodity_Jettison(int pilot, Commodity* com, int quantity) { + (void)com; + int i; + Pilot* p; + int n, effect; + double px, py, r, a, vx, vy; + + p = pilot_get(pilot); + + n = MAX(1, RNG(quantity/10, quantity/5)); + px = p->solid->pos.x; + py = p->solid->pos.y; + + for(i = 0; i < n; i++) { + effect = spfx_get("cargo"); + + /* Radial distribution gives much nicer results. */ + r = RNGF()*25 - 12.5; + a = (double)RNG(0,259); + vx = r*cos(a); + vy = r*sin(a); + + /* Add the cargo effect. */ + spfx_add(effect, px, py, vx, vy, SPFX_LAYER_BACK); + } +} + +/* Init/exit */ int commodity_load(void) { uint32_t bufsize; char* buf = pack_readfile(DATA, COMMODITY_DATA, &bufsize); diff --git a/src/economy.h b/src/economy.h index 76619dc..4d54fe8 100644 --- a/src/economy.h +++ b/src/economy.h @@ -13,4 +13,5 @@ void commodity_free(void); /* Misc. */ void credits2str(char* str, unsigned int credits, int decimals); +void commodity_Jettison(int pilot, Commodity* com, int quantity); diff --git a/src/menu.c b/src/menu.c index 9c8f940..a0f9d8e 100644 --- a/src/menu.c +++ b/src/menu.c @@ -370,6 +370,8 @@ static void cargo_jettison(char* str) { pos = toolkit_getListPos(wid, "lstCargo"); /* Remove the cargo. */ + commodity_Jettison(player->id, player->commodities[pos].commodity, + player->commodities[pos].quantity); pilot_rmCargo(player, player->commodities[pos].commodity, player->commodities[pos].quantity); diff --git a/src/spfx.c b/src/spfx.c index 5cc3be9..8b7ee5e 100644 --- a/src/spfx.c +++ b/src/spfx.c @@ -24,7 +24,9 @@ static int shake_off = 1; typedef struct SPFX_Base_ { char* name; + double ttl; /* Time to live. */ double anim; /* Total duration in ms. */ + glTexture* gfx; /* Will use each sprite as a frame. */ } SPFX_Base; @@ -48,13 +50,13 @@ static SPFX* spfx_stack_back = NULL; static int spfx_nstack_back = 0; static int spfx_mstack_back = 0; -static int spfx_base_load(char* name, int anim, char* gfx, int sx, int sy); +static int spfx_base_load(char* name, int ttl, int anim, char* gfx, int sx, int sy); static void spfx_base_free(SPFX_Base* effect); static void spfx_destroy(SPFX* layer, int* nlayer, int spfx); static void spfx_update_layer(SPFX* layer, int* nlayer, const double dt); /* Load the SPFX_Base. */ -static int spfx_base_load(char* name, int anim, char* gfx, int sx, int sy) { +static int spfx_base_load(char* name, int ttl, int anim, char* gfx, int sx, int sy) { SPFX_Base* cur; char buf[PATH_MAX]; @@ -65,6 +67,7 @@ static int spfx_base_load(char* name, int anim, char* gfx, int sx, int sy) { /* Fill it with the data. */ cur->name = strdup(name); cur->anim = (double)anim / 1000.; + cur->ttl = (double)ttl / 1000.; sprintf(buf, SPFX_GFX"%s", gfx); cur->gfx = gl_newSprite(buf, sx, sy); @@ -90,9 +93,10 @@ int spfx_get(char* name) { */ int spfx_load(void) { /* Standard explosion effects. */ - spfx_base_load("ExpS", 400, "exps.png", 6, 5); - spfx_base_load("ExpM", 450, "expm.png", 6, 5); - spfx_base_load("ExpL", 500, "expl.png", 6, 5); + spfx_base_load("ExpS", 400, 400, "exps.png", 6, 5); + spfx_base_load("ExpM", 450, 450, "expm.png", 6, 5); + spfx_base_load("ExpL", 500, 500, "expl.png", 6, 5); + spfx_base_load("cargo", 15000, 5000, "cargo.png", 6, 6); return 0; } @@ -119,8 +123,11 @@ void spfx_add(int effect, const double px, const double py, const double vx, const double vy, const int layer) { - SPFX* cur_spfx; + SPFX* cur_spfx; + double ttl, anim; + + /* Select the layer. */ if(layer == SPFX_LAYER_FRONT) { /* Front layer. */ if(spfx_mstack_front < spfx_nstack_front+1) { @@ -142,10 +149,17 @@ void spfx_add(int effect, spfx_nstack_back++; } + /* The actualy adding of the spfx. */ cur_spfx->effect = effect; vect_csetmin(&cur_spfx->pos, px, py); vect_csetmin(&cur_spfx->vel, vx, vy); - cur_spfx->timer = (double)spfx_effects[effect].anim; + /* timer magic if ttl != anim. */ + ttl = spfx_effects[effect].ttl; + anim = spfx_effects[effect].anim; + if(ttl != anim) + cur_spfx->timer = ttl + RNGF()*anim; + else + cur_spfx->timer = ttl; } void spfx_clear(void) { @@ -264,6 +278,7 @@ void spfx_render(const int layer) { int i, spfx_nstack; SPFX_Base* effect; int sx, sy; + double time; /* Get the appropriate layer. */ switch(layer) { @@ -285,9 +300,10 @@ void spfx_render(const int layer) { sx = (int)effect->gfx->sx; sy = (int)effect->gfx->sy; - if(!paused) /* Don't calculate frame if paused. */ - spfx_stack[i].lastframe = sx * sy - * MIN(((double)(spfx_stack[i].timer)/(double)effect->anim), 1.); + if(!paused) { /* Don't calculate frame if paused. */ + time = fmod(spfx_stack[i].timer, effect->anim) / effect->anim; + spfx_stack[i].lastframe = sx * sy * MIN(time, 1.); + } /* Render. */ gl_blitSprite(effect->gfx,