diff --git a/src/lephisto.c b/src/lephisto.c index b4ca7c7..8daff3c 100644 --- a/src/lephisto.c +++ b/src/lephisto.c @@ -455,23 +455,26 @@ static void update_routine(double dt) { * -- Text and GUI. */ static void render_all(void) { + double dt; + + dt = (paused) ? 0. : cur_dt; /* Setup. */ - spfx_start(cur_dt); + spfx_start(dt); /* BG. */ - space_render(cur_dt); + space_render(dt); planets_render(); player_renderBG(); - weapons_render(WEAPON_LAYER_BG); + weapons_render(WEAPON_LAYER_BG, dt); /* N. */ pilots_render(); - weapons_render(WEAPON_LAYER_FG); + weapons_render(WEAPON_LAYER_FG, dt); spfx_render(SPFX_LAYER_BACK); /* FG. */ player_render(); spfx_render(SPFX_LAYER_FRONT); - space_renderOverlay(cur_dt); + space_renderOverlay(dt); player_renderGUI(); - display_fps(cur_dt); + display_fps(dt); /* Exception. */ } diff --git a/src/weapon.c b/src/weapon.c index e9deb97..7ab629c 100644 --- a/src/weapon.c +++ b/src/weapon.c @@ -65,6 +65,7 @@ typedef struct Weapon_ { int voice; /**< Weapons voice. */ double lockon; /**< Some weapons have a lockon delay. */ double timer; /**< Mainly used to see when the weapon was fired. */ + double anim; /**< Used for beam weapon graphics. */ /* Update position and render. */ void(*update)(struct Weapon_*, const double, WeaponLayer); /**< Update the weapon. */ @@ -91,7 +92,7 @@ static Weapon* weapon_create(const Outfit* outfit, const double dir, const unsigned int parent, const unsigned int target); -static void weapon_render(const Weapon* w); +static void weapon_render(Weapon* w, const double dt); static void weapons_updateLayer(const double dt, const WeaponLayer layer); static void weapon_update(Weapon* w, const double dt, WeaponLayer layer); static void weapon_hit(Weapon* w, Pilot* p, WeaponLayer layer, Vec2* pos); @@ -386,8 +387,9 @@ static void weapons_updateLayer(const double dt, const WeaponLayer layer) { * * @brief Render all the weapons in a layer. * @param layer Layer to render. + * @param Current delta tick. */ -void weapons_render(const WeaponLayer layer) { +void weapons_render(const WeaponLayer layer, const double dt) { Weapon** wlayer; int* nlayer; int i; @@ -403,16 +405,16 @@ void weapons_render(const WeaponLayer layer) { break; } for(i = 0; i < (*nlayer); i++) - weapon_render(wlayer[i]); + weapon_render(wlayer[i], dt); } /** - * @fn static void weapon_render(const Weapon* w) + * @fn static void weapon_render(Weapon* w, const double dt) * * @brief Render an individual weapon. * @param w Weapon to render. */ -static void weapon_render(const Weapon* w) { +static void weapon_render(Weapon* w, const double dt) { int sx, sy; double x, y; glTexture* gfx; @@ -457,34 +459,42 @@ static void weapon_render(const Weapon* w) { /* Start fading. */ ACOLOUR(cWhite, 0.); - glTexCoord2d(0., 0.); + glTexCoord2d(w->anim, 0.); glVertex2d(-gfx->sh/2., 0.); - glTexCoord2d(0., 1.); + glTexCoord2d(w->anim, 1.); glVertex2d(+gfx->sh/2., 0.); /* Full Strength. */ COLOUR(cWhite); - glTexCoord2d(10. / gfx->sw, 0.); + glTexCoord2d(w->anim+10. / gfx->sw, 0.); glVertex2d(-gfx->sh/2., 10.); - glTexCoord2d(10. / gfx->sw, 1.); + glTexCoord2d(w->anim+10. / gfx->sw, 1.); glVertex2d(+gfx->sh/2., 10.); - glTexCoord2d(0.8*w->outfit->u.bem.range / gfx->sw, 0.); + glTexCoord2d(w->anim+0.8*w->outfit->u.bem.range / gfx->sw, 0.); + glVertex2d(+gfx->sh/2., 0.8*w->outfit->u.bem.range); + + glTexCoord2d(w->anim+0.8*w->outfit->u.bem.range / gfx->sw, 1.); glVertex2d(+gfx->sh/2., 0.8*w->outfit->u.bem.range); /* Fades out. */ ACOLOUR(cWhite, 0.); - glTexCoord2d(w->outfit->u.bem.range / gfx->sw, 0.); + glTexCoord2d(w->anim+w->outfit->u.bem.range / gfx->sw, 0.); glVertex2d(-gfx->sh/2., w->outfit->u.bem.range); - glTexCoord2d(w->outfit->u.bem.range / gfx->sw, 1.); + glTexCoord2d(w->anim+w->outfit->u.bem.range / gfx->sw, 1.); glVertex2d(+gfx->sh/2., w->outfit->u.bem.range); glEnd(); + /* Do the beam movement. */ + w->anim -= 5. * dt; + if(w->anim <= -gfx->sw) + w->anim += gfx->sw; + /* Clean up. */ glDisable(GL_TEXTURE_2D); glShadeModel(GL_FLAT); diff --git a/src/weapon.h b/src/weapon.h index 1ee8471..f9dcaec 100644 --- a/src/weapon.h +++ b/src/weapon.h @@ -28,7 +28,7 @@ void weapon_explode(double x, double y, double radius, /* Update. */ void weapons_update(const double dt); -void weapons_render(const WeaponLayer layer); +void weapons_render(const WeaponLayer layer, const double dt); /* Clean. */ void weapon_clear(void);