#pragma once #include #include #include "xml/tinyxml2.h" class Component : public QObject { Q_OBJECT public: explicit Component(Component* parent = nullptr); virtual ~Component(); virtual void Serialize(const tinyxml2::XMLElement* element); virtual void UnSerialize(tinyxml2::XMLElement* element); virtual bool SetAttribute(const char* name, const char* value); virtual bool SaveAttribute(tinyxml2::XMLElement* element); virtual void Begin(); virtual void Update(double dt); virtual void End(); virtual std::vector GetChildren() const; virtual bool OnDestroy(); static std::string GetTypeName(); virtual std::string GetSelfTypeName(); virtual void AttachEntity(class Entity* owner); virtual bool AttachTo(class SceneComponent* parent); class Entity* GetEntity() const { return owner_; } const QString& GetUUID() const { return uuid_; } protected: void SetUUId(const QString& uuid) { uuid_ = uuid; } protected: QString name_; QString uuid_; class Entity* owner_{ nullptr }; };