[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.
|
* -- Text and GUI.
|
||||||
*/
|
*/
|
||||||
static void render_all(void) {
|
static void render_all(void) {
|
||||||
|
double dt;
|
||||||
|
|
||||||
|
dt = (paused) ? 0. : cur_dt;
|
||||||
/* Setup. */
|
/* Setup. */
|
||||||
spfx_start(cur_dt);
|
spfx_start(dt);
|
||||||
/* BG. */
|
/* BG. */
|
||||||
space_render(cur_dt);
|
space_render(dt);
|
||||||
planets_render();
|
planets_render();
|
||||||
player_renderBG();
|
player_renderBG();
|
||||||
weapons_render(WEAPON_LAYER_BG);
|
weapons_render(WEAPON_LAYER_BG, dt);
|
||||||
/* N. */
|
/* N. */
|
||||||
pilots_render();
|
pilots_render();
|
||||||
weapons_render(WEAPON_LAYER_FG);
|
weapons_render(WEAPON_LAYER_FG, dt);
|
||||||
spfx_render(SPFX_LAYER_BACK);
|
spfx_render(SPFX_LAYER_BACK);
|
||||||
/* FG. */
|
/* FG. */
|
||||||
player_render();
|
player_render();
|
||||||
spfx_render(SPFX_LAYER_FRONT);
|
spfx_render(SPFX_LAYER_FRONT);
|
||||||
space_renderOverlay(cur_dt);
|
space_renderOverlay(dt);
|
||||||
player_renderGUI();
|
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. */
|
int voice; /**< Weapons voice. */
|
||||||
double lockon; /**< Some weapons have a lockon delay. */
|
double lockon; /**< Some weapons have a lockon delay. */
|
||||||
double timer; /**< Mainly used to see when the weapon was fired. */
|
double timer; /**< Mainly used to see when the weapon was fired. */
|
||||||
|
double anim; /**< Used for beam weapon graphics. */
|
||||||
|
|
||||||
/* Update position and render. */
|
/* Update position and render. */
|
||||||
void(*update)(struct Weapon_*, const double, WeaponLayer); /**< Update the weapon. */
|
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 parent,
|
||||||
const unsigned int target);
|
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 weapons_updateLayer(const double dt, const WeaponLayer layer);
|
||||||
static void weapon_update(Weapon* w, const double dt, 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);
|
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.
|
* @brief Render all the weapons in a layer.
|
||||||
* @param layer Layer to render.
|
* @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;
|
Weapon** wlayer;
|
||||||
int* nlayer;
|
int* nlayer;
|
||||||
int i;
|
int i;
|
||||||
@ -403,16 +405,16 @@ void weapons_render(const WeaponLayer layer) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for(i = 0; i < (*nlayer); i++)
|
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.
|
* @brief Render an individual weapon.
|
||||||
* @param w Weapon to render.
|
* @param w Weapon to render.
|
||||||
*/
|
*/
|
||||||
static void weapon_render(const Weapon* w) {
|
static void weapon_render(Weapon* w, const double dt) {
|
||||||
int sx, sy;
|
int sx, sy;
|
||||||
double x, y;
|
double x, y;
|
||||||
glTexture* gfx;
|
glTexture* gfx;
|
||||||
@ -457,34 +459,42 @@ static void weapon_render(const Weapon* w) {
|
|||||||
/* Start fading. */
|
/* Start fading. */
|
||||||
ACOLOUR(cWhite, 0.);
|
ACOLOUR(cWhite, 0.);
|
||||||
|
|
||||||
glTexCoord2d(0., 0.);
|
glTexCoord2d(w->anim, 0.);
|
||||||
glVertex2d(-gfx->sh/2., 0.);
|
glVertex2d(-gfx->sh/2., 0.);
|
||||||
|
|
||||||
glTexCoord2d(0., 1.);
|
glTexCoord2d(w->anim, 1.);
|
||||||
glVertex2d(+gfx->sh/2., 0.);
|
glVertex2d(+gfx->sh/2., 0.);
|
||||||
|
|
||||||
/* Full Strength. */
|
/* Full Strength. */
|
||||||
COLOUR(cWhite);
|
COLOUR(cWhite);
|
||||||
|
|
||||||
glTexCoord2d(10. / gfx->sw, 0.);
|
glTexCoord2d(w->anim+10. / gfx->sw, 0.);
|
||||||
glVertex2d(-gfx->sh/2., 10.);
|
glVertex2d(-gfx->sh/2., 10.);
|
||||||
|
|
||||||
glTexCoord2d(10. / gfx->sw, 1.);
|
glTexCoord2d(w->anim+10. / gfx->sw, 1.);
|
||||||
glVertex2d(+gfx->sh/2., 10.);
|
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);
|
glVertex2d(+gfx->sh/2., 0.8*w->outfit->u.bem.range);
|
||||||
|
|
||||||
/* Fades out. */
|
/* Fades out. */
|
||||||
ACOLOUR(cWhite, 0.);
|
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);
|
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);
|
glVertex2d(+gfx->sh/2., w->outfit->u.bem.range);
|
||||||
glEnd();
|
glEnd();
|
||||||
|
|
||||||
|
/* Do the beam movement. */
|
||||||
|
w->anim -= 5. * dt;
|
||||||
|
if(w->anim <= -gfx->sw)
|
||||||
|
w->anim += gfx->sw;
|
||||||
|
|
||||||
/* Clean up. */
|
/* Clean up. */
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
glShadeModel(GL_FLAT);
|
glShadeModel(GL_FLAT);
|
||||||
|
@ -28,7 +28,7 @@ void weapon_explode(double x, double y, double radius,
|
|||||||
|
|
||||||
/* Update. */
|
/* Update. */
|
||||||
void weapons_update(const double dt);
|
void weapons_update(const double dt);
|
||||||
void weapons_render(const WeaponLayer layer);
|
void weapons_render(const WeaponLayer layer, const double dt);
|
||||||
|
|
||||||
/* Clean. */
|
/* Clean. */
|
||||||
void weapon_clear(void);
|
void weapon_clear(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user