ecspresso 0.13.4 → 0.14.2
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/README.md +3 -6
- package/dist/index.js +2 -2
- package/dist/index.js.map +4 -4
- package/dist/plugins/ai/behavior-tree.d.ts +369 -0
- package/dist/plugins/ai/behavior-tree.js +4 -0
- package/dist/plugins/ai/behavior-tree.js.map +10 -0
- package/dist/plugins/ai/detection.js +2 -2
- package/dist/plugins/ai/detection.js.map +2 -2
- package/dist/plugins/ai/flocking.js +2 -2
- package/dist/plugins/ai/flocking.js.map +2 -2
- package/dist/plugins/ai/pathfinding.d.ts +163 -0
- package/dist/plugins/ai/pathfinding.js +4 -0
- package/dist/plugins/ai/pathfinding.js.map +10 -0
- package/dist/plugins/audio/audio.js +2 -2
- package/dist/plugins/audio/audio.js.map +2 -2
- package/dist/plugins/combat/health.js +2 -2
- package/dist/plugins/combat/health.js.map +2 -2
- package/dist/plugins/combat/projectile.js +2 -2
- package/dist/plugins/combat/projectile.js.map +2 -2
- package/dist/plugins/debug/diagnostics.js +3 -3
- package/dist/plugins/debug/diagnostics.js.map +2 -2
- package/dist/plugins/input/input.d.ts +105 -27
- package/dist/plugins/input/input.js +2 -2
- package/dist/plugins/input/input.js.map +3 -3
- package/dist/plugins/input/selection.js +2 -2
- package/dist/plugins/input/selection.js.map +2 -2
- package/dist/plugins/isometric/depth-sort.js +2 -2
- package/dist/plugins/isometric/depth-sort.js.map +2 -2
- package/dist/plugins/isometric/projection.js +2 -2
- package/dist/plugins/isometric/projection.js.map +2 -2
- package/dist/plugins/physics/collision.js +2 -2
- package/dist/plugins/physics/collision.js.map +2 -2
- package/dist/plugins/physics/collision3D.d.ts +83 -0
- package/dist/plugins/physics/collision3D.js +4 -0
- package/dist/plugins/physics/collision3D.js.map +13 -0
- package/dist/plugins/physics/physics2D.js +2 -2
- package/dist/plugins/physics/physics2D.js.map +2 -2
- package/dist/plugins/physics/physics3D.d.ts +140 -0
- package/dist/plugins/physics/physics3D.js +4 -0
- package/dist/plugins/physics/physics3D.js.map +11 -0
- package/dist/plugins/physics/steering.js +2 -2
- package/dist/plugins/physics/steering.js.map +2 -2
- package/dist/plugins/rendering/particles.js +2 -2
- package/dist/plugins/rendering/particles.js.map +2 -2
- package/dist/plugins/rendering/renderer2D.js +2 -2
- package/dist/plugins/rendering/renderer2D.js.map +3 -3
- package/dist/plugins/rendering/renderer3D.d.ts +247 -0
- package/dist/plugins/rendering/renderer3D.js +4107 -0
- package/dist/plugins/rendering/renderer3D.js.map +12 -0
- package/dist/plugins/rendering/sprite-animation.js +2 -2
- package/dist/plugins/rendering/sprite-animation.js.map +2 -2
- package/dist/plugins/rendering/tilemap.d.ts +230 -0
- package/dist/plugins/rendering/tilemap.js +4 -0
- package/dist/plugins/rendering/tilemap.js.map +11 -0
- package/dist/plugins/scripting/coroutine.js +2 -2
- package/dist/plugins/scripting/coroutine.js.map +2 -2
- package/dist/plugins/scripting/state-machine.js +2 -2
- package/dist/plugins/scripting/state-machine.js.map +2 -2
- package/dist/plugins/scripting/timers.js +2 -2
- package/dist/plugins/scripting/timers.js.map +2 -2
- package/dist/plugins/scripting/tween.js +2 -2
- package/dist/plugins/scripting/tween.js.map +2 -2
- package/dist/plugins/spatial/bounds.js +2 -2
- package/dist/plugins/spatial/bounds.js.map +2 -2
- package/dist/plugins/spatial/camera.js +2 -2
- package/dist/plugins/spatial/camera.js.map +2 -2
- package/dist/plugins/spatial/camera3D.d.ts +112 -0
- package/dist/plugins/spatial/camera3D.js +4 -0
- package/dist/plugins/spatial/camera3D.js.map +10 -0
- package/dist/plugins/spatial/spatial-index.js +2 -2
- package/dist/plugins/spatial/spatial-index.js.map +3 -3
- package/dist/plugins/spatial/spatial-index3D.d.ts +80 -0
- package/dist/plugins/spatial/spatial-index3D.js +4 -0
- package/dist/plugins/spatial/spatial-index3D.js.map +11 -0
- package/dist/plugins/spatial/transform.js +2 -2
- package/dist/plugins/spatial/transform.js.map +2 -2
- package/dist/plugins/spatial/transform3D.d.ts +148 -0
- package/dist/plugins/spatial/transform3D.js +4 -0
- package/dist/plugins/spatial/transform3D.js.map +10 -0
- package/dist/plugins/ui/ui.d.ts +116 -0
- package/dist/plugins/ui/ui.js +4 -0
- package/dist/plugins/ui/ui.js.map +11 -0
- package/dist/system-builder.d.ts +31 -0
- package/dist/utils/math.d.ts +65 -1
- package/dist/utils/narrowphase3D.d.ts +120 -0
- package/dist/utils/spatial-hash3D.d.ts +72 -0
- package/package.json +44 -4
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 3D Renderer Plugin for ECSpresso
|
|
3
|
+
*
|
|
4
|
+
* An opt-in Three.js-based 3D rendering plugin that automates scene graph wiring.
|
|
5
|
+
* Import from 'ecspresso/plugins/rendering/renderer3D'
|
|
6
|
+
*
|
|
7
|
+
* This plugin includes 3D transform propagation automatically.
|
|
8
|
+
*/
|
|
9
|
+
import type { WebGLRenderer, WebGLRendererParameters, Scene, Camera, Object3D, Mesh, Group, ColorRepresentation } from 'three';
|
|
10
|
+
import { type Plugin } from 'ecspresso';
|
|
11
|
+
import type { WorldConfigFrom, EmptyConfig } from '../../type-utils';
|
|
12
|
+
import { type LocalTransform3D, type WorldTransform3D, type Transform3DComponentTypes, type Transform3DPluginOptions } from 'ecspresso/plugins/spatial/transform3D';
|
|
13
|
+
export type { LocalTransform3D, WorldTransform3D, Transform3DComponentTypes };
|
|
14
|
+
export { createTransform3D, createLocalTransform3D, createWorldTransform3D, DEFAULT_LOCAL_TRANSFORM_3D, DEFAULT_WORLD_TRANSFORM_3D, } from 'ecspresso/plugins/spatial/transform3D';
|
|
15
|
+
/**
|
|
16
|
+
* Visibility component for 3D entities.
|
|
17
|
+
*/
|
|
18
|
+
export interface Visible3D {
|
|
19
|
+
visible: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Aggregate component types for the 3D renderer plugin.
|
|
23
|
+
* Included automatically via `.withPlugin(createRenderer3DPlugin({ ... }))`.
|
|
24
|
+
*/
|
|
25
|
+
export interface Renderer3DComponentTypes extends Transform3DComponentTypes {
|
|
26
|
+
mesh: Mesh;
|
|
27
|
+
group: Group;
|
|
28
|
+
object3d: Object3D;
|
|
29
|
+
visible3d: Visible3D;
|
|
30
|
+
/** Controls Three.js Object3D.renderOrder for manual z-ordering */
|
|
31
|
+
renderOrder: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Events emitted by the 3D renderer plugin.
|
|
35
|
+
*/
|
|
36
|
+
export interface Renderer3DEventTypes {
|
|
37
|
+
hierarchyChanged: {
|
|
38
|
+
entityId: number;
|
|
39
|
+
oldParent: number | null;
|
|
40
|
+
newParent: number | null;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resources provided by the 3D renderer plugin.
|
|
45
|
+
*/
|
|
46
|
+
export interface Renderer3DResourceTypes {
|
|
47
|
+
threeRenderer: WebGLRenderer;
|
|
48
|
+
scene: Scene;
|
|
49
|
+
camera: Camera;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Common options shared between both initialization modes.
|
|
53
|
+
*/
|
|
54
|
+
interface Renderer3DPluginCommonOptions<G extends string = 'renderer3d'> {
|
|
55
|
+
/** System group name (default: 'renderer3d') */
|
|
56
|
+
systemGroup?: G;
|
|
57
|
+
/** Priority for render sync system (default: 500) */
|
|
58
|
+
renderSyncPriority?: number;
|
|
59
|
+
/** Options for the included 3D transform plugin */
|
|
60
|
+
transform?: Transform3DPluginOptions;
|
|
61
|
+
/** When true, starts a requestAnimationFrame loop to drive ecs.update() automatically (default: true) */
|
|
62
|
+
startLoop?: boolean;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Options when providing pre-initialized Three.js objects.
|
|
66
|
+
*/
|
|
67
|
+
export interface Renderer3DPluginPreInitOptions<G extends string = 'renderer3d'> extends Renderer3DPluginCommonOptions<G> {
|
|
68
|
+
/** Pre-initialized WebGLRenderer */
|
|
69
|
+
renderer: WebGLRenderer;
|
|
70
|
+
/** Pre-initialized Scene */
|
|
71
|
+
scene: Scene;
|
|
72
|
+
/** Pre-initialized Camera */
|
|
73
|
+
camera: Camera;
|
|
74
|
+
container?: never;
|
|
75
|
+
background?: never;
|
|
76
|
+
width?: never;
|
|
77
|
+
height?: never;
|
|
78
|
+
antialias?: never;
|
|
79
|
+
shadows?: never;
|
|
80
|
+
cameraOptions?: never;
|
|
81
|
+
threeInit?: never;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Camera configuration for managed mode.
|
|
85
|
+
*
|
|
86
|
+
* Discriminated on `projection`. Defaults to `'perspective'` when omitted.
|
|
87
|
+
* Orthographic cameras use `viewSize` (world-unit height at zoom=1) to define
|
|
88
|
+
* the base frustum; `zoom` maps directly to Three.js's `OrthographicCamera.zoom`.
|
|
89
|
+
*/
|
|
90
|
+
export type CameraOptions = {
|
|
91
|
+
projection?: 'perspective';
|
|
92
|
+
fov?: number;
|
|
93
|
+
near?: number;
|
|
94
|
+
far?: number;
|
|
95
|
+
position?: {
|
|
96
|
+
x: number;
|
|
97
|
+
y: number;
|
|
98
|
+
z: number;
|
|
99
|
+
};
|
|
100
|
+
lookAt?: {
|
|
101
|
+
x: number;
|
|
102
|
+
y: number;
|
|
103
|
+
z: number;
|
|
104
|
+
};
|
|
105
|
+
} | {
|
|
106
|
+
projection: 'orthographic';
|
|
107
|
+
viewSize?: number;
|
|
108
|
+
zoom?: number;
|
|
109
|
+
near?: number;
|
|
110
|
+
far?: number;
|
|
111
|
+
position?: {
|
|
112
|
+
x: number;
|
|
113
|
+
y: number;
|
|
114
|
+
z: number;
|
|
115
|
+
};
|
|
116
|
+
lookAt?: {
|
|
117
|
+
x: number;
|
|
118
|
+
y: number;
|
|
119
|
+
z: number;
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Options when letting the plugin create and manage Three.js objects.
|
|
124
|
+
*/
|
|
125
|
+
export interface Renderer3DPluginManagedOptions<G extends string = 'renderer3d'> extends Renderer3DPluginCommonOptions<G> {
|
|
126
|
+
renderer?: never;
|
|
127
|
+
scene?: never;
|
|
128
|
+
camera?: never;
|
|
129
|
+
/** Container element to append the canvas to (or CSS selector string). Defaults to `document.body`. */
|
|
130
|
+
container?: HTMLElement | string;
|
|
131
|
+
/** Scene background color. */
|
|
132
|
+
background?: ColorRepresentation;
|
|
133
|
+
/** Canvas width. When omitted, auto-sizes to container. */
|
|
134
|
+
width?: number;
|
|
135
|
+
/** Canvas height. When omitted, auto-sizes to container. */
|
|
136
|
+
height?: number;
|
|
137
|
+
/** Enable antialiasing (default: true) */
|
|
138
|
+
antialias?: boolean;
|
|
139
|
+
/** Enable shadow mapping (default: false) */
|
|
140
|
+
shadows?: boolean;
|
|
141
|
+
/** Camera configuration */
|
|
142
|
+
cameraOptions?: CameraOptions;
|
|
143
|
+
/** Escape hatch for raw WebGLRendererParameters not otherwise exposed. */
|
|
144
|
+
threeInit?: Partial<WebGLRendererParameters>;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Configuration options for the 3D renderer plugin.
|
|
148
|
+
*
|
|
149
|
+
* Supports two modes:
|
|
150
|
+
* 1. **Pre-initialized**: Pass already-initialized renderer, scene, camera
|
|
151
|
+
* 2. **Managed**: Omit them and the plugin creates everything during `ecs.initialize()`
|
|
152
|
+
*
|
|
153
|
+
* This plugin includes 3D transform propagation automatically.
|
|
154
|
+
*
|
|
155
|
+
* @example Pre-initialized mode
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const renderer = new WebGLRenderer({ antialias: true });
|
|
158
|
+
* const scene = new Scene();
|
|
159
|
+
* const camera = new PerspectiveCamera(75, w / h, 0.1, 1000);
|
|
160
|
+
*
|
|
161
|
+
* const ecs = ECSpresso.create()
|
|
162
|
+
* .withPlugin(createRenderer3DPlugin({ renderer, scene, camera }))
|
|
163
|
+
* .build();
|
|
164
|
+
* ```
|
|
165
|
+
*
|
|
166
|
+
* @example Managed mode
|
|
167
|
+
* ```typescript
|
|
168
|
+
* const ecs = ECSpresso.create()
|
|
169
|
+
* .withPlugin(createRenderer3DPlugin({
|
|
170
|
+
* container: '#game',
|
|
171
|
+
* background: 0x1099bb,
|
|
172
|
+
* antialias: true,
|
|
173
|
+
* cameraOptions: { fov: 75, position: { x: 0, y: 5, z: 10 } },
|
|
174
|
+
* }))
|
|
175
|
+
* .build();
|
|
176
|
+
* await ecs.initialize();
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
export type Renderer3DPluginOptions<G extends string = 'renderer3d'> = Renderer3DPluginPreInitOptions<G> | Renderer3DPluginManagedOptions<G>;
|
|
180
|
+
interface PositionOption3D {
|
|
181
|
+
x?: number;
|
|
182
|
+
y?: number;
|
|
183
|
+
z?: number;
|
|
184
|
+
}
|
|
185
|
+
interface TransformOptions3D {
|
|
186
|
+
rotation?: {
|
|
187
|
+
x?: number;
|
|
188
|
+
y?: number;
|
|
189
|
+
z?: number;
|
|
190
|
+
};
|
|
191
|
+
scale?: number | {
|
|
192
|
+
x: number;
|
|
193
|
+
y: number;
|
|
194
|
+
z: number;
|
|
195
|
+
};
|
|
196
|
+
visible?: boolean;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Create components for a mesh entity.
|
|
200
|
+
* Returns an object suitable for spreading into spawn().
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* const player = ecs.spawn({
|
|
205
|
+
* ...createMeshComponents(myMesh, { x: 10, y: 0, z: -5 }),
|
|
206
|
+
* velocity: { x: 0, y: 0, z: 0 },
|
|
207
|
+
* });
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
export declare function createMeshComponents(mesh: Mesh, position?: PositionOption3D, options?: TransformOptions3D): Pick<Renderer3DComponentTypes, 'mesh' | 'localTransform3D' | 'worldTransform3D' | 'visible3d'>;
|
|
211
|
+
/**
|
|
212
|
+
* Create components for a group entity.
|
|
213
|
+
* Returns an object suitable for spreading into spawn().
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```typescript
|
|
217
|
+
* const enemies = ecs.spawn({
|
|
218
|
+
* ...createGroupComponents(enemyGroup, { x: 50, y: 0, z: -30 }),
|
|
219
|
+
* });
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
export declare function createGroupComponents(group: Group, position?: PositionOption3D, options?: TransformOptions3D): Pick<Renderer3DComponentTypes, 'group' | 'localTransform3D' | 'worldTransform3D' | 'visible3d'>;
|
|
223
|
+
/**
|
|
224
|
+
* Create components for a generic Object3D entity.
|
|
225
|
+
* Returns an object suitable for spreading into spawn().
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* ```typescript
|
|
229
|
+
* const obj = ecs.spawn({
|
|
230
|
+
* ...createObject3DComponents(myObject, { x: 0, y: 0, z: 0 }),
|
|
231
|
+
* });
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
export declare function createObject3DComponents(object3d: Object3D, position?: PositionOption3D, options?: TransformOptions3D): Pick<Renderer3DComponentTypes, 'object3d' | 'localTransform3D' | 'worldTransform3D' | 'visible3d'>;
|
|
235
|
+
type Renderer3DLabels = 'renderer3d-sync' | 'renderer3d-scene-graph' | 'renderer3d-render' | 'transform3d-propagation';
|
|
236
|
+
type Renderer3DReactiveQueryNames = 'renderer3d-meshes' | 'renderer3d-groups' | 'renderer3d-objects';
|
|
237
|
+
/**
|
|
238
|
+
* Create a 3D rendering plugin for ECSpresso.
|
|
239
|
+
*
|
|
240
|
+
* This plugin provides:
|
|
241
|
+
* - 3D transform propagation (localTransform3D -> worldTransform3D)
|
|
242
|
+
* - Render sync system (updates Three.js objects from ECS components)
|
|
243
|
+
* - Scene graph management (auto-adds/removes Three.js objects)
|
|
244
|
+
* - Render call (renderer.render(scene, camera) each frame)
|
|
245
|
+
* - Optional requestAnimationFrame loop
|
|
246
|
+
*/
|
|
247
|
+
export declare function createRenderer3DPlugin<G extends string = 'renderer3d'>(options: Renderer3DPluginOptions<G>): Plugin<WorldConfigFrom<Renderer3DComponentTypes, Renderer3DEventTypes, Renderer3DResourceTypes>, EmptyConfig, Renderer3DLabels, G, never, Renderer3DReactiveQueryNames>;
|