Files
aee-arcade/source/game/entities/concrete/wall_trap.cpp
T

37 lines
1.2 KiB
C++

#include "game/entities/concrete/wall_trap.hpp"
#include <string>
#include "game/entities/entity_factory.hpp"
#include "game/entities/event_bus.hpp"
#include "game/entities/player.hpp"
WallTrap::WallTrap(const fkyaml::node& yaml) {
name_ = yaml.contains("name") ? yaml["name"].get_value<std::string>() : std::string("wall_trap");
collides_ = false;
interactable_ = false;
if (yaml.contains("cycle")) {
const auto& c = yaml["cycle"];
const float ACTIVE = c.contains("active_duration") ? c["active_duration"].get_value<float>() : 0.5F;
const float INACTIVE = c.contains("inactive_duration") ? c["inactive_duration"].get_value<float>() : 1.5F;
setCycle(ACTIVE, INACTIVE);
}
if (yaml.contains("stats") && yaml["stats"].contains("damage")) {
setDamage(yaml["stats"]["damage"].get_value<int>());
}
}
void WallTrap::onPlayerContact(Player* player) {
if (!isActive()) { return; }
if (bus_ != nullptr) {
bus_->publish(Event{
.name = "player_hit",
.payload = getDamage(),
.player_id = (player != nullptr) ? player->getId() : -1,
});
}
}
REGISTER_ENTITY("wall_trap", WallTrap)