-
Авдеев Евгений Владимирович authored231a3787
#pragma once
#include "../Maze/Maze.h"
#include "../Draw/Texture.h"
class Fireball : public IEntity, public IVisitor {
public:
Fireball(Direction direction, Room* room);
void draw_into(sf::RenderWindow& window) const override;
void prepare_for_drawing() override;
void move();
std::unique_ptr<IGameEvent> visit(Food* ptr_food) override;
std::unique_ptr<IGameEvent> visit(MPpotion* ptr_food) override;
std::unique_ptr<IGameEvent> visit(Enemy* ptr_enemy) override;
void set_texture(Texture* ptr_texture) { m_ptr_tex = ptr_texture; }
private:
size_t m_wall = 0;
Direction m_direct;
mutable sf::Sprite m_sprite;
Texture* m_ptr_tex;
};
class Pacman :public IEntity, public IVisitor {
public:
Pacman();
void move(Direction direction);
void spell();
std::unique_ptr<IGameEvent> ultimate();
std::unique_ptr<IGameEvent> magnit();
void draw_into(sf::RenderWindow& window) const override;
void prepare_for_drawing() override;
std::unique_ptr<IGameEvent> visit(Food* ptr_food) override;
std::unique_ptr<IGameEvent> visit(MPpotion* ptr_food) override;
std::unique_ptr<IGameEvent> visit(Enemy* ptr_enemy) override;
void set_texture(Texture* ptr_texture) { m_ptr_tex = ptr_texture; }
std::vector<Fireball> m_spells;
private:
mutable float m_mp = config::PACMAN_START_MP;
Direction m_dir = Direction::RIGHT;
sf::Sprite m_sprite;
Texture* m_ptr_tex;
sf::Clock m_clock;
};