diff options
author | Paweł Redman <pawel.redman@gmail.com> | 2018-04-13 11:30:01 +0200 |
---|---|---|
committer | Paweł Redman <pawel.redman@gmail.com> | 2018-04-13 11:30:01 +0200 |
commit | 84a648723674934ef46e1799404d778474a74aeb (patch) | |
tree | 2a468b9d991942f7ecf23068177a986163522314 /src/game/effects.cpp | |
parent | dd83ee59e481d58f5c30751d9dead295750857ca (diff) |
Explosions, better AI and misc refactoring.
Diffstat (limited to 'src/game/effects.cpp')
-rw-r--r-- | src/game/effects.cpp | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/game/effects.cpp b/src/game/effects.cpp index a398527..6f92f17 100644 --- a/src/game/effects.cpp +++ b/src/game/effects.cpp @@ -26,7 +26,7 @@ effect_t::effect_t(state_t *game_) : game::entity_t(game_, ET_EFFECT) void effect_t::on_think(void) { if (game->now >= ttl) - destroy(); + delete this; } fx_tracer_t::fx_tracer_t(state_t *game_, v2f_t x0_, v2f_t x1_) : effect_t(game_) @@ -39,6 +39,7 @@ fx_tracer_t::fx_tracer_t(state_t *game_, v2f_t x0_, v2f_t x1_) : effect_t(game_) render_bounds[0] = x0; render_bounds[1] = x1; render_bounds = render_bounds.norm(); + render_layer = render::LAYER_TOP; cmodel.bounds = render_bounds; cmodel.cflags = 0; @@ -72,6 +73,7 @@ fx_flash_t::fx_flash_t(state_t *game_, v2f_t x_, float radius_) : effect_t(game_ render_bounds[0] = x - v2f_t(radius, radius); render_bounds[1] = x + v2f_t(radius, radius); render_bounds = render_bounds.norm(); + render_layer = render::LAYER_TOP; cmodel.bounds = render_bounds; cmodel.cflags = 0; @@ -127,12 +129,6 @@ fx_move_marker_t::fx_move_marker_t(state_t *game_, v2f_t x_) : effect_t(game_) link(&game->world); } -fx_move_marker_t::~fx_move_marker_t(void) -{ - unlink(); - sleep(); -} - void fx_move_marker_t::render_to(render::state_t *render) { render->render(game->now * 2, &assets::move_marker, render_bounds, sf::Color::White); @@ -151,15 +147,33 @@ fx_aim_marker_t::fx_aim_marker_t(state_t *game_, v2f_t x_) : effect_t(game_) link(&game->world); } -fx_aim_marker_t::~fx_aim_marker_t(void) +void fx_aim_marker_t::render_to(render::state_t *render) { - unlink(); - sleep(); + render->render(game->now * 2, &assets::aim_marker, render_bounds, sf::Color::White); } -void fx_aim_marker_t::render_to(render::state_t *render) +fx_explosion_t::fx_explosion_t(state_t *game_, v2f_t x_) : effect_t(game_) { - render->render(game->now * 2, &assets::aim_marker, render_bounds, sf::Color::White); + ttl = game->now + 1.3; + + x = x_; + + render_bounds[0] = x + v2f_t(-1.0, -2.5); + render_bounds[1] = x + v2f_t(1.0, 0.5); + render_bounds = render_bounds.norm(); + cmodel.bounds = render_bounds; + cmodel.cflags = 0; + + ignore_waking = true; + wake(); + + assets::fx.explosion_sound.play_3d(x); +} + +void fx_explosion_t::render_to(render::state_t *render) +{ + double phase = (game->now - ttl) / 1.3f; + render->render(phase, &assets::fx.explosion, render_bounds, sf::Color::White); } } // namespace game |