ShitEngine
1.4.2
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
Toggle main menu visibility
载入中...
搜索中...
未找到
Component.h
浏览该文件的文档.
1
#pragma once
2
#include "
../Core/Config.h
"
3
#include "
../Reflection/Macros.h
"
4
5
#include <cstdint>
6
7
namespace
Shit
{
8
class
GameObject
;
// 前向声明
9
class
System
;
// 前向声明(friend:系统销毁时重置认领组件的注册状态)
10
12
SHIT_API
uint64_t
GenerateComponentUuid
();
13
25
class
SHIT_API
SHIT_REFLECT
(BlackList)
Component
{
26
friend
class
GameObject
;
// 只能通过GameObject初始化组件
27
friend
class
System
;
// 系统销毁时通过 System::resetComponent 重置组件注册状态
28
SHIT_REFLECT_BODY
(
Component
)
29
30
public
:
31
Component
();
32
virtual
~Component
() =
default
;
33
34
virtual
void
onCreate
() {}
// 组件创建时(有 owner,但可能尚未挂到场景)
35
virtual
void
onAttach
() {
m_isRegistered
=
true
; }
// 组件挂载到活动场景时(基类默认标记已注册;依赖系统的组件在找不到系统时自行置回 false 以便补挂)
36
virtual
void
onDetach
() {}
// 组件从场景卸下时
37
virtual
void
onDestroy
() {}
// 组件销毁时
38
41
virtual
void
onAfterDeserialize
() {}
42
45
virtual
void
onFieldChanged
(
const
std::string& fieldName) { (void)fieldName; }
46
47
// 禁止拷贝和移动
48
Component
(
const
Component
&) =
delete
;
49
Component
&
operator=
(
const
Component
&) =
delete
;
50
Component
(
Component
&&) =
delete
;
51
Component
&
operator=
(
Component
&&) =
delete
;
52
53
GameObject
*
getOwner
()
const
{
return
m_owner
; }
54
bool
isRegistered
()
const
{
return
m_isRegistered
; }
55
57
uint64_t
getUuid
()
const
{
return
m_uuid
; }
59
void
setUuid
(uint64_t uuid) {
m_uuid
= uuid; }
60
61
private
:
62
// 只允许 GameObject 设置
63
inline
void
setOwner(
GameObject
* owner) { m_owner = owner; }
64
65
protected
:
66
// 内部:仅 System 通过 resetComponent 调用,用于系统注销后重置注册状态,
67
// 使已存在组件在同类系统重新注册时能被 System::init 补扫认领。
68
inline
void
setRegistered
(
bool
registered) {
m_isRegistered
= registered; }
69
70
protected
:
71
SHIT_META
(({.displayName =
"Owner"
, .readOnly =
true
}))
72
GameObject
*
m_owner
=
nullptr
;
// 组件的拥有者
73
SHIT_META
(({.displayName =
"Registered"
, .readOnly =
true
}))
74
bool
m_isRegistered
=
false
;
75
SHIT_META
(Disable)
76
uint64_t
m_uuid
= 0;
77
};
78
}
Config.h
SHIT_API
#define SHIT_API
定义
Core.h:14
Macros.h
反射标记宏(annotate 方案)——引擎反射系统的源码侧入口
SHIT_REFLECT_BODY
#define SHIT_REFLECT_BODY(Type)
定义
Macros.h:89
SHIT_REFLECT
#define SHIT_REFLECT(Mode)
定义
Macros.h:86
SHIT_META
#define SHIT_META(...)
定义
Macros.h:95
Shit::Component::GameObject
friend class GameObject
定义
Component.h:26
Shit::Component::Component
Component()
Shit::Component::setRegistered
void setRegistered(bool registered)
定义
Component.h:68
Shit::Component::operator=
Component & operator=(Component &&)=delete
Shit::Component::m_uuid
uint64_t m_uuid
持久 ID(构造时随机分配;0 仅在序列化前尚未赋值时短暂存在)
定义
Component.h:76
Shit::Component::onFieldChanged
virtual void onFieldChanged(const std::string &fieldName)
检查器直接写反射字段后回调(字段名)。用于绕过 setter 的直写完成后 重新同步引擎状态(如 Box2D 刚体/形状)。默认无操作。
定义
Component.h:45
Shit::Component::onDestroy
virtual void onDestroy()
定义
Component.h:37
Shit::Component::onCreate
virtual void onCreate()
定义
Component.h:34
Shit::Component::onAttach
virtual void onAttach()
定义
Component.h:35
Shit::Component::Component
Component(const Component &)=delete
Shit::Component::getUuid
uint64_t getUuid() const
组件持久 ID(随 .scene 序列化,是 ComponentRef<T> 引用字段的寻址依据)
定义
Component.h:57
Shit::Component::getOwner
GameObject * getOwner() const
定义
Component.h:53
Shit::Component::m_owner
GameObject * m_owner
定义
Component.h:72
Shit::Component::Component
Component(Component &&)=delete
Shit::Component::onDetach
virtual void onDetach()
定义
Component.h:36
Shit::Component::isRegistered
bool isRegistered() const
定义
Component.h:54
Shit::Component::~Component
virtual ~Component()=default
Shit::Component::setUuid
void setUuid(uint64_t uuid)
直接设置组件 ID(仅引擎反序列化/索引维护使用;正常流程由构造函数随机分配)
定义
Component.h:59
Shit::Component::operator=
Component & operator=(const Component &)=delete
Shit::Component::onAfterDeserialize
virtual void onAfterDeserialize()
反序列化完成后回调(Prefab::apply 逐组件调用一次,字段已写入)。 用于重建"直写字段绕过了 setter、无法自动触发的引擎状态"(如精灵纹理加载)。
定义
Component.h:41
Shit::Component::m_isRegistered
bool m_isRegistered
定义
Component.h:74
Shit::Component::System
friend class System
定义
Component.h:27
Shit::GameObject
游戏物体类
定义
GameObject.h:23
Shit::System
System 基类
定义
System.h:19
Shit
定义
AnimationClip.h:12
Shit::GenerateComponentUuid
uint64_t GenerateComponentUuid()
生成随机组件 UUID(64 位;0 保留为空引用,永不返回 0)
include
ShitEngine
Component
Component.h
制作者
1.17.0