Enemies now turn into a lootable device witha grave_stone sprite so you know they died. Need to implement noclipping on items with collision.

This commit is contained in:
Zed A. Shaw 2025-02-19 23:18:33 -05:00
parent 0199248354
commit 3b9525cca4
8 changed files with 92 additions and 74 deletions

12
gui.cpp
View file

@ -372,7 +372,7 @@ namespace gui {
System::collision($level);
System::motion($level);
System::lighting($level);
System::death($level);
System::death($level, $levels.$components);
}
bool FSM::active() {
@ -385,16 +385,14 @@ namespace gui {
while(world.has_event<eGUI>()) {
auto [evt, entity, data] = world.recv<eGUI>();
auto player = world.get_the<Player>();
switch(evt) {
case eGUI::COMBAT: {
auto &damage = std::any_cast<Events::Combat&>(data);
auto enemy_combat = world.get<Combat>(entity);
if(damage.enemy_did > 0) {
$status_view.log(fmt::format("Enemy HIT YOU for {} damage!", damage.enemy_did));
$status_view.log(fmt::format("-- Enemy has {} HP left.", enemy_combat.hp));
auto player = world.get_the<Player>();
auto player_combat = world.get<Combat>(player.entity);
$combat_view.set_damage(float(player_combat.hp) / float(player_combat.max_hp));
} else {
@ -425,6 +423,12 @@ namespace gui {
$rotation = 0;
event(Event::ATTACK);
break;
case eGUI::DEATH: {
if(entity != player.entity) {
auto &sprite = $level.world->get<Sprite>(entity);
$rayview.update_sprite(entity, sprite);
}
} break;
case eGUI::NOOP:
$status_view.log(fmt::format("NOOP EVENT! {},{}", evt, entity));
break;