@esengine/ecs-framework 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +277 -0
- package/bin/Core.d.ts +198 -0
- package/bin/Core.d.ts.map +1 -0
- package/bin/Core.js +249 -0
- package/bin/Core.js.map +1 -0
- package/bin/ECS/Component.d.ts +119 -0
- package/bin/ECS/Component.d.ts.map +1 -0
- package/bin/ECS/Component.js +129 -0
- package/bin/ECS/Component.js.map +1 -0
- package/bin/ECS/Components/IUpdatable.d.ts +22 -0
- package/bin/ECS/Components/IUpdatable.d.ts.map +1 -0
- package/bin/ECS/Components/IUpdatable.js +17 -0
- package/bin/ECS/Components/IUpdatable.js.map +1 -0
- package/bin/ECS/Components/SceneComponent.d.ts +40 -0
- package/bin/ECS/Components/SceneComponent.d.ts.map +1 -0
- package/bin/ECS/Components/SceneComponent.js +57 -0
- package/bin/ECS/Components/SceneComponent.js.map +1 -0
- package/bin/ECS/Core/ComponentStorage.d.ts +182 -0
- package/bin/ECS/Core/ComponentStorage.d.ts.map +1 -0
- package/bin/ECS/Core/ComponentStorage.js +346 -0
- package/bin/ECS/Core/ComponentStorage.js.map +1 -0
- package/bin/ECS/Core/EventSystem.d.ts +236 -0
- package/bin/ECS/Core/EventSystem.d.ts.map +1 -0
- package/bin/ECS/Core/EventSystem.js +476 -0
- package/bin/ECS/Core/EventSystem.js.map +1 -0
- package/bin/ECS/Core/FluentAPI.d.ts +392 -0
- package/bin/ECS/Core/FluentAPI.d.ts.map +1 -0
- package/bin/ECS/Core/FluentAPI.js +575 -0
- package/bin/ECS/Core/FluentAPI.js.map +1 -0
- package/bin/ECS/Core/QuerySystem.d.ts +574 -0
- package/bin/ECS/Core/QuerySystem.d.ts.map +1 -0
- package/bin/ECS/Core/QuerySystem.js +1356 -0
- package/bin/ECS/Core/QuerySystem.js.map +1 -0
- package/bin/ECS/CoreEvents.d.ts +19 -0
- package/bin/ECS/CoreEvents.d.ts.map +1 -0
- package/bin/ECS/CoreEvents.js +20 -0
- package/bin/ECS/CoreEvents.js.map +1 -0
- package/bin/ECS/Entity.d.ts +585 -0
- package/bin/ECS/Entity.d.ts.map +1 -0
- package/bin/ECS/Entity.js +1079 -0
- package/bin/ECS/Entity.js.map +1 -0
- package/bin/ECS/Scene.d.ts +210 -0
- package/bin/ECS/Scene.d.ts.map +1 -0
- package/bin/ECS/Scene.js +267 -0
- package/bin/ECS/Scene.js.map +1 -0
- package/bin/ECS/Systems/EntitySystem.d.ts +185 -0
- package/bin/ECS/Systems/EntitySystem.d.ts.map +1 -0
- package/bin/ECS/Systems/EntitySystem.js +278 -0
- package/bin/ECS/Systems/EntitySystem.js.map +1 -0
- package/bin/ECS/Systems/IntervalSystem.d.ts +33 -0
- package/bin/ECS/Systems/IntervalSystem.d.ts.map +1 -0
- package/bin/ECS/Systems/IntervalSystem.js +50 -0
- package/bin/ECS/Systems/IntervalSystem.js.map +1 -0
- package/bin/ECS/Systems/PassiveSystem.d.ts +20 -0
- package/bin/ECS/Systems/PassiveSystem.d.ts.map +1 -0
- package/bin/ECS/Systems/PassiveSystem.js +21 -0
- package/bin/ECS/Systems/PassiveSystem.js.map +1 -0
- package/bin/ECS/Systems/ProcessingSystem.d.ts +24 -0
- package/bin/ECS/Systems/ProcessingSystem.d.ts.map +1 -0
- package/bin/ECS/Systems/ProcessingSystem.js +22 -0
- package/bin/ECS/Systems/ProcessingSystem.js.map +1 -0
- package/bin/ECS/Systems/index.d.ts +5 -0
- package/bin/ECS/Systems/index.d.ts.map +1 -0
- package/bin/ECS/Systems/index.js +6 -0
- package/bin/ECS/Systems/index.js.map +1 -0
- package/bin/ECS/Transform.d.ts +178 -0
- package/bin/ECS/Transform.d.ts.map +1 -0
- package/bin/ECS/Transform.js +249 -0
- package/bin/ECS/Transform.js.map +1 -0
- package/bin/ECS/Utils/Bits.d.ts +74 -0
- package/bin/ECS/Utils/Bits.d.ts.map +1 -0
- package/bin/ECS/Utils/Bits.js +142 -0
- package/bin/ECS/Utils/Bits.js.map +1 -0
- package/bin/ECS/Utils/ComponentTypeManager.d.ts +50 -0
- package/bin/ECS/Utils/ComponentTypeManager.d.ts.map +1 -0
- package/bin/ECS/Utils/ComponentTypeManager.js +84 -0
- package/bin/ECS/Utils/ComponentTypeManager.js.map +1 -0
- package/bin/ECS/Utils/EntityList.d.ts +108 -0
- package/bin/ECS/Utils/EntityList.d.ts.map +1 -0
- package/bin/ECS/Utils/EntityList.js +249 -0
- package/bin/ECS/Utils/EntityList.js.map +1 -0
- package/bin/ECS/Utils/EntityProcessorList.d.ts +53 -0
- package/bin/ECS/Utils/EntityProcessorList.d.ts.map +1 -0
- package/bin/ECS/Utils/EntityProcessorList.js +96 -0
- package/bin/ECS/Utils/EntityProcessorList.js.map +1 -0
- package/bin/ECS/Utils/IdentifierPool.d.ts +18 -0
- package/bin/ECS/Utils/IdentifierPool.d.ts.map +1 -0
- package/bin/ECS/Utils/IdentifierPool.js +27 -0
- package/bin/ECS/Utils/IdentifierPool.js.map +1 -0
- package/bin/ECS/Utils/Matcher.d.ts +63 -0
- package/bin/ECS/Utils/Matcher.d.ts.map +1 -0
- package/bin/ECS/Utils/Matcher.js +140 -0
- package/bin/ECS/Utils/Matcher.js.map +1 -0
- package/bin/ECS/Utils/index.d.ts +7 -0
- package/bin/ECS/Utils/index.d.ts.map +1 -0
- package/bin/ECS/Utils/index.js +8 -0
- package/bin/ECS/Utils/index.js.map +1 -0
- package/bin/ECS/index.d.ts +8 -0
- package/bin/ECS/index.d.ts.map +1 -0
- package/bin/ECS/index.js +9 -0
- package/bin/ECS/index.js.map +1 -0
- package/bin/Math/Edge.d.ts +23 -0
- package/bin/Math/Edge.d.ts.map +1 -0
- package/bin/Math/Edge.js +24 -0
- package/bin/Math/Edge.js.map +1 -0
- package/bin/Math/MathHelper.d.ts +75 -0
- package/bin/Math/MathHelper.d.ts.map +1 -0
- package/bin/Math/MathHelper.js +91 -0
- package/bin/Math/MathHelper.js.map +1 -0
- package/bin/Math/Rectangle.d.ts +126 -0
- package/bin/Math/Rectangle.d.ts.map +1 -0
- package/bin/Math/Rectangle.js +181 -0
- package/bin/Math/Rectangle.js.map +1 -0
- package/bin/Math/Vector2.d.ts +229 -0
- package/bin/Math/Vector2.d.ts.map +1 -0
- package/bin/Math/Vector2.js +338 -0
- package/bin/Math/Vector2.js.map +1 -0
- package/bin/Math/index.d.ts +5 -0
- package/bin/Math/index.d.ts.map +1 -0
- package/bin/Math/index.js +6 -0
- package/bin/Math/index.js.map +1 -0
- package/bin/Types/index.d.ts +22 -0
- package/bin/Types/index.d.ts.map +1 -0
- package/bin/Types/index.js +20 -0
- package/bin/Types/index.js.map +1 -0
- package/bin/Utils/Emitter.d.ts +43 -0
- package/bin/Utils/Emitter.d.ts.map +1 -0
- package/bin/Utils/Emitter.js +69 -0
- package/bin/Utils/Emitter.js.map +1 -0
- package/bin/Utils/Extensions/EdgeExt.d.ts +26 -0
- package/bin/Utils/Extensions/EdgeExt.d.ts.map +1 -0
- package/bin/Utils/Extensions/EdgeExt.js +41 -0
- package/bin/Utils/Extensions/EdgeExt.js.map +1 -0
- package/bin/Utils/Extensions/NumberExtension.d.ts +13 -0
- package/bin/Utils/Extensions/NumberExtension.d.ts.map +1 -0
- package/bin/Utils/Extensions/NumberExtension.js +17 -0
- package/bin/Utils/Extensions/NumberExtension.js.map +1 -0
- package/bin/Utils/Extensions/TypeUtils.d.ts +13 -0
- package/bin/Utils/Extensions/TypeUtils.d.ts.map +1 -0
- package/bin/Utils/Extensions/TypeUtils.js +15 -0
- package/bin/Utils/Extensions/TypeUtils.js.map +1 -0
- package/bin/Utils/Extensions/index.d.ts +4 -0
- package/bin/Utils/Extensions/index.d.ts.map +1 -0
- package/bin/Utils/Extensions/index.js +5 -0
- package/bin/Utils/Extensions/index.js.map +1 -0
- package/bin/Utils/GlobalManager.d.ts +32 -0
- package/bin/Utils/GlobalManager.d.ts.map +1 -0
- package/bin/Utils/GlobalManager.js +53 -0
- package/bin/Utils/GlobalManager.js.map +1 -0
- package/bin/Utils/PerformanceMonitor.d.ts +211 -0
- package/bin/Utils/PerformanceMonitor.d.ts.map +1 -0
- package/bin/Utils/PerformanceMonitor.js +270 -0
- package/bin/Utils/PerformanceMonitor.js.map +1 -0
- package/bin/Utils/Pool.d.ts +239 -0
- package/bin/Utils/Pool.d.ts.map +1 -0
- package/bin/Utils/Pool.js +449 -0
- package/bin/Utils/Pool.js.map +1 -0
- package/bin/Utils/Screen.d.ts +12 -0
- package/bin/Utils/Screen.d.ts.map +1 -0
- package/bin/Utils/Screen.js +14 -0
- package/bin/Utils/Screen.js.map +1 -0
- package/bin/Utils/Time.d.ts +55 -0
- package/bin/Utils/Time.d.ts.map +1 -0
- package/bin/Utils/Time.js +78 -0
- package/bin/Utils/Time.js.map +1 -0
- package/bin/Utils/Timers/ITimer.d.ts +16 -0
- package/bin/Utils/Timers/ITimer.d.ts.map +1 -0
- package/bin/Utils/Timers/ITimer.js +2 -0
- package/bin/Utils/Timers/ITimer.js.map +1 -0
- package/bin/Utils/Timers/Timer.d.ts +22 -0
- package/bin/Utils/Timers/Timer.d.ts.map +1 -0
- package/bin/Utils/Timers/Timer.js +46 -0
- package/bin/Utils/Timers/Timer.js.map +1 -0
- package/bin/Utils/Timers/TimerManager.d.ts +19 -0
- package/bin/Utils/Timers/TimerManager.d.ts.map +1 -0
- package/bin/Utils/Timers/TimerManager.js +33 -0
- package/bin/Utils/Timers/TimerManager.js.map +1 -0
- package/bin/Utils/index.d.ts +6 -0
- package/bin/Utils/index.d.ts.map +1 -0
- package/bin/Utils/index.js +7 -0
- package/bin/Utils/index.js.map +1 -0
- package/bin/index.d.ts +21 -0
- package/bin/index.d.ts.map +1 -0
- package/bin/index.js +26 -0
- package/bin/index.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ECS/Systems/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { Vector2 } from '../Math/Vector2';
|
|
2
|
+
/**
|
|
3
|
+
* 变换组件类
|
|
4
|
+
*
|
|
5
|
+
* 管理游戏对象的空间变换信息,包括位置、旋转和缩放。
|
|
6
|
+
* 支持父子层级关系,可以构建复杂的变换层次结构。
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const transform = new Transform();
|
|
11
|
+
* transform.setPosition(100, 200);
|
|
12
|
+
* transform.setRotationDegrees(45);
|
|
13
|
+
* transform.setScale(2, 2);
|
|
14
|
+
*
|
|
15
|
+
* // 设置父子关系
|
|
16
|
+
* childTransform.setParent(transform);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class Transform {
|
|
20
|
+
/**
|
|
21
|
+
* 本地位置坐标
|
|
22
|
+
*
|
|
23
|
+
* 相对于父变换的位置,如果没有父变换则为世界坐标。
|
|
24
|
+
*/
|
|
25
|
+
position: Vector2;
|
|
26
|
+
/**
|
|
27
|
+
* 本地旋转角度
|
|
28
|
+
*
|
|
29
|
+
* 以弧度为单位的旋转角度,相对于父变换的旋转。
|
|
30
|
+
*/
|
|
31
|
+
rotation: number;
|
|
32
|
+
/**
|
|
33
|
+
* 本地缩放比例
|
|
34
|
+
*
|
|
35
|
+
* 相对于父变换的缩放比例。
|
|
36
|
+
*/
|
|
37
|
+
scale: Vector2;
|
|
38
|
+
/**
|
|
39
|
+
* 父变换引用
|
|
40
|
+
*
|
|
41
|
+
* 指向父级变换,如果为null则表示这是根变换。
|
|
42
|
+
*/
|
|
43
|
+
parent: Transform | null;
|
|
44
|
+
/**
|
|
45
|
+
* 子变换集合
|
|
46
|
+
*
|
|
47
|
+
* 存储所有子级变换的数组。
|
|
48
|
+
*/
|
|
49
|
+
private _children;
|
|
50
|
+
/**
|
|
51
|
+
* 创建变换实例
|
|
52
|
+
*
|
|
53
|
+
* @param position - 初始位置,默认为零向量
|
|
54
|
+
* @param rotation - 初始旋转角度(弧度),默认为0
|
|
55
|
+
* @param scale - 初始缩放,默认为单位向量
|
|
56
|
+
*/
|
|
57
|
+
constructor(position?: Vector2, rotation?: number, scale?: Vector2);
|
|
58
|
+
/**
|
|
59
|
+
* 获取旋转角度(度数)
|
|
60
|
+
*
|
|
61
|
+
* @returns 以度数为单位的旋转角度
|
|
62
|
+
*/
|
|
63
|
+
get rotationDegrees(): number;
|
|
64
|
+
/**
|
|
65
|
+
* 设置旋转角度(度数)
|
|
66
|
+
*
|
|
67
|
+
* @param value - 以度数为单位的旋转角度
|
|
68
|
+
*/
|
|
69
|
+
set rotationDegrees(value: number);
|
|
70
|
+
/**
|
|
71
|
+
* 获取世界坐标位置
|
|
72
|
+
*
|
|
73
|
+
* 计算并返回在世界坐标系中的绝对位置。
|
|
74
|
+
*
|
|
75
|
+
* @returns 世界坐标位置
|
|
76
|
+
*/
|
|
77
|
+
get worldPosition(): Vector2;
|
|
78
|
+
/**
|
|
79
|
+
* 获取世界旋转角度
|
|
80
|
+
*
|
|
81
|
+
* 计算并返回在世界坐标系中的绝对旋转角度。
|
|
82
|
+
*
|
|
83
|
+
* @returns 世界旋转角度(弧度)
|
|
84
|
+
*/
|
|
85
|
+
get worldRotation(): number;
|
|
86
|
+
/**
|
|
87
|
+
* 获取世界缩放比例
|
|
88
|
+
*
|
|
89
|
+
* 计算并返回在世界坐标系中的绝对缩放比例。
|
|
90
|
+
*
|
|
91
|
+
* @returns 世界缩放比例
|
|
92
|
+
*/
|
|
93
|
+
get worldScale(): Vector2;
|
|
94
|
+
/**
|
|
95
|
+
* 获取子变换数量
|
|
96
|
+
*
|
|
97
|
+
* @returns 子变换的数量
|
|
98
|
+
*/
|
|
99
|
+
get childCount(): number;
|
|
100
|
+
/**
|
|
101
|
+
* 获取指定索引的子变换
|
|
102
|
+
*
|
|
103
|
+
* @param index - 子变换的索引
|
|
104
|
+
* @returns 子变换实例,如果索引无效则返回null
|
|
105
|
+
*/
|
|
106
|
+
getChild(index: number): Transform | null;
|
|
107
|
+
/**
|
|
108
|
+
* 设置父变换
|
|
109
|
+
*
|
|
110
|
+
* 建立或断开与父变换的层级关系。
|
|
111
|
+
*
|
|
112
|
+
* @param parent - 新的父变换,传入null表示断开父子关系
|
|
113
|
+
*/
|
|
114
|
+
setParent(parent: Transform | null): void;
|
|
115
|
+
/**
|
|
116
|
+
* 设置本地位置
|
|
117
|
+
*
|
|
118
|
+
* @param x - X坐标
|
|
119
|
+
* @param y - Y坐标
|
|
120
|
+
*/
|
|
121
|
+
setPosition(x: number, y: number): void;
|
|
122
|
+
/**
|
|
123
|
+
* 设置本地旋转角度(弧度)
|
|
124
|
+
*
|
|
125
|
+
* @param radians - 旋转角度(弧度)
|
|
126
|
+
*/
|
|
127
|
+
setRotation(radians: number): void;
|
|
128
|
+
/**
|
|
129
|
+
* 设置本地旋转角度(度数)
|
|
130
|
+
*
|
|
131
|
+
* @param degrees - 旋转角度(度数)
|
|
132
|
+
*/
|
|
133
|
+
setRotationDegrees(degrees: number): void;
|
|
134
|
+
/**
|
|
135
|
+
* 设置本地缩放比例
|
|
136
|
+
*
|
|
137
|
+
* @param scale - 缩放向量
|
|
138
|
+
*/
|
|
139
|
+
setScale(scale: Vector2): void;
|
|
140
|
+
/**
|
|
141
|
+
* 设置本地缩放比例
|
|
142
|
+
*
|
|
143
|
+
* @param x - X轴缩放比例
|
|
144
|
+
* @param y - Y轴缩放比例
|
|
145
|
+
*/
|
|
146
|
+
setScale(x: number, y: number): void;
|
|
147
|
+
/**
|
|
148
|
+
* 朝向指定位置
|
|
149
|
+
*
|
|
150
|
+
* 调整旋转角度使变换朝向目标位置。
|
|
151
|
+
*
|
|
152
|
+
* @param target - 目标位置
|
|
153
|
+
*/
|
|
154
|
+
lookAt(target: Vector2): void;
|
|
155
|
+
/**
|
|
156
|
+
* 平移变换
|
|
157
|
+
*
|
|
158
|
+
* 在当前位置基础上添加偏移量。
|
|
159
|
+
*
|
|
160
|
+
* @param offset - 位置偏移量
|
|
161
|
+
*/
|
|
162
|
+
translate(offset: Vector2): void;
|
|
163
|
+
/**
|
|
164
|
+
* 旋转
|
|
165
|
+
* @param radians 旋转角度(弧度)
|
|
166
|
+
*/
|
|
167
|
+
rotate(radians: number): void;
|
|
168
|
+
/**
|
|
169
|
+
* 复制另一个变换的值
|
|
170
|
+
* @param other 另一个变换
|
|
171
|
+
*/
|
|
172
|
+
copyFrom(other: Transform): void;
|
|
173
|
+
/**
|
|
174
|
+
* 克隆变换
|
|
175
|
+
*/
|
|
176
|
+
clone(): Transform;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=Transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transform.d.ts","sourceRoot":"","sources":["../../src/ECS/Transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,SAAS;IAClB;;;;OAIG;IACI,QAAQ,EAAE,OAAO,CAAgB;IAExC;;;;OAIG;IACI,QAAQ,EAAE,MAAM,CAAK;IAE5B;;;;OAIG;IACI,KAAK,EAAE,OAAO,CAAe;IAEpC;;;;OAIG;IACI,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;IAEvC;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAmB;IAEpC;;;;;;OAMG;gBACS,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAE,MAAU,EAAE,KAAK,CAAC,EAAE,OAAO;IAMrE;;;;OAIG;IACH,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED;;;;OAIG;IACH,IAAW,eAAe,CAAC,KAAK,EAAE,MAAM,EAEvC;IAED;;;;;;OAMG;IACH,IAAW,aAAa,IAAI,OAAO,CAgBlC;IAED;;;;;;OAMG;IACH,IAAW,aAAa,IAAI,MAAM,CAKjC;IAED;;;;;;OAMG;IACH,IAAW,UAAU,IAAI,OAAO,CAK/B;IAED;;;;OAIG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED;;;;;OAKG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAOhD;;;;;;OAMG;IACI,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAkBhD;;;;;OAKG;IACI,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9C;;;;OAIG;IACI,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIzC;;;;OAIG;IACI,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIhD;;;;OAIG;IACI,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IACrC;;;;;OAKG;IACI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAS3C;;;;;;OAMG;IACI,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAKpC;;;;;;OAMG;IACI,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIvC;;;OAGG;IACI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC;;;OAGG;IACI,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMvC;;OAEG;IACI,KAAK,IAAI,SAAS;CAI5B"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { Vector2 } from '../Math/Vector2';
|
|
2
|
+
import { MathHelper } from '../Math/MathHelper';
|
|
3
|
+
/**
|
|
4
|
+
* 变换组件类
|
|
5
|
+
*
|
|
6
|
+
* 管理游戏对象的空间变换信息,包括位置、旋转和缩放。
|
|
7
|
+
* 支持父子层级关系,可以构建复杂的变换层次结构。
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const transform = new Transform();
|
|
12
|
+
* transform.setPosition(100, 200);
|
|
13
|
+
* transform.setRotationDegrees(45);
|
|
14
|
+
* transform.setScale(2, 2);
|
|
15
|
+
*
|
|
16
|
+
* // 设置父子关系
|
|
17
|
+
* childTransform.setParent(transform);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export class Transform {
|
|
21
|
+
/**
|
|
22
|
+
* 创建变换实例
|
|
23
|
+
*
|
|
24
|
+
* @param position - 初始位置,默认为零向量
|
|
25
|
+
* @param rotation - 初始旋转角度(弧度),默认为0
|
|
26
|
+
* @param scale - 初始缩放,默认为单位向量
|
|
27
|
+
*/
|
|
28
|
+
constructor(position, rotation = 0, scale) {
|
|
29
|
+
/**
|
|
30
|
+
* 本地位置坐标
|
|
31
|
+
*
|
|
32
|
+
* 相对于父变换的位置,如果没有父变换则为世界坐标。
|
|
33
|
+
*/
|
|
34
|
+
this.position = Vector2.zero;
|
|
35
|
+
/**
|
|
36
|
+
* 本地旋转角度
|
|
37
|
+
*
|
|
38
|
+
* 以弧度为单位的旋转角度,相对于父变换的旋转。
|
|
39
|
+
*/
|
|
40
|
+
this.rotation = 0;
|
|
41
|
+
/**
|
|
42
|
+
* 本地缩放比例
|
|
43
|
+
*
|
|
44
|
+
* 相对于父变换的缩放比例。
|
|
45
|
+
*/
|
|
46
|
+
this.scale = Vector2.one;
|
|
47
|
+
/**
|
|
48
|
+
* 父变换引用
|
|
49
|
+
*
|
|
50
|
+
* 指向父级变换,如果为null则表示这是根变换。
|
|
51
|
+
*/
|
|
52
|
+
this.parent = null;
|
|
53
|
+
/**
|
|
54
|
+
* 子变换集合
|
|
55
|
+
*
|
|
56
|
+
* 存储所有子级变换的数组。
|
|
57
|
+
*/
|
|
58
|
+
this._children = [];
|
|
59
|
+
if (position)
|
|
60
|
+
this.position = position.clone();
|
|
61
|
+
this.rotation = rotation;
|
|
62
|
+
if (scale)
|
|
63
|
+
this.scale = scale.clone();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 获取旋转角度(度数)
|
|
67
|
+
*
|
|
68
|
+
* @returns 以度数为单位的旋转角度
|
|
69
|
+
*/
|
|
70
|
+
get rotationDegrees() {
|
|
71
|
+
return MathHelper.toDegrees(this.rotation);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 设置旋转角度(度数)
|
|
75
|
+
*
|
|
76
|
+
* @param value - 以度数为单位的旋转角度
|
|
77
|
+
*/
|
|
78
|
+
set rotationDegrees(value) {
|
|
79
|
+
this.rotation = MathHelper.toRadians(value);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 获取世界坐标位置
|
|
83
|
+
*
|
|
84
|
+
* 计算并返回在世界坐标系中的绝对位置。
|
|
85
|
+
*
|
|
86
|
+
* @returns 世界坐标位置
|
|
87
|
+
*/
|
|
88
|
+
get worldPosition() {
|
|
89
|
+
if (!this.parent) {
|
|
90
|
+
return this.position.clone();
|
|
91
|
+
}
|
|
92
|
+
// 计算世界位置
|
|
93
|
+
const parentWorld = this.parent.worldPosition;
|
|
94
|
+
const cos = Math.cos(this.parent.worldRotation);
|
|
95
|
+
const sin = Math.sin(this.parent.worldRotation);
|
|
96
|
+
const parentScale = this.parent.worldScale;
|
|
97
|
+
const scaledPos = Vector2.multiply(this.position, parentScale);
|
|
98
|
+
const rotatedX = scaledPos.x * cos - scaledPos.y * sin;
|
|
99
|
+
const rotatedY = scaledPos.x * sin + scaledPos.y * cos;
|
|
100
|
+
return new Vector2(parentWorld.x + rotatedX, parentWorld.y + rotatedY);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 获取世界旋转角度
|
|
104
|
+
*
|
|
105
|
+
* 计算并返回在世界坐标系中的绝对旋转角度。
|
|
106
|
+
*
|
|
107
|
+
* @returns 世界旋转角度(弧度)
|
|
108
|
+
*/
|
|
109
|
+
get worldRotation() {
|
|
110
|
+
if (!this.parent) {
|
|
111
|
+
return this.rotation;
|
|
112
|
+
}
|
|
113
|
+
return this.parent.worldRotation + this.rotation;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 获取世界缩放比例
|
|
117
|
+
*
|
|
118
|
+
* 计算并返回在世界坐标系中的绝对缩放比例。
|
|
119
|
+
*
|
|
120
|
+
* @returns 世界缩放比例
|
|
121
|
+
*/
|
|
122
|
+
get worldScale() {
|
|
123
|
+
if (!this.parent) {
|
|
124
|
+
return this.scale.clone();
|
|
125
|
+
}
|
|
126
|
+
return Vector2.multiply(this.parent.worldScale, this.scale);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 获取子变换数量
|
|
130
|
+
*
|
|
131
|
+
* @returns 子变换的数量
|
|
132
|
+
*/
|
|
133
|
+
get childCount() {
|
|
134
|
+
return this._children.length;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 获取指定索引的子变换
|
|
138
|
+
*
|
|
139
|
+
* @param index - 子变换的索引
|
|
140
|
+
* @returns 子变换实例,如果索引无效则返回null
|
|
141
|
+
*/
|
|
142
|
+
getChild(index) {
|
|
143
|
+
if (index >= 0 && index < this._children.length) {
|
|
144
|
+
return this._children[index];
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 设置父变换
|
|
150
|
+
*
|
|
151
|
+
* 建立或断开与父变换的层级关系。
|
|
152
|
+
*
|
|
153
|
+
* @param parent - 新的父变换,传入null表示断开父子关系
|
|
154
|
+
*/
|
|
155
|
+
setParent(parent) {
|
|
156
|
+
if (this.parent === parent)
|
|
157
|
+
return;
|
|
158
|
+
// 从旧父级移除
|
|
159
|
+
if (this.parent) {
|
|
160
|
+
const index = this.parent._children.indexOf(this);
|
|
161
|
+
if (index >= 0) {
|
|
162
|
+
this.parent._children.splice(index, 1);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// 设置新父级
|
|
166
|
+
this.parent = parent;
|
|
167
|
+
if (parent) {
|
|
168
|
+
parent._children.push(this);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* 设置本地位置
|
|
173
|
+
*
|
|
174
|
+
* @param x - X坐标
|
|
175
|
+
* @param y - Y坐标
|
|
176
|
+
*/
|
|
177
|
+
setPosition(x, y) {
|
|
178
|
+
this.position.set(x, y);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 设置本地旋转角度(弧度)
|
|
182
|
+
*
|
|
183
|
+
* @param radians - 旋转角度(弧度)
|
|
184
|
+
*/
|
|
185
|
+
setRotation(radians) {
|
|
186
|
+
this.rotation = radians;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* 设置本地旋转角度(度数)
|
|
190
|
+
*
|
|
191
|
+
* @param degrees - 旋转角度(度数)
|
|
192
|
+
*/
|
|
193
|
+
setRotationDegrees(degrees) {
|
|
194
|
+
this.rotation = MathHelper.toRadians(degrees);
|
|
195
|
+
}
|
|
196
|
+
setScale(scaleOrX, y) {
|
|
197
|
+
if (typeof scaleOrX === 'number') {
|
|
198
|
+
this.scale.set(scaleOrX, y);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
this.scale.copyFrom(scaleOrX);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 朝向指定位置
|
|
206
|
+
*
|
|
207
|
+
* 调整旋转角度使变换朝向目标位置。
|
|
208
|
+
*
|
|
209
|
+
* @param target - 目标位置
|
|
210
|
+
*/
|
|
211
|
+
lookAt(target) {
|
|
212
|
+
const direction = target.subtract(this.worldPosition);
|
|
213
|
+
this.rotation = Math.atan2(direction.y, direction.x);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* 平移变换
|
|
217
|
+
*
|
|
218
|
+
* 在当前位置基础上添加偏移量。
|
|
219
|
+
*
|
|
220
|
+
* @param offset - 位置偏移量
|
|
221
|
+
*/
|
|
222
|
+
translate(offset) {
|
|
223
|
+
this.position = this.position.add(offset);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* 旋转
|
|
227
|
+
* @param radians 旋转角度(弧度)
|
|
228
|
+
*/
|
|
229
|
+
rotate(radians) {
|
|
230
|
+
this.rotation += radians;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* 复制另一个变换的值
|
|
234
|
+
* @param other 另一个变换
|
|
235
|
+
*/
|
|
236
|
+
copyFrom(other) {
|
|
237
|
+
this.position.copyFrom(other.position);
|
|
238
|
+
this.rotation = other.rotation;
|
|
239
|
+
this.scale.copyFrom(other.scale);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* 克隆变换
|
|
243
|
+
*/
|
|
244
|
+
clone() {
|
|
245
|
+
const transform = new Transform(this.position, this.rotation, this.scale);
|
|
246
|
+
return transform;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=Transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transform.js","sourceRoot":"","sources":["../../src/ECS/Transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 高性能位操作类
|
|
3
|
+
* 用于快速操作位数组,支持组件匹配等场景
|
|
4
|
+
*/
|
|
5
|
+
export declare class Bits {
|
|
6
|
+
private _words;
|
|
7
|
+
private static readonly WORD_SIZE;
|
|
8
|
+
constructor();
|
|
9
|
+
/**
|
|
10
|
+
* 设置指定位置的位为1
|
|
11
|
+
* @param index 位置索引
|
|
12
|
+
*/
|
|
13
|
+
set(index: number): void;
|
|
14
|
+
/**
|
|
15
|
+
* 清除指定位置的位(设为0)
|
|
16
|
+
* @param index 位置索引
|
|
17
|
+
*/
|
|
18
|
+
clear(index: number): void;
|
|
19
|
+
/**
|
|
20
|
+
* 获取指定位置的位值
|
|
21
|
+
* @param index 位置索引
|
|
22
|
+
* @returns 位值(true或false)
|
|
23
|
+
*/
|
|
24
|
+
get(index: number): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* 检查是否包含所有指定的位
|
|
27
|
+
* @param other 另一个Bits对象
|
|
28
|
+
* @returns 如果包含所有位则返回true
|
|
29
|
+
*/
|
|
30
|
+
containsAll(other: Bits): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* 检查是否包含任意一个指定的位
|
|
33
|
+
* @param other 另一个Bits对象
|
|
34
|
+
* @returns 如果包含任意位则返回true
|
|
35
|
+
*/
|
|
36
|
+
intersects(other: Bits): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* 检查是否不包含任何指定的位
|
|
39
|
+
* @param other 另一个Bits对象
|
|
40
|
+
* @returns 如果不包含任何位则返回true
|
|
41
|
+
*/
|
|
42
|
+
excludes(other: Bits): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* 清空所有位
|
|
45
|
+
*/
|
|
46
|
+
clearAll(): void;
|
|
47
|
+
/**
|
|
48
|
+
* 检查是否为空(没有设置任何位)
|
|
49
|
+
* @returns 如果为空则返回true
|
|
50
|
+
*/
|
|
51
|
+
isEmpty(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* 获取设置的位数量
|
|
54
|
+
* @returns 设置的位数量
|
|
55
|
+
*/
|
|
56
|
+
cardinality(): number;
|
|
57
|
+
/**
|
|
58
|
+
* 计算一个32位整数中设置的位数量
|
|
59
|
+
* @param n 32位整数
|
|
60
|
+
* @returns 设置的位数量
|
|
61
|
+
*/
|
|
62
|
+
private popCount;
|
|
63
|
+
/**
|
|
64
|
+
* 复制另一个Bits对象
|
|
65
|
+
* @param other 要复制的Bits对象
|
|
66
|
+
*/
|
|
67
|
+
copyFrom(other: Bits): void;
|
|
68
|
+
/**
|
|
69
|
+
* 创建当前Bits的副本
|
|
70
|
+
* @returns 新的Bits对象
|
|
71
|
+
*/
|
|
72
|
+
clone(): Bits;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=Bits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bits.d.ts","sourceRoot":"","sources":["../../../src/ECS/Utils/Bits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,IAAI;IACb,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAM;;IAMvC;;;OAGG;IACI,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAY/B;;;OAGG;IACI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASjC;;;;OAIG;IACI,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAWlC;;;;OAIG;IACI,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAexC;;;;OAIG;IACI,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAYvC;;;;OAIG;IACI,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAIrC;;OAEG;IACI,QAAQ,IAAI,IAAI;IAIvB;;;OAGG;IACI,OAAO,IAAI,OAAO;IASzB;;;OAGG;IACI,WAAW,IAAI,MAAM;IAQ5B;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAMhB;;;OAGG;IACI,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAIlC;;;OAGG;IACI,KAAK,IAAI,IAAI;CAKvB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 高性能位操作类
|
|
3
|
+
* 用于快速操作位数组,支持组件匹配等场景
|
|
4
|
+
*/
|
|
5
|
+
export class Bits {
|
|
6
|
+
constructor() {
|
|
7
|
+
this._words = [];
|
|
8
|
+
this._words = [];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 设置指定位置的位为1
|
|
12
|
+
* @param index 位置索引
|
|
13
|
+
*/
|
|
14
|
+
set(index) {
|
|
15
|
+
const wordIndex = Math.floor(index / Bits.WORD_SIZE);
|
|
16
|
+
const bitIndex = index % Bits.WORD_SIZE;
|
|
17
|
+
// 确保数组足够大
|
|
18
|
+
while (this._words.length <= wordIndex) {
|
|
19
|
+
this._words.push(0);
|
|
20
|
+
}
|
|
21
|
+
this._words[wordIndex] |= (1 << bitIndex);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 清除指定位置的位(设为0)
|
|
25
|
+
* @param index 位置索引
|
|
26
|
+
*/
|
|
27
|
+
clear(index) {
|
|
28
|
+
const wordIndex = Math.floor(index / Bits.WORD_SIZE);
|
|
29
|
+
const bitIndex = index % Bits.WORD_SIZE;
|
|
30
|
+
if (wordIndex < this._words.length) {
|
|
31
|
+
this._words[wordIndex] &= ~(1 << bitIndex);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 获取指定位置的位值
|
|
36
|
+
* @param index 位置索引
|
|
37
|
+
* @returns 位值(true或false)
|
|
38
|
+
*/
|
|
39
|
+
get(index) {
|
|
40
|
+
const wordIndex = Math.floor(index / Bits.WORD_SIZE);
|
|
41
|
+
const bitIndex = index % Bits.WORD_SIZE;
|
|
42
|
+
if (wordIndex >= this._words.length) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return (this._words[wordIndex] & (1 << bitIndex)) !== 0;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 检查是否包含所有指定的位
|
|
49
|
+
* @param other 另一个Bits对象
|
|
50
|
+
* @returns 如果包含所有位则返回true
|
|
51
|
+
*/
|
|
52
|
+
containsAll(other) {
|
|
53
|
+
const maxLength = Math.max(this._words.length, other._words.length);
|
|
54
|
+
for (let i = 0; i < maxLength; i++) {
|
|
55
|
+
const thisWord = i < this._words.length ? this._words[i] : 0;
|
|
56
|
+
const otherWord = i < other._words.length ? other._words[i] : 0;
|
|
57
|
+
if ((thisWord & otherWord) !== otherWord) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 检查是否包含任意一个指定的位
|
|
65
|
+
* @param other 另一个Bits对象
|
|
66
|
+
* @returns 如果包含任意位则返回true
|
|
67
|
+
*/
|
|
68
|
+
intersects(other) {
|
|
69
|
+
const minLength = Math.min(this._words.length, other._words.length);
|
|
70
|
+
for (let i = 0; i < minLength; i++) {
|
|
71
|
+
if ((this._words[i] & other._words[i]) !== 0) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 检查是否不包含任何指定的位
|
|
79
|
+
* @param other 另一个Bits对象
|
|
80
|
+
* @returns 如果不包含任何位则返回true
|
|
81
|
+
*/
|
|
82
|
+
excludes(other) {
|
|
83
|
+
return !this.intersects(other);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 清空所有位
|
|
87
|
+
*/
|
|
88
|
+
clearAll() {
|
|
89
|
+
this._words.length = 0;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 检查是否为空(没有设置任何位)
|
|
93
|
+
* @returns 如果为空则返回true
|
|
94
|
+
*/
|
|
95
|
+
isEmpty() {
|
|
96
|
+
for (const word of this._words) {
|
|
97
|
+
if (word !== 0) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 获取设置的位数量
|
|
105
|
+
* @returns 设置的位数量
|
|
106
|
+
*/
|
|
107
|
+
cardinality() {
|
|
108
|
+
let count = 0;
|
|
109
|
+
for (const word of this._words) {
|
|
110
|
+
count += this.popCount(word);
|
|
111
|
+
}
|
|
112
|
+
return count;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 计算一个32位整数中设置的位数量
|
|
116
|
+
* @param n 32位整数
|
|
117
|
+
* @returns 设置的位数量
|
|
118
|
+
*/
|
|
119
|
+
popCount(n) {
|
|
120
|
+
n = n - ((n >>> 1) & 0x55555555);
|
|
121
|
+
n = (n & 0x33333333) + ((n >>> 2) & 0x33333333);
|
|
122
|
+
return (((n + (n >>> 4)) & 0xF0F0F0F) * 0x1010101) >>> 24;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 复制另一个Bits对象
|
|
126
|
+
* @param other 要复制的Bits对象
|
|
127
|
+
*/
|
|
128
|
+
copyFrom(other) {
|
|
129
|
+
this._words = [...other._words];
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 创建当前Bits的副本
|
|
133
|
+
* @returns 新的Bits对象
|
|
134
|
+
*/
|
|
135
|
+
clone() {
|
|
136
|
+
const newBits = new Bits();
|
|
137
|
+
newBits.copyFrom(this);
|
|
138
|
+
return newBits;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
Bits.WORD_SIZE = 32;
|
|
142
|
+
//# sourceMappingURL=Bits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bits.js","sourceRoot":"","sources":["../../../src/ECS/Utils/Bits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,IAAI;IAIb;QAHQ,WAAM,GAAa,EAAE,CAAC;QAI1B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACI,GAAG,CAAC,KAAa;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAExC,UAAU;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,KAAa;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAExC,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,KAAa;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAExC,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,KAAW;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvC,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,KAAW;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,KAAW;QACvB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,QAAQ;QACX,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,OAAO;QACV,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACb,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,WAAW;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACK,QAAQ,CAAC,CAAS;QACtB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;QACjC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;QAChD,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,KAAW;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,KAAK;QACR,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,OAAO,CAAC;IACnB,CAAC;;AA5JuB,cAAS,GAAG,EAAE,AAAL,CAAM"}
|