[Change] Some corrections for rendering weapons with delta time.

This commit is contained in:
Allanis 2013-12-15 17:30:50 +00:00
parent 19b8f38acf
commit 389a7b5746
3 changed files with 32 additions and 19 deletions

View File

@ -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. */
} }

View File

@ -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);

View File

@ -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);