Select Git revision
Simulation.java
Forked from
YAGOUBI Rim / Game of life Template
Source project has a limited visibility.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Enemy.cpp 1.66 KiB
#include "Enemy.hpp"
#include <kernel/front/Kernel.hpp>
namespace megu::game {
Enemy::Enemy(float x, float y, float w, float h, std::filesystem::path & path)
: kernel::PropsDynamic(this->_sprite, this->_movable), GameProps(this), _sprite(path), _movable(x, y, w, h) {
this->_sprite.setPosition({x, y});
}
void Enemy::move(float x, float y) {
this->_movable.move(x, y);
this->_movable.move(x, y);
}
void Enemy::setup(kernel::Kernel & kernel, Level & level) {
this->_sprite.setFrame({0.f, 0.f, 51.f, 98.f});
this->_sprite.setSize({51.f, 98.f});
this->_movable.setCollideLambda([this, &level](kernel::Kernel &, kernel::PhysicEngine &, Identifiable & id, kernel::Physical<kernel::PhysicEngine> & comp, double) {
auto event = level.get(id)->on();
if(event.has_value()) {
this->on(event.value());
}
});
}
void Enemy::on(const Behavior & event) {
if(event & Behavior::Type::SOLID) {
this->onSolide(event);
}
if(event & Behavior::Type::DAMAGE) {
this->onDamage(event);
}
}
std::optional<Behavior> Enemy::on() const {
Behavior b(*this, Behavior::DAMAGE);
b.set(0, 10);
return b;
}
void Enemy::destroy(kernel::Kernel & kernel, Level & level) {
}
void Enemy::apply(kernel::Kernel & kernel) {
kernel.add(this);
}
void Enemy::onDamage(const Behavior &) {
std::cout << "Enemy Got Damage !" << std::endl;
}
void Enemy::onSolide(const Behavior &) {
std::cout << "Enemy Got Solide !" << std::endl;
}
}