#pragma once #include "Tool/IntrusiveList.hpp" #include "Tool/RefPtr.h" #include "Tool/RefObject.h" #include "Tool/TagGed.h" #include class Actor; class Component : public RefObject, public TagGed, protected IntrusiveListValue> { friend IntrusiveList>; public: using IntrusiveListValue>::GetNext; using IntrusiveListValue>::GetPrev; private: /* data */ std::string m_Name; public: Component(/* args */); ~Component(); virtual void Init(); virtual void HandleEvents(SDL_Event *e); virtual void Update(float deltaTime); virtual void Render(float deltaTime); virtual void Clear(); void SetName(std::string name); virtual void OnAdded(Actor *actor); // 设置渲染层级 void SetRenderZOrder(int zOrder); // 获取渲染层级 int GetRenderZOrder(); // 重新排列组件 void ReorderComponents(); public: Actor *Parent = nullptr; // 指向父对象的指针,用于访问父对象 int RenderZOrder; // 渲染层级 };