Extra2D/include/scene/component.h

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