@woosh/meep-engine 2.57.0 → 2.59.0
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/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/build/meep.cjs +14789 -19638
- package/build/meep.min.js +1 -1
- package/build/meep.module.js +14790 -19638
- package/editor/Editor.js +4 -4
- package/editor/process/symbolic/buildThreeJSHelperEntity.js +3 -3
- package/editor/process/symbolic/makeGridPositionSymbolDisplay.js +3 -3
- package/editor/process/symbolic/makePositionedIconDisplaySymbol.js +3 -3
- package/editor/tools/v2/prototypeTransformControls.js +3 -3
- package/editor/view/ecs/ComponentControlView.js +2 -1
- package/package.json +2 -2
- package/samples/generation/main.js +2 -2
- package/samples/terrain/from_image.js +2 -2
- package/samples/terrain/from_image_2.js +4 -4
- package/src/core/binary/byteArrayToString.js +28 -0
- package/src/core/binary/downloadAsFile.js +28 -0
- package/src/core/binary/downloadUrlAsFile.js +14 -0
- package/src/core/binary/jsonToStringToByteArray.js +27 -0
- package/src/core/binary/stringToByteArray.js +24 -0
- package/src/core/bvh2/BinaryNode.spec.js +2 -1
- package/src/core/color/Color.spec.js +27 -1
- package/src/core/color/parse_color.js +1 -1
- package/src/core/fsm/simple/SimpleStateMachine.spec.js +34 -2
- package/src/core/geom/3d/matrix/m4_multiply.js +2 -2
- package/src/core/geom/3d/matrix/m4_multiply.spec.js +11 -0
- package/src/core/geom/3d/matrix/m4_multiply_alphatensor.spec.js +11 -0
- package/src/core/geom/3d/morton/split_by_2.js +1 -1
- package/src/core/geom/3d/shape/util/shape_to_visual_entity.js +10 -10
- package/src/core/geom/3d/tetrahedra/prototypeTetrahedraBuilder.js +2 -2
- package/src/core/geom/3d/topology/samples/sampleFloodFill.js +3 -3
- package/src/core/process/action/AsynchronousDelayAction.js +2 -2
- package/src/core/process/executor/profile/ConcurrentExecutorProfiler.js +1 -1
- package/src/engine/EngineHarness.js +7 -7
- package/src/engine/EntityCreator.js +5 -5
- package/src/engine/__module.js +1 -1
- package/src/engine/achievements/AchievementManager.js +2 -2
- package/src/engine/animation/AnimationUtils.js +4 -4
- package/src/engine/animation/behavior/animateProperty.js +2 -2
- package/src/engine/animation/curve/draw/build_plot_entity_from_array.js +3 -3
- package/src/engine/animation/playAnimationTrack.js +3 -3
- package/src/engine/animation/playTrackRealTime.js +3 -3
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +2 -2
- package/src/engine/control/ControlContext.js +7 -7
- package/src/engine/ecs/{EntityBuilder.d.ts → Entity.d.ts} +5 -5
- package/src/engine/ecs/{EntityBuilder.js → Entity.js} +29 -29
- package/src/engine/ecs/{EntityBuilder.spec.js → Entity.spec.js} +17 -17
- package/src/engine/ecs/EntityBlueprint.d.ts +2 -2
- package/src/engine/ecs/EntityBlueprint.js +3 -3
- package/src/engine/ecs/EntityBlueprint.spec.js +2 -2
- package/src/engine/ecs/{EntityBuilderFlags.js → EntityFlags.js} +1 -1
- package/src/engine/ecs/EntityObserver.spec.js +8 -8
- package/src/engine/ecs/dynamic_actions/DynamicActorSystem.js +5 -5
- package/src/engine/ecs/foliage/ecs/InstancedMeshUtils.js +3 -3
- package/src/engine/ecs/gui/menu/radial/RadialContextMenu.d.ts +2 -2
- package/src/engine/ecs/gui/menu/radial/RadialContextMenu.js +5 -5
- package/src/engine/ecs/parent/EntityNode.d.ts +3 -3
- package/src/engine/ecs/parent/EntityNode.js +5 -5
- package/src/engine/ecs/parent/testHuDPerf.js +2 -2
- package/src/engine/ecs/speaker/VoiceSystem.js +5 -5
- package/src/engine/ecs/tooltip/testTooltipComponentSystem.js +3 -3
- package/src/engine/graphics/camera/makeOrbitalCameraController.js +3 -3
- package/src/engine/graphics/camera/testClippingPlaneComputation.js +3 -3
- package/src/engine/graphics/debug/createDebugLabel.js +3 -3
- package/src/engine/graphics/ecs/camera/filter/setup_filtered_camera_controller.js +3 -3
- package/src/engine/graphics/ecs/decal/v2/prototypeDecalEditor.js +3 -3
- package/src/engine/graphics/ecs/decal/v2/prototypeDecalSystem.js +14 -14
- package/src/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +3 -3
- package/src/engine/graphics/ecs/mesh-v2/sample/prototypeShadedGeometry.js +5 -5
- package/src/engine/graphics/ecs/mesh-v2/sample/prototype_sg_raycast.js +6 -6
- package/src/engine/graphics/ecs/path/ribbon/RibbonPathBuilder.js +3 -3
- package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +3 -3
- package/src/engine/graphics/ecs/path/tube/build/TubePathBuilder.js +3 -3
- package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +3 -3
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +2 -2
- package/src/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +2 -2
- package/src/engine/graphics/geometry/optimization/merge/prototypeGeometryMerge.js +4 -4
- package/src/engine/graphics/impostors/octahedral/prototypeBaker.js +7 -7
- package/src/engine/graphics/particles/node-based/editor/ParticleSpecificationEditorView.js +1 -1
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +2 -2
- package/src/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.d.ts +2 -2
- package/src/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +3 -3
- package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +10 -10
- package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
- package/src/engine/graphics/render/buffer/simple-fx/taa/prototypeTAA.js +2 -2
- package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +11 -11
- package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +5 -5
- package/src/engine/graphics/sh3/LightProbeVolume.js +2 -2
- package/src/engine/graphics/sh3/prototypeSH3Probe.js +3 -3
- package/src/engine/graphics/sh3/visualise_probe.js +3 -3
- package/src/engine/graphics/shadows/testShadowMapRendering.js +3 -3
- package/src/engine/graphics/texture/sampler/downloadSamplerAsPNG.js +1 -1
- package/src/engine/graphics/texture/sprite/prototypeSpriteCutoutGeometry.js +2 -2
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +2 -2
- package/src/engine/input/ecs/util/TopDownCameraControllerHelper.js +2 -2
- package/src/engine/intelligence/behavior/composite/ParallelBehavior.spec.js +13 -12
- package/src/engine/physics/fluid/prototype.js +3 -3
- package/src/engine/save/storage/JsonStringCodec.js +1 -1
- package/src/engine/save/storage/LocalStorage.js +2 -1
- package/src/engine/ui/GUIEngine.js +4 -4
- package/src/engine/ui/notification/NotificationManager.js +3 -3
- package/src/generation/markers/debug/visualizeMarkers.js +2 -2
- package/src/generation/markers/prototypeGridCellActionPlaceMarker.js +2 -2
- package/src/core/binary/ByteArrayTools.js +0 -137
- package/src/core/binary/NaiveBitSet.js +0 -69
- package/src/core/binary/objects/StandardTypeBuilder.js +0 -126
- package/src/core/binary/serde/JsonSerializer.js +0 -113
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EngineHarness } from "../../../../EngineHarness.js";
|
|
2
2
|
import { FPDecalSystem } from "./FPDecalSystem.js";
|
|
3
|
-
import
|
|
3
|
+
import Entity from "../../../../ecs/Entity.js";
|
|
4
4
|
import { Decal } from "./Decal.js";
|
|
5
5
|
import { Transform } from "../../../../ecs/transform/Transform.js";
|
|
6
6
|
import { randomFloatBetween } from "../../../../../core/math/random/randomFloatBetween.js";
|
|
@@ -31,7 +31,7 @@ import { GizmoRenderingPlugin } from "../../../render/gizmo/GizmoRenderingPlugin
|
|
|
31
31
|
import { Gizmo } from "../../../render/gizmo/Gizmo.js";
|
|
32
32
|
import { ForwardPlusRenderingPlugin } from "../../../render/forward_plus/plugin/ForwardPlusRenderingPlugin.js";
|
|
33
33
|
import { TaskLoadingScreen } from "../../../../../view/task/TaskLoadingScreen.js";
|
|
34
|
-
import {
|
|
34
|
+
import { EntityFlags } from "../../../../ecs/EntityFlags.js";
|
|
35
35
|
|
|
36
36
|
const decal_urls = `data/textures/icons/FantasyIconsMegaPack/MagicItems/MagicItems_png/transparent/x64/staff_13_t.png
|
|
37
37
|
data/textures/icons/FantasyIconsMegaPack/MagicItems/MagicItems_png/transparent/x64/artifact_01_t.png
|
|
@@ -244,9 +244,9 @@ function grid(ecd, offset_x, offset_y, x, y, size_x, size_y, spacing, textures)
|
|
|
244
244
|
|
|
245
245
|
decal.uri = randomFromArray(random, textures);
|
|
246
246
|
|
|
247
|
-
const entity = new
|
|
247
|
+
const entity = new Entity();
|
|
248
248
|
|
|
249
|
-
entity.clearFlag(
|
|
249
|
+
entity.clearFlag(EntityFlags.WatchDestruction);
|
|
250
250
|
|
|
251
251
|
const transform = new Transform();
|
|
252
252
|
transform.position.set(
|
|
@@ -300,9 +300,9 @@ function makeNormalTestGridDecal(ecd, root_transform = new Transform()) {
|
|
|
300
300
|
// decal.uri = decal_urls[1];
|
|
301
301
|
decal.uri = 'moicon/ISO 7010 - Safety Signs (3)/ISO 7010 - Safety Signs/Emergency/400px/E001 – Emergency exit (left hand).png';
|
|
302
302
|
|
|
303
|
-
const entity = new
|
|
303
|
+
const entity = new Entity();
|
|
304
304
|
|
|
305
|
-
entity.clearFlag(
|
|
305
|
+
entity.clearFlag(EntityFlags.WatchDestruction);
|
|
306
306
|
|
|
307
307
|
const transform = new Transform();
|
|
308
308
|
transform.position.set(
|
|
@@ -336,7 +336,7 @@ function makeNormalTestGridDecal(ecd, root_transform = new Transform()) {
|
|
|
336
336
|
});
|
|
337
337
|
arrow_transform.multiplyTransforms(transform, arrow_transform);
|
|
338
338
|
|
|
339
|
-
new
|
|
339
|
+
new Entity()
|
|
340
340
|
.add(ShadedGeometry.from(makeSolidArrowGeometry(), new MeshStandardMaterial({
|
|
341
341
|
side: DoubleSide
|
|
342
342
|
}), DrawMode.Triangles))
|
|
@@ -347,16 +347,16 @@ function makeNormalTestGridDecal(ecd, root_transform = new Transform()) {
|
|
|
347
347
|
}
|
|
348
348
|
|
|
349
349
|
/**
|
|
350
|
-
* @returns {
|
|
350
|
+
* @returns {Entity}
|
|
351
351
|
*/
|
|
352
352
|
function makeNormalTestDecal() {
|
|
353
353
|
const decal = new Decal();
|
|
354
354
|
|
|
355
355
|
decal.uri = decal_urls[1];
|
|
356
356
|
|
|
357
|
-
const entity = new
|
|
357
|
+
const entity = new Entity();
|
|
358
358
|
|
|
359
|
-
entity.clearFlag(
|
|
359
|
+
entity.clearFlag(EntityFlags.WatchDestruction);
|
|
360
360
|
|
|
361
361
|
const transform = new Transform();
|
|
362
362
|
transform.position.set(
|
|
@@ -395,7 +395,7 @@ function sample_grid(ecd) {
|
|
|
395
395
|
});
|
|
396
396
|
makeNormalTestGridDecal(ecd, t_forward_grid);
|
|
397
397
|
|
|
398
|
-
new
|
|
398
|
+
new Entity()
|
|
399
399
|
.add(SGMesh.fromURL('data/models/snaps/cube_white.gltf'))
|
|
400
400
|
.add(Transform.fromJSON({
|
|
401
401
|
position: new Vector3(14, 1, 4.8),
|
|
@@ -459,7 +459,7 @@ async function main(engine) {
|
|
|
459
459
|
terrainSize: new Vector2(TERRAIN_SIZE, TERRAIN_SIZE)
|
|
460
460
|
});
|
|
461
461
|
|
|
462
|
-
new
|
|
462
|
+
new Entity()
|
|
463
463
|
.add(SGMesh.fromURL("moicon/gnutti_not_optimized/model.gltf"))
|
|
464
464
|
.add(Transform.fromJSON({
|
|
465
465
|
position: { x: 10, y: 3, z: 10 },
|
|
@@ -481,9 +481,9 @@ async function main(engine) {
|
|
|
481
481
|
|
|
482
482
|
decal.uri = randomFromArray(random, decal_urls);
|
|
483
483
|
|
|
484
|
-
const entity = new
|
|
484
|
+
const entity = new Entity();
|
|
485
485
|
|
|
486
|
-
entity.clearFlag(
|
|
486
|
+
entity.clearFlag(EntityFlags.WatchDestruction);
|
|
487
487
|
|
|
488
488
|
const transform = new Transform();
|
|
489
489
|
transform.position.set(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EngineHarness } from "../../../../EngineHarness.js";
|
|
2
2
|
import { ShadedGeometrySystem } from "../ShadedGeometrySystem.js";
|
|
3
3
|
import { SGMeshSystem } from "./SGMeshSystem.js";
|
|
4
|
-
import
|
|
4
|
+
import Entity from "../../../../ecs/Entity.js";
|
|
5
5
|
import { Transform } from "../../../../ecs/transform/Transform.js";
|
|
6
6
|
import { SGMesh } from "./SGMesh.js";
|
|
7
7
|
import { GameAssetType } from "../../../../asset/GameAssetType.js";
|
|
@@ -105,7 +105,7 @@ function make_grid(ecd, engine) {
|
|
|
105
105
|
|
|
106
106
|
const mesh = SGMesh.fromURL("data/models/RTS_Buildings_Humans/18/Building_R_18_out/Building_R_18.gltf");
|
|
107
107
|
// const mesh = SGMesh.fromURL("data/models/samples/transform-hierarchy.glb");
|
|
108
|
-
new
|
|
108
|
+
new Entity()
|
|
109
109
|
.add(mesh)
|
|
110
110
|
.add(transform)
|
|
111
111
|
.add(BehaviorComponent.fromOne(
|
|
@@ -144,7 +144,7 @@ function main(engine) {
|
|
|
144
144
|
const mesh = SGMesh.fromURL("moicon/2022_04_20__Micron_from_Philippe/model.gltf");
|
|
145
145
|
// const mesh = Mesh.fromURL("moicon/ztest_object_many_pieces/model.gltf");
|
|
146
146
|
|
|
147
|
-
new
|
|
147
|
+
new Entity()
|
|
148
148
|
.add(Transform.fromJSON({
|
|
149
149
|
position: new Vector3(10, 0, 10)
|
|
150
150
|
}))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EngineHarness } from "../../../../EngineHarness.js";
|
|
2
2
|
import { ShadedGeometrySystem } from "../ShadedGeometrySystem.js";
|
|
3
|
-
import
|
|
3
|
+
import Entity from "../../../../ecs/Entity.js";
|
|
4
4
|
import { Transform } from "../../../../ecs/transform/Transform.js";
|
|
5
5
|
import { ShadedGeometry } from "../ShadedGeometry.js";
|
|
6
6
|
import { BoxBufferGeometry, MeshStandardMaterial, OctahedronGeometry } from "three";
|
|
@@ -9,7 +9,6 @@ import { seededRandom } from "../../../../../core/math/random/seededRandom.js";
|
|
|
9
9
|
import ViewportPosition from "../../../../ecs/gui/position/ViewportPosition.js";
|
|
10
10
|
import GUIElement from "../../../../ecs/gui/GUIElement.js";
|
|
11
11
|
import ButtonView from "../../../../../view/elements/button/ButtonView.js";
|
|
12
|
-
import { downloadAsFile } from "../../../../../core/binary/ByteArrayTools.js";
|
|
13
12
|
import { convert_bvh_to_dot_format_string } from "../../../../../core/bvh2/visual/convert_bvh_to_dot_format_string.js";
|
|
14
13
|
import ViewportPositionSystem from "../../../../ecs/gui/position/ViewportPositionSystem.js";
|
|
15
14
|
import GUIElementSystem from "../../../../ecs/gui/GUIElementSystem.js";
|
|
@@ -21,6 +20,7 @@ import { BehaviorComponent } from "../../../../intelligence/behavior/ecs/Behavio
|
|
|
21
20
|
import { OrbitingBehavior } from "../../../../../../../model/game/util/behavior/OrbitingBehavior.js";
|
|
22
21
|
import { BehaviorSystem } from "../../../../intelligence/behavior/ecs/BehaviorSystem.js";
|
|
23
22
|
import Vector2 from "../../../../../core/geom/Vector2.js";
|
|
23
|
+
import {downloadAsFile} from "../../../../../core/binary/downloadAsFile.js";
|
|
24
24
|
|
|
25
25
|
const eh = new EngineHarness();
|
|
26
26
|
|
|
@@ -37,7 +37,7 @@ function makeMovingShadedGeometry() {
|
|
|
37
37
|
|
|
38
38
|
sg.draw_method = DRAW_METHOD_INSTANCED;
|
|
39
39
|
|
|
40
|
-
return new
|
|
40
|
+
return new Entity()
|
|
41
41
|
.add(new Transform())
|
|
42
42
|
.add(sg)
|
|
43
43
|
.add(BehaviorComponent.fromOne(b));
|
|
@@ -100,7 +100,7 @@ async function main(engine) {
|
|
|
100
100
|
// sg.draw_method = random() > 0.5 ? DRAW_METHOD_INSTANCED : 2;
|
|
101
101
|
sg.clearFlag(ShadedGeometryFlags.CastShadow | ShadedGeometryFlags.ReceiveShadow);
|
|
102
102
|
|
|
103
|
-
new
|
|
103
|
+
new Entity()
|
|
104
104
|
.add(Transform.fromJSON({
|
|
105
105
|
position: {
|
|
106
106
|
x: randomFloatBetween(random, 0, TERRAIN_SIZE),
|
|
@@ -143,7 +143,7 @@ function debug_button(engine, action, name = "Button", ecd = entityManager.datas
|
|
|
143
143
|
entityManager.addSystem(new GUIElementSystem(engine.gui.view, engine));
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
new
|
|
146
|
+
new Entity()
|
|
147
147
|
.add(ViewportPosition.fromJSON({}))
|
|
148
148
|
.add(GUIElement.fromView(new ButtonView({
|
|
149
149
|
action,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EngineHarness } from "../../../../EngineHarness.js";
|
|
2
2
|
import { ShadedGeometrySystem } from "../ShadedGeometrySystem.js";
|
|
3
|
-
import
|
|
3
|
+
import Entity from "../../../../ecs/Entity.js";
|
|
4
4
|
import { Transform } from "../../../../ecs/transform/Transform.js";
|
|
5
5
|
import { ShadedGeometry } from "../ShadedGeometry.js";
|
|
6
6
|
import {
|
|
@@ -15,7 +15,6 @@ import { seededRandom } from "../../../../../core/math/random/seededRandom.js";
|
|
|
15
15
|
import ViewportPosition from "../../../../ecs/gui/position/ViewportPosition.js";
|
|
16
16
|
import GUIElement from "../../../../ecs/gui/GUIElement.js";
|
|
17
17
|
import ButtonView from "../../../../../view/elements/button/ButtonView.js";
|
|
18
|
-
import { downloadAsFile } from "../../../../../core/binary/ByteArrayTools.js";
|
|
19
18
|
import { convert_bvh_to_dot_format_string } from "../../../../../core/bvh2/visual/convert_bvh_to_dot_format_string.js";
|
|
20
19
|
import ViewportPositionSystem from "../../../../ecs/gui/position/ViewportPositionSystem.js";
|
|
21
20
|
import GUIElementSystem from "../../../../ecs/gui/GUIElementSystem.js";
|
|
@@ -33,6 +32,7 @@ import { MicronRenderContext } from "../../../micron/render/v1/MicronRenderConte
|
|
|
33
32
|
import { randomIntegerBetween } from "../../../../../core/math/random/randomIntegerBetween.js";
|
|
34
33
|
import Vector2 from "../../../../../core/geom/Vector2.js";
|
|
35
34
|
import { SurfacePoint3 } from "../../../../../core/geom/3d/SurfacePoint3.js";
|
|
35
|
+
import {downloadAsFile} from "../../../../../core/binary/downloadAsFile.js";
|
|
36
36
|
|
|
37
37
|
const eh = new EngineHarness();
|
|
38
38
|
|
|
@@ -49,7 +49,7 @@ function makeMovingShadedGeometry() {
|
|
|
49
49
|
|
|
50
50
|
sg.draw_method = DRAW_METHOD_INSTANCED;
|
|
51
51
|
|
|
52
|
-
return new
|
|
52
|
+
return new Entity()
|
|
53
53
|
.add(new Transform())
|
|
54
54
|
.add(sg)
|
|
55
55
|
.add(BehaviorComponent.fromOne(b));
|
|
@@ -118,7 +118,7 @@ async function main(engine) {
|
|
|
118
118
|
// sg.draw_method = random() > 0.01 ? DRAW_METHOD_INSTANCED : DRAW_METHOD_PLAIN;
|
|
119
119
|
sg.clearFlag(ShadedGeometryFlags.CastShadow | ShadedGeometryFlags.ReceiveShadow);
|
|
120
120
|
|
|
121
|
-
new
|
|
121
|
+
new Entity()
|
|
122
122
|
.add(Transform.fromJSON({
|
|
123
123
|
position: {
|
|
124
124
|
x: randomFloatBetween(random, 0, 20),
|
|
@@ -140,7 +140,7 @@ async function main(engine) {
|
|
|
140
140
|
|
|
141
141
|
}, 'save dot file');
|
|
142
142
|
|
|
143
|
-
const raycast_marker = new
|
|
143
|
+
const raycast_marker = new Entity()
|
|
144
144
|
.add(ShadedGeometry.from(new SphereBufferGeometry(1), new MeshBasicMaterial({
|
|
145
145
|
color: 0xFF0000
|
|
146
146
|
})))
|
|
@@ -196,7 +196,7 @@ function debug_button(engine, action, name = "Button", ecd = entityManager.datas
|
|
|
196
196
|
entityManager.addSystem(new GUIElementSystem(engine.gui.view, engine));
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
new
|
|
199
|
+
new Entity()
|
|
200
200
|
.add(ViewportPosition.fromJSON({}))
|
|
201
201
|
.add(GUIElement.fromView(new ButtonView({
|
|
202
202
|
action,
|
|
@@ -7,7 +7,7 @@ import Vector3 from "../../../../../core/geom/Vector3.js";
|
|
|
7
7
|
import Renderable from "../../../../ecs/renderable/Renderable.js";
|
|
8
8
|
import { RenderableFlags } from "../../../../ecs/renderable/RenderableFlags.js";
|
|
9
9
|
import { Transform } from "../../../../ecs/transform/Transform.js";
|
|
10
|
-
import
|
|
10
|
+
import Entity from "../../../../ecs/Entity.js";
|
|
11
11
|
import ThreeFactory from "../../../three/ThreeFactory.js";
|
|
12
12
|
import { EventType } from "../../../../ecs/EntityManager.js";
|
|
13
13
|
|
|
@@ -58,7 +58,7 @@ export class RibbonPathBuilder {
|
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
60
|
*
|
|
61
|
-
* @param {
|
|
61
|
+
* @param {Entity[]} destination
|
|
62
62
|
*/
|
|
63
63
|
build(destination) {
|
|
64
64
|
|
|
@@ -120,7 +120,7 @@ export class RibbonPathBuilder {
|
|
|
120
120
|
|
|
121
121
|
ribbon.computeBoundingBox(renderable.boundingBox);
|
|
122
122
|
|
|
123
|
-
const entityBuilder = new
|
|
123
|
+
const entityBuilder = new Entity()
|
|
124
124
|
.add(renderable)
|
|
125
125
|
.add(new Transform());
|
|
126
126
|
|
|
@@ -42,7 +42,7 @@ import { InverseKinematicsSystem } from "../../../ecs/ik/InverseKinematicsSystem
|
|
|
42
42
|
import { PathDisplaySystem } from "./PathDisplaySystem.js";
|
|
43
43
|
import { PathDisplay } from "./PathDisplay.js";
|
|
44
44
|
import { PathDisplayType } from "./PathDisplayType.js";
|
|
45
|
-
import
|
|
45
|
+
import Entity from "../../../ecs/Entity.js";
|
|
46
46
|
import { enableEditor } from "../../../../../editor/enableEditor.js";
|
|
47
47
|
import { GameAssetType } from "../../../asset/GameAssetType.js";
|
|
48
48
|
import { GLTFAssetLoader } from "../../../asset/loaders/GLTFAssetLoader.js";
|
|
@@ -385,7 +385,7 @@ function sample_style_tube() {
|
|
|
385
385
|
* @param {number[]} points
|
|
386
386
|
* @param {InterpolationType} [interp]
|
|
387
387
|
* @param {Vector3} [offset]
|
|
388
|
-
* @returns {
|
|
388
|
+
* @returns {Entity}
|
|
389
389
|
*/
|
|
390
390
|
function makePath({
|
|
391
391
|
points,
|
|
@@ -416,7 +416,7 @@ function makePath({
|
|
|
416
416
|
)
|
|
417
417
|
);
|
|
418
418
|
|
|
419
|
-
return new
|
|
419
|
+
return new Entity()
|
|
420
420
|
.add(_p)
|
|
421
421
|
.add(pathDisplay)
|
|
422
422
|
.add(Highlight.fromOne(0, 1, 1, 1));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BufferGeometry, MeshBasicMaterial, MeshMatcapMaterial, MeshStandardMaterial } from "three";
|
|
2
2
|
import { InterpolationType } from "../../../../../navigation/ecs/components/InterpolationType.js";
|
|
3
|
-
import
|
|
3
|
+
import Entity from "../../../../../ecs/Entity.js";
|
|
4
4
|
import { Transform } from "../../../../../ecs/transform/Transform.js";
|
|
5
5
|
import { TubeMaterialType } from "../TubeMaterialType.js";
|
|
6
6
|
import { GameAssetType } from "../../../../../asset/GameAssetType.js";
|
|
@@ -127,7 +127,7 @@ export class TubePathBuilder {
|
|
|
127
127
|
|
|
128
128
|
/**
|
|
129
129
|
*
|
|
130
|
-
* @param {
|
|
130
|
+
* @param {Entity[]} destination
|
|
131
131
|
*/
|
|
132
132
|
build(destination) {
|
|
133
133
|
const style = this.style;
|
|
@@ -185,7 +185,7 @@ export class TubePathBuilder {
|
|
|
185
185
|
segment_start, segment_end
|
|
186
186
|
);
|
|
187
187
|
|
|
188
|
-
const entityBuilder = new
|
|
188
|
+
const entityBuilder = new Entity();
|
|
189
189
|
|
|
190
190
|
entityBuilder.add(new Transform());
|
|
191
191
|
|
|
@@ -67,7 +67,7 @@ import { RibbonPathStyle } from "../ribbon/RibbonPathStyle.js";
|
|
|
67
67
|
import { PathDisplay } from "../PathDisplay.js";
|
|
68
68
|
import { PathDisplaySpec } from "../PathDisplaySpec.js";
|
|
69
69
|
import { PathDisplayType } from "../PathDisplayType.js";
|
|
70
|
-
import
|
|
70
|
+
import Entity from "../../../../ecs/Entity.js";
|
|
71
71
|
import { BehaviorComponent } from "../../../../intelligence/behavior/ecs/BehaviorComponent.js";
|
|
72
72
|
import { pingpong } from "../../../../../core/math/pingpong.js";
|
|
73
73
|
import { PathEvents } from "../../../../navigation/ecs/components/PathEvents.js";
|
|
@@ -366,7 +366,7 @@ function main(engine) {
|
|
|
366
366
|
);
|
|
367
367
|
|
|
368
368
|
|
|
369
|
-
const path_entity = new
|
|
369
|
+
const path_entity = new Entity();
|
|
370
370
|
|
|
371
371
|
const ecd = engine.entityManager.dataset;
|
|
372
372
|
path_entity
|
|
@@ -375,7 +375,7 @@ function main(engine) {
|
|
|
375
375
|
.build(ecd);
|
|
376
376
|
|
|
377
377
|
let time = 0;
|
|
378
|
-
new
|
|
378
|
+
new Entity()
|
|
379
379
|
.add(BehaviorComponent.looping_function((delta) => {
|
|
380
380
|
time += delta*0.01;
|
|
381
381
|
tube_style.path_mask[1] = pingpong(time, 1);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ParticleEmitter } from "../../particles/particular/engine/emitter/ParticleEmitter.js";
|
|
2
2
|
import { ParticleLayer } from "../../particles/particular/engine/emitter/ParticleLayer.js";
|
|
3
|
-
import
|
|
3
|
+
import Entity from "../../../ecs/Entity.js";
|
|
4
4
|
import { Transform } from "../../../ecs/transform/Transform.js";
|
|
5
5
|
import { SerializationMetadata } from "../../../ecs/components/SerializationMetadata.js";
|
|
6
6
|
import { AbstractContextSystem } from "../../../ecs/system/AbstractContextSystem.js";
|
|
@@ -27,7 +27,7 @@ class Context extends SystemEntityContext {
|
|
|
27
27
|
|
|
28
28
|
this.__emitter.addLayer(this.__layer);
|
|
29
29
|
|
|
30
|
-
this.__emitter_entity = new
|
|
30
|
+
this.__emitter_entity = new Entity()
|
|
31
31
|
.add(this.__emitter)
|
|
32
32
|
.add(new Transform())
|
|
33
33
|
.add(SerializationMetadata.Transient);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EngineHarness } from "../../../EngineHarness.js";
|
|
2
2
|
import { SpriteSystemPE } from "./SpriteSystemPE.js";
|
|
3
3
|
import { ParticleEmitterSystem } from "../../particles/ecs/ParticleEmitterSystem.js";
|
|
4
|
-
import
|
|
4
|
+
import Entity from "../../../ecs/Entity.js";
|
|
5
5
|
import { Transform } from "../../../ecs/transform/Transform.js";
|
|
6
6
|
import { Sprite } from "./Sprite.js";
|
|
7
7
|
import { GizmoRenderingPlugin } from "../../render/gizmo/GizmoRenderingPlugin.js";
|
|
@@ -1545,7 +1545,7 @@ async function main(engine) {
|
|
|
1545
1545
|
|
|
1546
1546
|
sprites_used.add(sprite.url);
|
|
1547
1547
|
|
|
1548
|
-
new
|
|
1548
|
+
new Entity()
|
|
1549
1549
|
.add(Transform.fromJSON({
|
|
1550
1550
|
position: { x: 5 + 2 * i, y: 2, z: 5 + 2 * j }
|
|
1551
1551
|
}))
|
|
@@ -7,7 +7,7 @@ import { TextureAssetLoader } from "../../../../asset/loaders/texture/TextureAss
|
|
|
7
7
|
import Vector3 from "../../../../../core/geom/Vector3.js";
|
|
8
8
|
import Vector2 from "../../../../../core/geom/Vector2.js";
|
|
9
9
|
import { GLTFAssetLoader } from "../../../../asset/loaders/GLTFAssetLoader.js";
|
|
10
|
-
import
|
|
10
|
+
import Entity from "../../../../ecs/Entity.js";
|
|
11
11
|
import Renderable from "../../../../ecs/renderable/Renderable.js";
|
|
12
12
|
import { Transform } from "../../../../ecs/transform/Transform.js";
|
|
13
13
|
import { merge_geometry_hierarchy } from "./merge_geometry_hierarchy.js";
|
|
@@ -116,7 +116,7 @@ async function main(engine) {
|
|
|
116
116
|
whiteSpace: "pre"
|
|
117
117
|
};
|
|
118
118
|
|
|
119
|
-
new
|
|
119
|
+
new Entity()
|
|
120
120
|
.add(new Renderable(apply_random_coloring(optimized_hierarchy)))
|
|
121
121
|
.add(Transform.fromJSON({
|
|
122
122
|
position: new Vector3(128, 2, 128)
|
|
@@ -130,7 +130,7 @@ async function main(engine) {
|
|
|
130
130
|
})))
|
|
131
131
|
.build(engine.entityManager.dataset);
|
|
132
132
|
|
|
133
|
-
new
|
|
133
|
+
new Entity()
|
|
134
134
|
.add(new Renderable(apply_random_coloring(hierarchy)))
|
|
135
135
|
.add(Transform.fromJSON({
|
|
136
136
|
position: new Vector3(138, 2, 128)
|
|
@@ -145,7 +145,7 @@ async function main(engine) {
|
|
|
145
145
|
.build(engine.entityManager.dataset);
|
|
146
146
|
|
|
147
147
|
|
|
148
|
-
new
|
|
148
|
+
new Entity()
|
|
149
149
|
.add(new Renderable(optimized_hierarchy))
|
|
150
150
|
.add(Transform.fromJSON({
|
|
151
151
|
position: new Vector3(148, 2, 128)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EngineHarness } from "../../../EngineHarness.js";
|
|
2
2
|
import { ImpostorBaker } from "./ImpostorBaker.js";
|
|
3
3
|
import { ShadedGeometry } from "../../ecs/mesh-v2/ShadedGeometry.js";
|
|
4
|
-
import
|
|
4
|
+
import Entity from "../../../ecs/Entity.js";
|
|
5
5
|
import ViewportPosition from "../../../ecs/gui/position/ViewportPosition.js";
|
|
6
6
|
import GUIElement from "../../../ecs/gui/GUIElement.js";
|
|
7
7
|
import GUIElementSystem from "../../../ecs/gui/GUIElementSystem.js";
|
|
@@ -79,7 +79,7 @@ async function main(engine) {
|
|
|
79
79
|
mode: 'alpha'
|
|
80
80
|
});
|
|
81
81
|
|
|
82
|
-
new
|
|
82
|
+
new Entity()
|
|
83
83
|
.add(new ViewportPosition({
|
|
84
84
|
offset: new Vector2(0, 0)
|
|
85
85
|
}))
|
|
@@ -110,7 +110,7 @@ async function main(engine) {
|
|
|
110
110
|
sg_mesh.castShadow = false;
|
|
111
111
|
sg_mesh.receiveShadow = false;
|
|
112
112
|
|
|
113
|
-
const entity_true_mesh = new
|
|
113
|
+
const entity_true_mesh = new Entity();
|
|
114
114
|
entity_true_mesh
|
|
115
115
|
.add(sg_mesh)
|
|
116
116
|
.add(t1)
|
|
@@ -122,7 +122,7 @@ async function main(engine) {
|
|
|
122
122
|
|
|
123
123
|
/**
|
|
124
124
|
*
|
|
125
|
-
* @param {
|
|
125
|
+
* @param {Entity} entity
|
|
126
126
|
* @param {number} [speed]
|
|
127
127
|
* @param {Vector3} [axis]
|
|
128
128
|
*/
|
|
@@ -173,7 +173,7 @@ function make_impostor_wireframe(id, t = new Transform()) {
|
|
|
173
173
|
sg.clearFlag(ShadedGeometryFlags.CastShadow);
|
|
174
174
|
sg.clearFlag(ShadedGeometryFlags.ReceiveShadow);
|
|
175
175
|
|
|
176
|
-
return new
|
|
176
|
+
return new Entity()
|
|
177
177
|
.add(transform)
|
|
178
178
|
.add(sg)
|
|
179
179
|
;
|
|
@@ -183,7 +183,7 @@ function make_impostor_wireframe(id, t = new Transform()) {
|
|
|
183
183
|
*
|
|
184
184
|
* @param {ImpostorDescription} id
|
|
185
185
|
* @param {Transform} t
|
|
186
|
-
* @returns {
|
|
186
|
+
* @returns {Entity}
|
|
187
187
|
*/
|
|
188
188
|
function make_impostor_entity(id, t = new Transform()) {
|
|
189
189
|
|
|
@@ -201,7 +201,7 @@ function make_impostor_entity(id, t = new Transform()) {
|
|
|
201
201
|
sg.clearFlag(ShadedGeometryFlags.CastShadow);
|
|
202
202
|
sg.clearFlag(ShadedGeometryFlags.ReceiveShadow);
|
|
203
203
|
|
|
204
|
-
return new
|
|
204
|
+
return new Entity()
|
|
205
205
|
.add(transform)
|
|
206
206
|
.add(sg)
|
|
207
207
|
;
|
|
@@ -8,10 +8,10 @@ import { MouseEvents } from "../../../../input/devices/events/MouseEvents.js";
|
|
|
8
8
|
import InterfaceCommand from "../../../../../view/interaction/InterfaceCommand.js";
|
|
9
9
|
import { InteractionCommand } from "../../../../../view/interaction/InteractionCommand.js";
|
|
10
10
|
import { serializeNodeGraphToJSON } from "../../../../../core/model/node-graph/json/serializeNodeGraphToJSON.js";
|
|
11
|
-
import { downloadAsFile } from "../../../../../core/binary/ByteArrayTools.js";
|
|
12
11
|
import {
|
|
13
12
|
deserializeNodeGraphFromJSON
|
|
14
13
|
} from "../../../../../core/model/node-graph/json/deserializeNodeGraphFromJSON.js";
|
|
14
|
+
import {downloadAsFile} from "../../../../../core/binary/downloadAsFile.js";
|
|
15
15
|
|
|
16
16
|
export class ParticleSpecificationEditorView extends View {
|
|
17
17
|
constructor() {
|
|
@@ -7,7 +7,7 @@ import { writeSample2DDataToDataTexture } from "../../../../../texture/sampler/w
|
|
|
7
7
|
import { ImageRGBADataLoader } from "../../../../../../asset/loaders/image/ImageRGBADataLoader.js";
|
|
8
8
|
import { EngineConfiguration } from "../../../../../../EngineConfiguration.js";
|
|
9
9
|
import { MeshSystem } from "../../../../../ecs/mesh/MeshSystem.js";
|
|
10
|
-
import
|
|
10
|
+
import Entity from "../../../../../../ecs/Entity.js";
|
|
11
11
|
import { Transform } from "../../../../../../ecs/transform/Transform.js";
|
|
12
12
|
import Mesh from "../../../../../ecs/mesh/Mesh.js";
|
|
13
13
|
import Vector3 from "../../../../../../../core/geom/Vector3.js";
|
|
@@ -155,7 +155,7 @@ async function main(engine) {
|
|
|
155
155
|
});
|
|
156
156
|
|
|
157
157
|
|
|
158
|
-
new
|
|
158
|
+
new Entity()
|
|
159
159
|
.add(Mesh.fromJSON({ url: 'data/models/Jauntmessina/Red_Robot/gltf/Model.gltf' }))
|
|
160
160
|
.add(new Transform())
|
|
161
161
|
.build(ecd)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Entity from "../../../../../../ecs/Entity";
|
|
2
2
|
import {AbstractShape3D} from "../../../../../../../core/geom/3d/shape/AbstractShape3D";
|
|
3
3
|
import {AttributeValue} from "./AttributeValue";
|
|
4
4
|
import {SamplingFunctionKind} from "./SamplingFunctionKind";
|
|
@@ -17,7 +17,7 @@ interface Attributes {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export class ParticleVolume {
|
|
20
|
-
readonly entity:
|
|
20
|
+
readonly entity: Entity
|
|
21
21
|
|
|
22
22
|
from(args?: Args): void
|
|
23
23
|
|
|
@@ -5,7 +5,7 @@ import { composeMatrix4 } from "../../../../../util/composeMatrix4.js";
|
|
|
5
5
|
import Quaternion from "../../../../../../../core/geom/Quaternion.js";
|
|
6
6
|
import { ParticleEmitter } from "../../emitter/ParticleEmitter.js";
|
|
7
7
|
import { Transform } from "../../../../../../ecs/transform/Transform.js";
|
|
8
|
-
import
|
|
8
|
+
import Entity from "../../../../../../ecs/Entity.js";
|
|
9
9
|
import { vec3 } from "gl-matrix";
|
|
10
10
|
import { AttributeValue } from "./AttributeValue.js";
|
|
11
11
|
import { PARTICULAR_PARTICLE_SPECIFICATION } from "../../emitter/PARTICULAR_PARTICLE_SPECIFICATION.js";
|
|
@@ -193,7 +193,7 @@ export class ParticleVolume {
|
|
|
193
193
|
*/
|
|
194
194
|
this.__sampling_function = SamplingFunctionKind.Random;
|
|
195
195
|
|
|
196
|
-
const eb = new
|
|
196
|
+
const eb = new Entity();
|
|
197
197
|
|
|
198
198
|
eb.add(this.__emitter)
|
|
199
199
|
.add(SerializationMetadata.Transient)
|
|
@@ -201,7 +201,7 @@ export class ParticleVolume {
|
|
|
201
201
|
|
|
202
202
|
/**
|
|
203
203
|
*
|
|
204
|
-
* @type {
|
|
204
|
+
* @type {Entity}
|
|
205
205
|
*/
|
|
206
206
|
this.entity = eb;
|
|
207
207
|
|
package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js
CHANGED
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
} from "../../../../../render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js";
|
|
32
32
|
import Vector2 from "../../../../../../../core/geom/Vector2.js";
|
|
33
33
|
import Vector3 from "../../../../../../../core/geom/Vector3.js";
|
|
34
|
-
import
|
|
34
|
+
import Entity from "../../../../../../ecs/Entity.js";
|
|
35
35
|
import { Transform } from "../../../../../../ecs/transform/Transform.js";
|
|
36
36
|
import Mesh from "../../../../../ecs/mesh/Mesh.js";
|
|
37
37
|
import { AABB3 } from "../../../../../../../core/geom/3d/aabb/AABB3.js";
|
|
@@ -211,7 +211,7 @@ function make_shape_vis_toggle(engine) {
|
|
|
211
211
|
const entities = TagSystem.find_entities_with_tag(SHAPE_VISUAL_ENTITY_TAG, ecd);
|
|
212
212
|
|
|
213
213
|
|
|
214
|
-
const builders = entities.map(e =>
|
|
214
|
+
const builders = entities.map(e => Entity.readFromDataset(e, ecd));
|
|
215
215
|
|
|
216
216
|
function toggle() {
|
|
217
217
|
if (builders.length <= 1) {
|
|
@@ -238,7 +238,7 @@ function make_shape_vis_toggle(engine) {
|
|
|
238
238
|
}
|
|
239
239
|
});
|
|
240
240
|
|
|
241
|
-
new
|
|
241
|
+
new Entity()
|
|
242
242
|
.add(GUIElement.fromView(buttonView))
|
|
243
243
|
.build(ecd);
|
|
244
244
|
|
|
@@ -259,11 +259,11 @@ function mat_from_aabb3(aabb3) {
|
|
|
259
259
|
*
|
|
260
260
|
* @param {string} url
|
|
261
261
|
* @param {EntityComponentDataset} ecd
|
|
262
|
-
* @returns {
|
|
262
|
+
* @returns {Entity}
|
|
263
263
|
*/
|
|
264
264
|
function load_model(url, ecd) {
|
|
265
265
|
|
|
266
|
-
const b = new
|
|
266
|
+
const b = new Entity();
|
|
267
267
|
b
|
|
268
268
|
.add(new Transform())
|
|
269
269
|
.add(Mesh.fromJSON({
|
|
@@ -917,7 +917,7 @@ async function main(engine) {
|
|
|
917
917
|
function make_box_editor(engine, transform = new Transform()) {
|
|
918
918
|
const controls = new TransformControls(engine.graphics.camera, engine.graphics.domElement);
|
|
919
919
|
|
|
920
|
-
const eb = new
|
|
920
|
+
const eb = new Entity();
|
|
921
921
|
const g_unit_cube = makeHelperBoxGeometry(1, 1, 1);
|
|
922
922
|
|
|
923
923
|
const ecd = engine.entityManager.dataset;
|
|
@@ -953,10 +953,10 @@ function make_box_editor(engine, transform = new Transform()) {
|
|
|
953
953
|
// make camera controller holder
|
|
954
954
|
const entity = TagSystem.find_entities_with_tag('CameraController', ecd)[0];
|
|
955
955
|
|
|
956
|
-
const camera_controls =
|
|
956
|
+
const camera_controls = Entity.readFromDataset(entity, ecd);
|
|
957
957
|
|
|
958
958
|
|
|
959
|
-
new
|
|
959
|
+
new Entity()
|
|
960
960
|
.add(r_controls)
|
|
961
961
|
.add(new Transform())
|
|
962
962
|
.add(new InputController([
|
|
@@ -1148,7 +1148,7 @@ function make_symbol_view({
|
|
|
1148
1148
|
const vp = new ViewportPosition();
|
|
1149
1149
|
vp.anchor.set(0.5, 1);
|
|
1150
1150
|
|
|
1151
|
-
const entity = new
|
|
1151
|
+
const entity = new Entity()
|
|
1152
1152
|
.add(GUIElement.fromView(symbol_view))
|
|
1153
1153
|
.add(new HeadsUpDisplay())
|
|
1154
1154
|
.add(vp)
|
|
@@ -1214,7 +1214,7 @@ async function make_demo_volume({
|
|
|
1214
1214
|
|
|
1215
1215
|
v.attributes.color.lookup = lut;
|
|
1216
1216
|
|
|
1217
|
-
new
|
|
1217
|
+
new Entity()
|
|
1218
1218
|
.add(BehaviorComponent.fromOne(RepeatBehavior.from(new ActionBehavior((time) => {
|
|
1219
1219
|
time_total += time;
|
|
1220
1220
|
|
|
@@ -44,7 +44,7 @@ import Vector2 from "../../../../../core/geom/Vector2.js";
|
|
|
44
44
|
import RenderSystem from "../../../../ecs/systems/RenderSystem.js";
|
|
45
45
|
import { makeEngineOptionsModel } from "../../../../../../../model/game/options/makeEngineOptionsModel.js";
|
|
46
46
|
import { enableEditor } from "../../../../../../editor/enableEditor.js";
|
|
47
|
-
import
|
|
47
|
+
import Entity from "../../../../ecs/Entity.js";
|
|
48
48
|
import { Transform } from "../../../../ecs/transform/Transform.js";
|
|
49
49
|
import Mesh from "../../../ecs/mesh/Mesh.js";
|
|
50
50
|
import { CopyShader } from "three/examples/jsm/shaders/CopyShader.js";
|
|
@@ -313,7 +313,7 @@ function main(engine) {
|
|
|
313
313
|
for (let i = 0; i < 10; i++) {
|
|
314
314
|
for (let j = 0; j < 10; j++) {
|
|
315
315
|
|
|
316
|
-
new
|
|
316
|
+
new Entity()
|
|
317
317
|
.add(Transform.fromJSON({
|
|
318
318
|
position: {
|
|
319
319
|
x: 60 + i * 10,
|