#pragma once #include "../Engine_Messaging_System//MessageSystemEvent.h" #include "../Engine_Json_System/json.h" #include "../Engine_Resource_Management/ResourceManagement.h" #include <SFML/Graphics/Sprite.hpp> #include <string> // Sprite Rectangle class SpriteRectangle : public MessageFromJsonSystemEvent<SpriteRectangle>, public sf::Sprite { public: static const MessageSystemEventType messageTypeID = MessageSystemEventType::SPRITE_RECTANGLE_TYPE; MessageSystemEventType getType() override { return messageTypeID; } int getTypeValue() override { return static_cast<int>(messageTypeID); } static SpriteRectangle* messageBuildFromJson(Json::Value Engine_PhysicsystemSource, ...); Json::Value convertToJson() override; SpriteRectangle(std::string spriteTextureID, sf::IntRect spriteRectangle) : _spriteTextureID(spriteTextureID) { setTextureRect(spriteRectangle); }; std::string getSpriteTextureID() const { return _spriteTextureID; } void setSpriteZOrder(int spriteOrder) { _spriteZOrder = spriteOrder; }; int getSpriteZOrder() const { return _spriteZOrder; }; private: int _spriteZOrder; std::string _spriteTextureID; }; // Build Rectangle Sprite from Json (File IO) inline SpriteRectangle* SpriteRectangle::messageBuildFromJson(Json::Value Engine_PhysicsystemSource, ...) { std::string spriteTextureID = Engine_PhysicsystemSource.get("TextureID", "").asString(); sf::IntRect spriteTextureRectangle = sf::IntRect(Engine_PhysicsystemSource.get("TextureRectLeft", 0).asInt(), Engine_PhysicsystemSource.get("TextureRectTop", 0).asInt(), Engine_PhysicsystemSource.get("TextureRectWidth", 32).asInt(), Engine_PhysicsystemSource.get("TextureRectHeight", 32).asInt()); float spritePosX = Engine_PhysicsystemSource.get("PosX", 0).asFloat(); float spritePosY = Engine_PhysicsystemSource.get("PosY", 0).asFloat(); auto spriteOriginX = Engine_PhysicsystemSource.get("OriginX", 0).asFloat(); auto spriteOriginY = Engine_PhysicsystemSource.get("OriginY", 0).asFloat(); float spriteScaleX = Engine_PhysicsystemSource.get("ScaleX", 1).asFloat(); float spriteScaleY = Engine_PhysicsystemSource.get("ScaleY", 1).asFloat(); int spriteZOrder = Engine_PhysicsystemSource.get("Z-Order", 0).asInt(); SpriteRectangle* spriteRectangle = new SpriteRectangle(spriteTextureID, spriteTextureRectangle); spriteRectangle->setPosition(spritePosX, spritePosY); spriteRectangle->setOrigin(spriteOriginX, spriteOriginY); spriteRectangle->setScale(spriteScaleX, spriteScaleY); spriteRectangle->setSpriteZOrder(spriteZOrder); return spriteRectangle; } // Convert to Json format for parsing messages between the Game Engine and Level (.json files) inline Json::Value SpriteRectangle::convertToJson() { Json::Value engineSystemSource; engineSystemSource["EventType"] = static_cast<int>(this->getType()); engineSystemSource["TextureID"] = _spriteTextureID; engineSystemSource["TextureRectLeft"] = getTextureRect().left; engineSystemSource["TextureRectTop"] = getTextureRect().top; engineSystemSource["TextureRectWidth"] = getTextureRect().width; engineSystemSource["TextureRectHeight"] = getTextureRect().height; engineSystemSource["PosX"] = getPosition().x; engineSystemSource["PosY"] = getPosition().y; engineSystemSource["OriginX"] = getOrigin().x; engineSystemSource["OriginY"] = getOrigin().y; engineSystemSource["ScaleX"] = getScale().x; engineSystemSource["ScaleY"] = getScale().y; engineSystemSource["Z-Order"] = getSpriteZOrder(); return engineSystemSource; }