summaryrefslogtreecommitdiff
path: root/src/game/effects.cpp
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2018-04-13 11:30:01 +0200
committerPaweł Redman <pawel.redman@gmail.com>2018-04-13 11:30:01 +0200
commit84a648723674934ef46e1799404d778474a74aeb (patch)
tree2a468b9d991942f7ecf23068177a986163522314 /src/game/effects.cpp
parentdd83ee59e481d58f5c30751d9dead295750857ca (diff)
Explosions, better AI and misc refactoring.
Diffstat (limited to 'src/game/effects.cpp')
-rw-r--r--src/game/effects.cpp38
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