Implement a simple combat system and killing off enemies. See status for next steps.

This commit is contained in:
Zed A. Shaw 2024-10-26 20:29:55 -04:00
parent 62562faad3
commit 4162287841
4 changed files with 30 additions and 15 deletions

View file

@ -66,7 +66,7 @@ void System::motion(DinkyECS::World &world, Map &game_map) {
void System::combat(DinkyECS::World &world, Player &player) {
const auto& collider = world.get<spatial_map>();
auto& collider = world.get<spatial_map>();
const auto& player_position = world.component<Position>(player.entity);
auto& player_combat = world.component<Combat>(player.entity);
auto& log = world.get<ActionLog>();
@ -76,14 +76,26 @@ void System::combat(DinkyECS::World &world, Player &player) {
if(found) {
for(auto entity : nearby) {
int attack = Random::uniform<int>(0,1);
if(attack) {
const auto& enemy_dmg = world.component<Combat>(entity);
int dmg = Random::uniform<int>(1, enemy_dmg.damage);
player_combat.hp -= dmg;
log.log(format("HIT! You took {} damage.", dmg));
auto& enemy_combat = world.component<Combat>(entity);
int player_dmg = Random::uniform<int>(1, enemy_combat.damage);
enemy_combat.hp -= player_dmg;
log.log(format("YOU HIT {} damage! Enemy has {} HP left.",
player_dmg, enemy_combat.hp));
if(enemy_combat.hp <= 0) {
log.log("--- ENEMY DEAD!---");
auto enemy_position = world.component<Position>(entity);
collider.remove(enemy_position.location);
world.remove<Motion>(entity);
} else {
log.log("You dodged! Run!");
int attack = Random::uniform<int>(0,1);
if(attack) {
int dmg = Random::uniform<int>(1, enemy_combat.damage);
player_combat.hp -= dmg;
log.log(format("HIT! You took {} damage.", dmg));
} else {
log.log("You dodged! Run!");
}
}
}
}