#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(); }