Skip to content

Commit 4e05058

Browse files
authored
Render explosions on radar (#2714)
1 parent 42b8582 commit 4e05058

File tree

5 files changed

+23
-4
lines changed

5 files changed

+23
-4
lines changed

src/systems/damage.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,9 @@ void DamageSystem::destroyedByDamage(sp::ecs::Entity entity, const DamageInfo& i
175175
if (auto transform = entity.getComponent<sp::Transform>()) {
176176
if (auto physics = entity.getComponent<sp::Physics>()) {
177177
auto e = sp::ecs::Entity::create();
178-
e.addComponent<ExplosionEffect>().size = physics->getSize().x * 1.5f;
178+
auto& ee = e.addComponent<ExplosionEffect>();
179+
ee.size = physics->getSize().x * 1.5f;
180+
ee.radar = true;
179181
e.addComponent<sp::Transform>(*transform);
180182
e.addComponent<RawRadarSignatureInfo>(0.0f, 0.4f, 0.4f);
181183
}

src/systems/energysystem.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ void EnergySystem::update(float delta)
6060
auto transform = entity.getComponent<sp::Transform>();
6161
if (transform) {
6262
auto e = sp::ecs::Entity::create();
63-
e.addComponent<ExplosionEffect>().size = 1000.0;
63+
auto& ee = e.addComponent<ExplosionEffect>();
64+
ee.size = 1000.0;
65+
ee.radar = true;
6466
e.addComponent<sp::Transform>(*transform);
6567
e.addComponent<RawRadarSignatureInfo>(0.0f, 0.4f, 0.4f);
6668

src/systems/rendering.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,17 @@ void ExplosionRenderSystem::update(float delta)
210210
}
211211
}
212212

213+
void ExplosionRenderSystem::renderOnRadar(sp::RenderTarget& renderer, sp::ecs::Entity entity, glm::vec2 screen_position, float scale, float rotation, ExplosionEffect& explosion)
214+
{
215+
if (!explosion.radar) return;
216+
217+
// Fade alpha over lifetime
218+
uint8_t alpha = static_cast<uint8_t>(64.0f * explosion.lifetime / ExplosionEffect::max_lifetime);
219+
220+
// Draw electrical/EMP explosions blue, rest red
221+
renderer.fillCircle(screen_position, explosion.size * scale, explosion.electrical ? glm::u8vec4(0, 0, 255, alpha) : glm::u8vec4(255, 0, 0, alpha));
222+
}
223+
213224
void ExplosionRenderSystem::render3D(sp::ecs::Entity e, sp::Transform& transform, ExplosionEffect& ee)
214225
{
215226
float f = (1.0f - (ee.lifetime / ee.max_lifetime));

src/systems/rendering.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "components/collision.h"
77
#include "components/rendering.h"
88
#include "main.h"
9+
#include "systems/radar.h"
910
#include <glm/geometric.hpp>
1011

1112
template<typename COMPONENT, bool TRANSPARENT> class Render3DInterface {
@@ -90,11 +91,12 @@ class NebulaRenderSystem : public sp::ecs::System, public Render3DInterface<Nebu
9091
void render3D(sp::ecs::Entity e, sp::Transform& transform, NebulaRenderer& nr) override;
9192
};
9293

93-
class ExplosionRenderSystem : public sp::ecs::System, public Render3DInterface<ExplosionEffect, true>
94+
class ExplosionRenderSystem : public sp::ecs::System, public Render3DInterface<ExplosionEffect, true>, public RenderRadarInterface<ExplosionEffect, 15, RadarRenderSystem::FlagNone>
9495
{
9596
public:
9697
void update(float delta) override;
9798
void render3D(sp::ecs::Entity e, sp::Transform& transform, ExplosionEffect& ee) override;
99+
void renderOnRadar(sp::RenderTarget& renderer, sp::ecs::Entity entity, glm::vec2 screen_position, float scale, float rotation, ExplosionEffect& explosion) override;
98100
};
99101

100102
class BillboardRenderSystem : public sp::ecs::System, public Render3DInterface<BillboardRenderer, true>

src/systems/selfdestruct.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ void SelfDestructSystem::update(float delta)
4545
for(int n = 0; n < 5; n++)
4646
{
4747
auto e = sp::ecs::Entity::create();
48-
e.addComponent<ExplosionEffect>().size = self_destruct.size * 0.67f;
48+
auto& ee = e.addComponent<ExplosionEffect>();
49+
ee.size = self_destruct.size * 0.67f;
50+
ee.radar = true;
4951
e.addComponent<sp::Transform>(*transform);
5052
e.addComponent<RawRadarSignatureInfo>(0.0f, 0.6f, 0.6f);
5153
}

0 commit comments

Comments
 (0)