#pragma once #include <cstdint> #include "../Engine_Messaging_System/MessageSystemEvent.h" #include "../Engine_Physics/SpriteRectangle.h" #include "../Engine_Resource_Management/ResourceManagement.h" #include "../Engine_Text/Text.h" #include <iostream> // Create Entites class EnginePhysicsSystem; class EntityManagement; class Entity { public: ~Entity(); uint32_t getEntityID() const; void addMessageSystemEvent(MessageSystemEvent& c); void removeMessageSystemEvent(MessageSystemEvent& c); SpriteRectangle* getEntitySprite() const; template <typename T> T* getMessageSystemEvent(); static Entity* messageBuildFromJson(EntityManagement& ResourceManagement, EnginePhysicsSystem& enginePhysicsSystem, Json::Value engineSystemSource); bool operator==(const Entity& other) const; private: friend class EntityManagement; Entity(uint32_t id, EntityManagement& ResourceManagement, SpriteRectangle& sprite); uint32_t entityID; EntityManagement* entityManagement; SpriteRectangle* spriteRecatngle; friend class EntityManagement; bool isDeleted = false; }; template <typename T> T* Entity::getMessageSystemEvent() { return entityManagement->getMessageSystemEvent<T>(this); }