SwitchGame/source/EngineFrame/Actor/Actor.h

47 lines
1.3 KiB
C
Raw Permalink Normal View History

2025-09-15 11:28:54 +08:00
#pragma once
#include "EngineFrame/Actor/Actor_base.h"
#include "EngineFrame/Component/Component.h"
#include "Tool/IntrusiveList.hpp"
class Scene;
/**
* @brief Actor类Actor_base类
*
* Actor类是一个基础的游戏对象类
*/
class Actor : public Actor_base, protected IntrusiveListValue<RefPtr<Actor>>
{
2025-09-18 15:21:43 +08:00
2025-09-15 11:28:54 +08:00
public:
Actor();
~Actor() override;
public:
void Init() override;
void HandleEvents(SDL_Event *e) override;
void Update(float deltaTime) override;
void Render(float deltaTime) override;
void Clear() override;
2025-09-19 12:18:57 +08:00
virtual void OnAdded(Scene *scene);
void ReorderActors(); // 重新排序Actor
2025-09-15 11:28:54 +08:00
using IntrusiveListValue<RefPtr<Actor>>::GetNext;
using IntrusiveListValue<RefPtr<Actor>>::GetPrev;
public:
void AddComponent(RefPtr<Component> Component);
2025-09-18 15:21:43 +08:00
void RemoveComponent(RefPtr<Component> Component);
2025-09-19 12:18:57 +08:00
void SetPos(VecPos pos);
VecPos GetPos();
2025-09-15 11:28:54 +08:00
public:
2025-09-18 15:21:43 +08:00
Scene *Parent; // 指向父场景的指针表示该Actor所属的场景
2025-09-19 12:18:57 +08:00
VecPos Pos = {0, 0}; // 位置坐标
2025-09-18 15:21:43 +08:00
IntrusiveList<RefPtr<Component>> m_Components; // 组件列表
2025-09-15 11:28:54 +08:00
2025-09-19 12:18:57 +08:00
int RenderZOrder = 0; // 渲染层级
int GetRenderZOrder();
void SetRenderZOrder(int zOrder);
2025-09-15 11:28:54 +08:00
private:
};