summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/units/blood_0.pngbin0 -> 540 bytes
-rw-r--r--assets/units/blood_1.pngbin0 -> 982 bytes
-rw-r--r--assets/units/blood_2.pngbin0 -> 1208 bytes
-rw-r--r--assets/units/blood_3.pngbin0 -> 656 bytes
-rw-r--r--src/game/assets.cpp3
-rw-r--r--src/game/effects.cpp20
-rw-r--r--src/game/game.hpp14
-rw-r--r--src/game/units.cpp15
8 files changed, 47 insertions, 5 deletions
diff --git a/assets/units/blood_0.png b/assets/units/blood_0.png
new file mode 100644
index 0000000..814b9d2
--- /dev/null
+++ b/assets/units/blood_0.png
Binary files differ
diff --git a/assets/units/blood_1.png b/assets/units/blood_1.png
new file mode 100644
index 0000000..e717dbb
--- /dev/null
+++ b/assets/units/blood_1.png
Binary files differ
diff --git a/assets/units/blood_2.png b/assets/units/blood_2.png
new file mode 100644
index 0000000..7656bd6
--- /dev/null
+++ b/assets/units/blood_2.png
Binary files differ
diff --git a/assets/units/blood_3.png b/assets/units/blood_3.png
new file mode 100644
index 0000000..9b7860f
--- /dev/null
+++ b/assets/units/blood_3.png
Binary files differ
diff --git a/src/game/assets.cpp b/src/game/assets.cpp
index dddd447..1b57800 100644
--- a/src/game/assets.cpp
+++ b/src/game/assets.cpp
@@ -4,6 +4,7 @@ namespace game::assets {
human_assets_t human;
alien_assets_t alien;
+fx_assets_t fx;
void load(void)
{
@@ -19,6 +20,8 @@ void load(void)
alien.walking.load("assets/units/alien/walking", 2, 2, 2);
alien.dead.load("assets/units/alien/dead_", 1);
+ fx.blood.load("assets/units/blood_", 4);
+
world::register_tile(TILE_DIRT, 0);
world::register_tile(TILE_WALL, CF_SOLID);
render::register_tile(TILE_DIRT, "assets/tiles/dirt.png");
diff --git a/src/game/effects.cpp b/src/game/effects.cpp
index 99c8be8..e80623e 100644
--- a/src/game/effects.cpp
+++ b/src/game/effects.cpp
@@ -17,6 +17,8 @@ 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();
+ cmodel.bounds = render_bounds;
+ cmodel.cflags = 0;
}
void fx_tracer_t::render_to(render::state_t *render)
@@ -34,4 +36,22 @@ void fx_tracer_t::render_to(render::state_t *render)
render->render_line(x0l, x1l, sf::Color::Yellow);
}
+fx_blood_t::fx_blood_t(state_t *game_, v2f_t x_, bool alien_) : effect_t(game_)
+{
+ ttl = game->now + 1.0f;
+
+ x = x_;
+ alien = alien_;
+
+ render_bounds[0] = x - v2f_t(0.2, 0.2);
+ render_bounds[1] = x + v2f_t(0.2, 0.2);
+ cmodel.bounds = render_bounds;
+ cmodel.cflags = 0;
+}
+
+void fx_blood_t::render_to(render::state_t *render)
+{
+ render->render(&assets::fx.blood, render_bounds);
+}
+
} // namespace game
diff --git a/src/game/game.hpp b/src/game/game.hpp
index 0a1d0ca..8949911 100644
--- a/src/game/game.hpp
+++ b/src/game/game.hpp
@@ -37,8 +37,13 @@ namespace game {
render::animated_texture_t dead;
} alien_assets_t;
+ typedef struct {
+ render::animated_texture_t blood;
+ } fx_assets_t;
+
extern human_assets_t human;
extern alien_assets_t alien;
+ extern fx_assets_t fx;
void load(void);
}
@@ -157,4 +162,13 @@ namespace game {
fx_tracer_t(game::state_t *game_, v2f_t x0_, v2f_t x1_);
void render_to(render::state_t *render);
};
+
+ class fx_blood_t : public effect_t {
+ bool alien;
+ v2f_t x;
+
+ public:
+ fx_blood_t(game::state_t *game_, v2f_t x_, bool alien_);
+ void render_to(render::state_t *render);
+ };
};
diff --git a/src/game/units.cpp b/src/game/units.cpp
index c50a3fb..65f0a2c 100644
--- a/src/game/units.cpp
+++ b/src/game/units.cpp
@@ -182,6 +182,11 @@ bool unit_t::start_moving(v2f_t dst, world::cflags_t cflags)
void unit_t::damage(int points, unit_t *attacker)
{
+ fx_blood_t *blood;
+
+ blood = new fx_blood_t(game, x, type == UNIT_ALIEN);
+ game->add_effect(blood);
+
health -= points;
if (health < 0) {
game->interface->print(name + " " + text::get(text::UNIT_DEATH) + ".");
@@ -294,16 +299,16 @@ void human_t::think(void)
if (last_attack + 1.5 < game->now) {
world::trace_t trace;
+ fx_tracer_t *tracer;
+
+ tracer = new fx_tracer_t(game, x, target->x);
+ game->add_effect(tracer);
+ std::cout << tracer->cmodel.bounds << std::endl;
trace = world->trace(x, target->x, CF_SOLID);
if (!trace.hit) {
- fx_tracer_t *tracer;
-
last_attack = game->now;
try_attack(target);
-
- tracer = new fx_tracer_t(game, x, target->x);
- game->add_effect(tracer);
}
}