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;
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
void SetPos(SDL_Point pos);
|
|
|
|
|
|
SDL_Point GetPos();
|
2025-09-15 11:28:54 +08:00
|
|
|
|
|
|
|
|
|
|
public:
|
2025-09-18 15:21:43 +08:00
|
|
|
|
Scene *Parent; // 指向父场景的指针,表示该Actor所属的场景
|
|
|
|
|
|
SDL_Point Pos = {0, 0}; // 位置坐标
|
|
|
|
|
|
|
|
|
|
|
|
IntrusiveList<RefPtr<Component>> m_Components; // 组件列表
|
2025-09-15 11:28:54 +08:00
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
};
|