CSC3224_Computer_Games_Development / GameEngine / Engine_Physics / Entity.cpp
Entity.cpp
Raw
#include "Entity.h"
#include "../GameEngine/Engine_Audio/AudioSoundEffect.h"
#include "../GameEngine/Engine_Physics/RigidBodyPhysics.h"
// Constructor
Entity::Entity(uint32_t id, EntityManagement& ResourceManagement, SpriteRectangle& pos)
{
	entityID = id;
	entityManagement = &ResourceManagement;
	spriteRecatngle = &pos;
}
// Destructor
Entity::~Entity()
{
	if (!isDeleted)
	{
		entityManagement->destroyEntity(this);
	}
}
// Get Entity ID
uint32_t Entity::getEntityID() const
{
	return entityID;
}
// Add Message to Entity
void Entity::addMessageSystemEvent(MessageSystemEvent& c)
{
	entityManagement->addMessageSystemEvent(*this, c);
}
// Remove Message from Entity
void Entity::removeMessageSystemEvent(MessageSystemEvent& c)
{
	entityManagement->removeMessageSystemEvent(*this, c);
}
// get Entity Sprite
SpriteRectangle* Entity::getEntitySprite() const
{
	return spriteRecatngle;
}
// Send Message
Entity* Entity::messageBuildFromJson(EntityManagement& ResourceManagement, EnginePhysicsSystem& enginePhysicsSystem, Json::Value engineSystemSource)
{
	auto entity = ResourceManagement.createEntity(SpriteRectangle::messageBuildFromJson(engineSystemSource["Sprite"]));
	// Check Messages
	for (auto jsonEvent : engineSystemSource["Events"])
	{
		auto type = jsonEvent.get("EventType", -1).asInt();
		if (type < 0)
		{
			std::cout << "Invalid Event type" << std::endl;
			break;
		}
		auto EventType = static_cast<MessageSystemEventType>(type);

		// Build Message based on type
		MessageSystemEvent* messageSystemEvent = nullptr;
		switch (EventType)
		{
		case MessageSystemEventType::TEXT_TYPE:
		{
			messageSystemEvent = Text::messageBuildFromJson(jsonEvent);
			break;
		}
		case MessageSystemEventType::RIGID_BODY_PHYSICS_TYPE:
		{
			messageSystemEvent = RigidBodyPhysics::messageBuildFromJson(jsonEvent, &enginePhysicsSystem, entity->getEntitySprite());
			break;
		}
		case MessageSystemEventType::AUDIO_TYPE:
		{
			messageSystemEvent = AudioSoundEffect::messageBuildFromJson(jsonEvent);
			break;
		}
		// Create Sprite
		case MessageSystemEventType::SPRITE_RECTANGLE_TYPE: break;
			// END MESSAGE
		case MessageSystemEventType::END_TYPE:
		default:;
		}
		if (messageSystemEvent)
		{
			entity->addMessageSystemEvent(*messageSystemEvent);
		}
	}
	return entity;
}
// == Operator
bool Entity::operator==(const Entity& other) const
{
	return this->entityID == other.getEntityID();
}