CSC3224_Computer_Games_Development / GameEngine / Engine_Physics / Entity.h
Entity.h
Raw
#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);
}