84 lines
1.5 KiB
C++
84 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <types/ptr/ref_counted.h>
|
|
|
|
namespace extra2d {
|
|
|
|
// 前向声明
|
|
class Node;
|
|
|
|
/**
|
|
* @brief 组件基类
|
|
*
|
|
* 所有组件都继承此类,附加到节点上提供特定功能
|
|
*/
|
|
class Component : public RefCounted {
|
|
public:
|
|
/**
|
|
* @brief 虚析构函数
|
|
*/
|
|
virtual ~Component() = default;
|
|
|
|
/**
|
|
* @brief 组件附加到节点时调用
|
|
* @param owner 所属节点
|
|
*/
|
|
virtual void onAttach(Node* owner);
|
|
|
|
/**
|
|
* @brief 组件从节点分离时调用
|
|
*/
|
|
virtual void onDetach();
|
|
|
|
/**
|
|
* @brief 组件启用时调用
|
|
*/
|
|
virtual void onEnable();
|
|
|
|
/**
|
|
* @brief 组件禁用时调用
|
|
*/
|
|
virtual void onDisable();
|
|
|
|
/**
|
|
* @brief 每帧更新
|
|
* @param dt 帧间隔时间(秒)
|
|
*/
|
|
virtual void update(float dt);
|
|
|
|
/**
|
|
* @brief 渲染时调用(提交渲染命令)
|
|
*/
|
|
virtual void render();
|
|
|
|
/**
|
|
* @brief 获取所属节点
|
|
* @return 节点指针
|
|
*/
|
|
Node* getOwner() const { return owner_; }
|
|
|
|
/**
|
|
* @brief 设置是否启用
|
|
* @param enabled 是否启用
|
|
*/
|
|
void setEnabled(bool enabled);
|
|
|
|
/**
|
|
* @brief 是否启用
|
|
* @return 是否启用
|
|
*/
|
|
bool isEnabled() const { return enabled_; }
|
|
|
|
/**
|
|
* @brief 获取组件类型名称
|
|
* @return 类型名称字符串
|
|
*/
|
|
virtual const char* getTypeName() const = 0;
|
|
|
|
protected:
|
|
Node* owner_ = nullptr;
|
|
bool enabled_ = true;
|
|
};
|
|
|
|
} // namespace extra2d
|