@woosh/meep-engine 3.0.0 → 3.0.1
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/editor/particles/rebuildParticleEmitter.js +8 -26
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/tools/SelectionTool.js +1 -2
- package/editor/tools/TransformToolV2.js +2 -3
- package/editor/tools/v2/BlenderCameraOrientationGizmo.js +501 -501
- package/editor/tools/v2/TransformControls.js +1 -1
- package/package.json +95 -96
- package/src/core/geom/3d/mat4/m4_look_at.d.ts +25 -0
- package/src/core/geom/3d/mat4/m4_look_at.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_look_at.js +96 -0
- package/src/core/geom/3d/mat4/m4_make_rotation_x.d.ts +18 -0
- package/src/core/geom/3d/mat4/m4_make_rotation_x.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_make_rotation_x.js +47 -0
- package/src/core/geom/3d/mat4/m4_make_rotation_y.d.ts +18 -0
- package/src/core/geom/3d/mat4/m4_make_rotation_y.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_make_rotation_y.js +47 -0
- package/src/core/geom/3d/mat4/m4_make_rotation_z.d.ts +18 -0
- package/src/core/geom/3d/mat4/m4_make_rotation_z.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_make_rotation_z.js +47 -0
- package/src/core/geom/3d/mat4/m4_perspective.d.ts +25 -0
- package/src/core/geom/3d/mat4/m4_perspective.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_perspective.js +66 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2045 -2052
- package/src/engine/ecs/gui/hud/testHudEdgeStick.js +2 -2
- package/src/engine/ecs/terrain/ecs/TerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/TerrainSystem.js +14 -27
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.d.ts.map +1 -1
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -126
- package/src/engine/graphics/ecs/camera/Camera.d.ts +36 -48
- package/src/engine/graphics/ecs/camera/Camera.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/Camera.js +165 -303
- package/src/engine/graphics/ecs/camera/camera_active_frustum.d.ts +14 -0
- package/src/engine/graphics/ecs/camera/camera_active_frustum.d.ts.map +1 -0
- package/src/engine/graphics/ecs/camera/camera_active_frustum.js +25 -0
- package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +16 -0
- package/src/engine/graphics/ecs/camera/camera_find_active.d.ts.map +1 -0
- package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -0
- package/src/engine/graphics/ecs/camera/camera_traverse_active.d.ts +12 -0
- package/src/engine/graphics/ecs/camera/camera_traverse_active.d.ts.map +1 -0
- package/src/engine/graphics/ecs/camera/camera_traverse_active.js +18 -0
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +170 -170
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +5 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +296 -281
- package/src/engine/graphics/ecs/render_layers_compute_depth_range.d.ts +1 -1
- package/src/engine/graphics/ecs/render_layers_compute_depth_range.js +1 -1
- package/src/engine/graphics/geometry/AttributeData.d.ts +52 -0
- package/src/engine/graphics/geometry/AttributeData.d.ts.map +1 -0
- package/src/engine/graphics/geometry/AttributeData.js +84 -0
- package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts +1 -14
- package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/ParticularEngine.js +229 -253
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +25 -12
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1149 -1194
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +4 -8
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +472 -540
- package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts +19 -90
- package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +135 -514
- package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem3.js +10 -1
- package/src/engine/graphics3/GraphicsEngine3.d.ts +3 -3
- package/src/engine/graphics3/GraphicsEngine3.js +3 -3
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +11 -0
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem3.js +289 -265
- package/src/engine/graphics3/ShadeCameraAdapter.d.ts +3 -3
- package/src/engine/graphics3/ShadeCameraAdapter.js +3 -3
- package/src/engine/graphics3/camera_sync_from_transform.d.ts +2 -2
- package/src/engine/graphics3/camera_sync_from_transform.js +2 -2
- package/src/engine/graphics3/shade_camera_projection_ray.js +2 -2
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/renderer/camera/Camera.d.ts +3 -5
- package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
- package/src/shade/renderer/camera/Camera.js +281 -280
- package/src/shade/renderer/camera/GPUCameraContext.js +233 -233
- package/src/shade/renderer/loader/usd/parse_usda.js +1 -1
- package/src/shade/renderer/loader/usd/usd_build_scene.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/usd_build_scene.js +658 -652
- package/src/shade/renderer/loader/usd/usd_compose_transform.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/usd_compose_transform.js +58 -23
- package/src/shade/renderer/particles/prototypeParticleSystem.js +450 -443
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +7 -3
- package/src/view/minimap/dom/MinimapCameraView.d.ts +2 -2
- package/src/view/minimap/dom/MinimapCameraView.js +206 -206
- package/src/engine/graphics/ecs/camera/CameraSystem.d.ts +0 -74
- package/src/engine/graphics/ecs/camera/CameraSystem.d.ts.map +0 -1
- package/src/engine/graphics/ecs/camera/CameraSystem.js +0 -331
- package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.d.ts +0 -10
- package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.d.ts.map +0 -1
- package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.js +0 -105
- package/src/engine/graphics/ecs/camera/build_three_camera_object.d.ts +0 -7
- package/src/engine/graphics/ecs/camera/build_three_camera_object.d.ts.map +0 -1
- package/src/engine/graphics/ecs/camera/build_three_camera_object.js +0 -29
- package/src/engine/graphics/ecs/camera/frustum_from_camera.d.ts +0 -8
- package/src/engine/graphics/ecs/camera/frustum_from_camera.d.ts.map +0 -1
- package/src/engine/graphics/ecs/camera/frustum_from_camera.js +0 -20
- package/src/engine/graphics/ecs/camera/set_camera_aspect_ratio.d.ts +0 -9
- package/src/engine/graphics/ecs/camera/set_camera_aspect_ratio.d.ts.map +0 -1
- package/src/engine/graphics/ecs/camera/set_camera_aspect_ratio.js +0 -46
- package/src/engine/graphics/ecs/camera/unprojectPoint.d.ts +0 -9
- package/src/engine/graphics/ecs/camera/unprojectPoint.d.ts.map +0 -1
- package/src/engine/graphics/ecs/camera/unprojectPoint.js +0 -14
- package/src/engine/graphics/ecs/camera/update_camera_transform.d.ts +0 -6
- package/src/engine/graphics/ecs/camera/update_camera_transform.d.ts.map +0 -1
- package/src/engine/graphics/ecs/camera/update_camera_transform.js +0 -17
- package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.d.ts +0 -67
- package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.d.ts.map +0 -1
- package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.js +0 -291
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.d.ts +0 -11
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +0 -497
- package/src/engine/graphics/particles/particular/engine/shader/MaterialRecord.d.ts +0 -40
- package/src/engine/graphics/particles/particular/engine/shader/MaterialRecord.d.ts.map +0 -1
- package/src/engine/graphics/particles/particular/engine/shader/MaterialRecord.js +0 -47
- package/src/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.d.ts +0 -7
- package/src/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.d.ts.map +0 -1
- package/src/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js +0 -40
|
@@ -1,170 +1,170 @@
|
|
|
1
|
-
import Vector3 from "../../../../../core/geom/Vector3.js";
|
|
2
|
-
import { obtainTerrain } from "../../../../ecs/terrain/util/obtainTerrain.js";
|
|
3
|
-
import { SurfacePoint3 } from "../../../../../core/geom/3d/SurfacePoint3.js";
|
|
4
|
-
import { make_ray_from_viewport_position } from "../../../make_ray_from_viewport_position.js";
|
|
5
|
-
import {
|
|
6
|
-
import Vector2 from "../../../../../core/geom/Vector2.js";
|
|
7
|
-
import { Transform } from "../../../../ecs/transform/Transform.js";
|
|
8
|
-
|
|
9
|
-
const NEAR_PLANE_INDEX = 5;
|
|
10
|
-
const FAR_PLANE_INDEX = 4;
|
|
11
|
-
|
|
12
|
-
export class PerfectPanner {
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Point in world space that was under our cursor when we started panning
|
|
16
|
-
* @type {Vector3}
|
|
17
|
-
*/
|
|
18
|
-
#grab_world_reference = new Vector3();
|
|
19
|
-
#grab_near_projection = new Vector3();
|
|
20
|
-
#grab_far_projection = new Vector3();
|
|
21
|
-
/**
|
|
22
|
-
* Camera position at the start
|
|
23
|
-
* @type {Vector3}
|
|
24
|
-
*/
|
|
25
|
-
#grab_eye_position = new Vector3();
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
*
|
|
29
|
-
* @type {Engine|null}
|
|
30
|
-
*/
|
|
31
|
-
#engine = null;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
*
|
|
36
|
-
* @type {Camera|null}
|
|
37
|
-
*/
|
|
38
|
-
#camera = null;
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
* @type {Transform|null}
|
|
42
|
-
*/
|
|
43
|
-
#camera_transform = null;
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
*
|
|
47
|
-
* Translation relative to starting point
|
|
48
|
-
* @type {Vector3}
|
|
49
|
-
*/
|
|
50
|
-
#translation = new Vector3();
|
|
51
|
-
|
|
52
|
-
get engine() {
|
|
53
|
-
return this.#engine;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
*
|
|
58
|
-
* @param {Engine} v
|
|
59
|
-
*/
|
|
60
|
-
set engine(v) {
|
|
61
|
-
this.#engine = v;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* @returns {Vector3}
|
|
66
|
-
*/
|
|
67
|
-
get translation() {
|
|
68
|
-
return this.#translation;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
*
|
|
73
|
-
* @param {Vector3} out
|
|
74
|
-
* @param {number} viewport_x
|
|
75
|
-
* @param {number} viewport_y
|
|
76
|
-
* @param {number} plane
|
|
77
|
-
*/
|
|
78
|
-
#projection_viewport_onto_plane(out, viewport_x, viewport_y, plane) {
|
|
79
|
-
const engine = this.#engine;
|
|
80
|
-
|
|
81
|
-
const ray = make_ray_from_viewport_position(engine, new Vector2(viewport_x, viewport_y));
|
|
82
|
-
|
|
83
|
-
// console.log(`Ray origin:${ray.origin}, direction:${ray.direction}`);
|
|
84
|
-
|
|
85
|
-
this.#camera.rayPlaneIntersection(
|
|
86
|
-
out,
|
|
87
|
-
ray.origin.x, ray.origin.y, ray.origin.z,
|
|
88
|
-
ray.direction.x, ray.direction.y, ray.direction.z,
|
|
89
|
-
plane
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
*
|
|
95
|
-
* @param {Vector2} screen_position
|
|
96
|
-
*/
|
|
97
|
-
update(screen_position) {
|
|
98
|
-
// console.log(`PerfectPanner/update: ${screen_position}`)
|
|
99
|
-
|
|
100
|
-
const C = this.#grab_world_reference;
|
|
101
|
-
const A = this.#grab_eye_position;
|
|
102
|
-
const E = this.#grab_far_projection;
|
|
103
|
-
|
|
104
|
-
//
|
|
105
|
-
const AC = new Vector3();
|
|
106
|
-
AC.subVectors(A, C);
|
|
107
|
-
|
|
108
|
-
const EC = new Vector3();
|
|
109
|
-
EC.subVectors(E, C);
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const D = new Vector3();
|
|
113
|
-
|
|
114
|
-
this.#projection_viewport_onto_plane(D, screen_position.x, screen_position.y, FAR_PLANE_INDEX);
|
|
115
|
-
|
|
116
|
-
const translation = new Vector3();
|
|
117
|
-
translation.subVectors(E, D);
|
|
118
|
-
translation.multiplyScalar(AC.length() / EC.length());
|
|
119
|
-
|
|
120
|
-
this.#translation.copy(translation);
|
|
121
|
-
|
|
122
|
-
// console.log(`translation: ${translation}`);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
start(screen_position) {
|
|
126
|
-
// console.log(`PerfectPanner/start: ${screen_position}`)
|
|
127
|
-
|
|
128
|
-
// obtain reference point
|
|
129
|
-
|
|
130
|
-
const engine = this.#engine;
|
|
131
|
-
|
|
132
|
-
const ecd = engine.entityManager.dataset;
|
|
133
|
-
|
|
134
|
-
if (ecd === null) {
|
|
135
|
-
throw new Error('No dataset');
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// bind camera
|
|
139
|
-
const camera =
|
|
140
|
-
this.#camera = camera.component;
|
|
141
|
-
this.#camera_transform = ecd.getComponent(camera.entity, Transform);
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
this.#projection_viewport_onto_plane(this.#grab_near_projection, screen_position.x, screen_position.y, NEAR_PLANE_INDEX);
|
|
145
|
-
this.#projection_viewport_onto_plane(this.#grab_far_projection, screen_position.x, screen_position.y, FAR_PLANE_INDEX);
|
|
146
|
-
|
|
147
|
-
const ray = make_ray_from_viewport_position(engine, screen_position);
|
|
148
|
-
|
|
149
|
-
const terrain = obtainTerrain(ecd);
|
|
150
|
-
|
|
151
|
-
const hit = new SurfacePoint3();
|
|
152
|
-
|
|
153
|
-
if (terrain.raycastFirstSync(hit,
|
|
154
|
-
ray.origin.x, ray.origin.y, ray.origin.z,
|
|
155
|
-
ray.direction.x, ray.direction.y, ray.direction.z
|
|
156
|
-
)) {
|
|
157
|
-
// got terrain hit
|
|
158
|
-
this.#grab_world_reference.copy(hit.position);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
this.#grab_eye_position.copy(this.#camera_transform.position);
|
|
162
|
-
|
|
163
|
-
this.#translation.set(0, 0, 0);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
end() {
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
}
|
|
1
|
+
import Vector3 from "../../../../../core/geom/Vector3.js";
|
|
2
|
+
import { obtainTerrain } from "../../../../ecs/terrain/util/obtainTerrain.js";
|
|
3
|
+
import { SurfacePoint3 } from "../../../../../core/geom/3d/SurfacePoint3.js";
|
|
4
|
+
import { make_ray_from_viewport_position } from "../../../make_ray_from_viewport_position.js";
|
|
5
|
+
import { camera_find_active } from "../camera_find_active.js";
|
|
6
|
+
import Vector2 from "../../../../../core/geom/Vector2.js";
|
|
7
|
+
import { Transform } from "../../../../ecs/transform/Transform.js";
|
|
8
|
+
|
|
9
|
+
const NEAR_PLANE_INDEX = 5;
|
|
10
|
+
const FAR_PLANE_INDEX = 4;
|
|
11
|
+
|
|
12
|
+
export class PerfectPanner {
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Point in world space that was under our cursor when we started panning
|
|
16
|
+
* @type {Vector3}
|
|
17
|
+
*/
|
|
18
|
+
#grab_world_reference = new Vector3();
|
|
19
|
+
#grab_near_projection = new Vector3();
|
|
20
|
+
#grab_far_projection = new Vector3();
|
|
21
|
+
/**
|
|
22
|
+
* Camera position at the start
|
|
23
|
+
* @type {Vector3}
|
|
24
|
+
*/
|
|
25
|
+
#grab_eye_position = new Vector3();
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @type {Engine|null}
|
|
30
|
+
*/
|
|
31
|
+
#engine = null;
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
*
|
|
36
|
+
* @type {Camera|null}
|
|
37
|
+
*/
|
|
38
|
+
#camera = null;
|
|
39
|
+
/**
|
|
40
|
+
*
|
|
41
|
+
* @type {Transform|null}
|
|
42
|
+
*/
|
|
43
|
+
#camera_transform = null;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
*
|
|
47
|
+
* Translation relative to starting point
|
|
48
|
+
* @type {Vector3}
|
|
49
|
+
*/
|
|
50
|
+
#translation = new Vector3();
|
|
51
|
+
|
|
52
|
+
get engine() {
|
|
53
|
+
return this.#engine;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
* @param {Engine} v
|
|
59
|
+
*/
|
|
60
|
+
set engine(v) {
|
|
61
|
+
this.#engine = v;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @returns {Vector3}
|
|
66
|
+
*/
|
|
67
|
+
get translation() {
|
|
68
|
+
return this.#translation;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
*
|
|
73
|
+
* @param {Vector3} out
|
|
74
|
+
* @param {number} viewport_x
|
|
75
|
+
* @param {number} viewport_y
|
|
76
|
+
* @param {number} plane
|
|
77
|
+
*/
|
|
78
|
+
#projection_viewport_onto_plane(out, viewport_x, viewport_y, plane) {
|
|
79
|
+
const engine = this.#engine;
|
|
80
|
+
|
|
81
|
+
const ray = make_ray_from_viewport_position(engine, new Vector2(viewport_x, viewport_y));
|
|
82
|
+
|
|
83
|
+
// console.log(`Ray origin:${ray.origin}, direction:${ray.direction}`);
|
|
84
|
+
|
|
85
|
+
this.#camera.rayPlaneIntersection(
|
|
86
|
+
out,
|
|
87
|
+
ray.origin.x, ray.origin.y, ray.origin.z,
|
|
88
|
+
ray.direction.x, ray.direction.y, ray.direction.z,
|
|
89
|
+
plane
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
*
|
|
95
|
+
* @param {Vector2} screen_position
|
|
96
|
+
*/
|
|
97
|
+
update(screen_position) {
|
|
98
|
+
// console.log(`PerfectPanner/update: ${screen_position}`)
|
|
99
|
+
|
|
100
|
+
const C = this.#grab_world_reference;
|
|
101
|
+
const A = this.#grab_eye_position;
|
|
102
|
+
const E = this.#grab_far_projection;
|
|
103
|
+
|
|
104
|
+
//
|
|
105
|
+
const AC = new Vector3();
|
|
106
|
+
AC.subVectors(A, C);
|
|
107
|
+
|
|
108
|
+
const EC = new Vector3();
|
|
109
|
+
EC.subVectors(E, C);
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
const D = new Vector3();
|
|
113
|
+
|
|
114
|
+
this.#projection_viewport_onto_plane(D, screen_position.x, screen_position.y, FAR_PLANE_INDEX);
|
|
115
|
+
|
|
116
|
+
const translation = new Vector3();
|
|
117
|
+
translation.subVectors(E, D);
|
|
118
|
+
translation.multiplyScalar(AC.length() / EC.length());
|
|
119
|
+
|
|
120
|
+
this.#translation.copy(translation);
|
|
121
|
+
|
|
122
|
+
// console.log(`translation: ${translation}`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
start(screen_position) {
|
|
126
|
+
// console.log(`PerfectPanner/start: ${screen_position}`)
|
|
127
|
+
|
|
128
|
+
// obtain reference point
|
|
129
|
+
|
|
130
|
+
const engine = this.#engine;
|
|
131
|
+
|
|
132
|
+
const ecd = engine.entityManager.dataset;
|
|
133
|
+
|
|
134
|
+
if (ecd === null) {
|
|
135
|
+
throw new Error('No dataset');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// bind camera
|
|
139
|
+
const camera = camera_find_active(ecd);
|
|
140
|
+
this.#camera = camera.component;
|
|
141
|
+
this.#camera_transform = ecd.getComponent(camera.entity, Transform);
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
this.#projection_viewport_onto_plane(this.#grab_near_projection, screen_position.x, screen_position.y, NEAR_PLANE_INDEX);
|
|
145
|
+
this.#projection_viewport_onto_plane(this.#grab_far_projection, screen_position.x, screen_position.y, FAR_PLANE_INDEX);
|
|
146
|
+
|
|
147
|
+
const ray = make_ray_from_viewport_position(engine, screen_position);
|
|
148
|
+
|
|
149
|
+
const terrain = obtainTerrain(ecd);
|
|
150
|
+
|
|
151
|
+
const hit = new SurfacePoint3();
|
|
152
|
+
|
|
153
|
+
if (terrain.raycastFirstSync(hit,
|
|
154
|
+
ray.origin.x, ray.origin.y, ray.origin.z,
|
|
155
|
+
ray.direction.x, ray.direction.y, ray.direction.z
|
|
156
|
+
)) {
|
|
157
|
+
// got terrain hit
|
|
158
|
+
this.#grab_world_reference.copy(hit.position);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
this.#grab_eye_position.copy(this.#camera_transform.position);
|
|
162
|
+
|
|
163
|
+
this.#translation.set(0, 0, 0);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
end() {
|
|
167
|
+
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
}
|
|
@@ -27,7 +27,11 @@ declare class TopDownCameraController {
|
|
|
27
27
|
distanceMin: number;
|
|
28
28
|
distanceMax: number;
|
|
29
29
|
/**
|
|
30
|
-
* Set target, rotation and distance from 2 vectors
|
|
30
|
+
* Set target, rotation and distance from 2 vectors.
|
|
31
|
+
*
|
|
32
|
+
* `eye` must not coincide with `target`, and `up` must not be parallel to the direction between
|
|
33
|
+
* them — a degenerate basis has no angles to report and the caller gets an arbitrary one.
|
|
34
|
+
*
|
|
31
35
|
* @param {Vector3} eye
|
|
32
36
|
* @param {Vector3} target
|
|
33
37
|
* @param {Vector3} [up]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopDownCameraController.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TopDownCameraController.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js"],"names":[],"mappings":"AAwBA;;;;;;GAMG;AACH,iDALW,MAAM,kBACN,MAAM,SACN,uBAAuB,UACvB,uBAAuB,QAiBjC;AAED;;;;;;;GAOG;AACH,+CAHW,UAAU,cACV,uBAAuB,QAIjC;;AAkED;IA2JI,iDAMC;IAxJD,0BAKC;IAbD,gBAAuB;IACvB,cAAU;IACV,YAAQ;IACR,aAAS;IACT,iBAAa;IACb,oBAAgB;IAChB,oBAAkB;IASlB;;;;;;;;;OASG;IACH,yBAJW,OAAO,UACP,OAAO,OACP,OAAO,QA4BjB;IAED;;;;OAIG;IACH,cAHW,uBAAuB,GACrB,OAAO,CAWnB;IAED;;;OAGG;IACH,YAFW,uBAAuB,QAYjC;IAED;;;OAGG;IACH,SAFa,uBAAuB,CAQnC;IAED;;;;;OAKG;IACH,QAJW,uBAAuB,KACvB,uBAAuB,KACvB,MAAM,QAahB;IAED;;;;;;;;;;;;MAYC;IAED;;;;;;;;aAsBC;CASJ;;;;;;uBAxRsB,wCAAwC;oBAC3C,qCAAqC;AAqEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,iDAPW,uBAAuB,sBACvB,MAAM,OAEN,MAAM,eACN,OAAO,QA2BjB"}
|