#pragma once #include class Node; class Entity { public: Entity() : Entity(-1) {} Entity(int id) : m_id(id) {} Entity(const Entity &other) = default; Entity &operator=(const Entity &other) = delete; virtual ~Entity() = default; virtual Entity *clone() { return new Entity(*this); } void set_node(Node *node) { m_node = node; } Node &node() { return *m_node; } // Get the tile's ID int id() { return m_id; } // void set_id(int id) { m_id = id; } virtual void update(double dt); friend std::ostream &operator<<(std::ostream &os, const Entity &tile); friend std::istream &operator>>(std::istream &is, Entity &tile); private: Node *m_node; int m_id; };