[Change] Some corrections for rendering weapons with delta time.
This commit is contained in:
parent
19b8f38acf
commit
389a7b5746
@ -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. */
|
||||
}
|
||||
|
||||
|
||||
|
34
src/weapon.c
34
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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user