@anov/3d-ability 0.0.33 → 0.0.37

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.
@@ -1,21 +1,24 @@
1
1
  import type { OrbitControls, PerspectiveCamera, SceneControl } from '@anov/3d-core';
2
+ import { EventDispatcher, Vector3 } from '@anov/3d-core';
2
3
  type vector3Array = number[];
3
- declare class Camera {
4
+ declare class CameraUtil extends EventDispatcher {
5
+ isTransitionPeriod: boolean;
6
+ isTrigger: boolean;
4
7
  private camera;
5
8
  private controls;
6
9
  private sceneControl;
7
- private isTransitionPeriod;
8
- private isTrigger;
9
10
  private tween;
10
11
  constructor(camera: PerspectiveCamera, controls: OrbitControls, sceneControl: SceneControl);
11
12
  /**
12
- * caclCurrentPos
13
+ * calculate last position from position box
14
+ * if distance is not defined, calculate distance from box size
13
15
  * @param currentPos
16
+ * @param pitch
14
17
  * @returns
15
18
  */
16
19
  private caclCurrentPos;
17
20
  /**
18
- * caclTargetByPitch
21
+ * get current camera pitch and yaw
19
22
  * @param pitch
20
23
  * @param target
21
24
  * @param position
@@ -23,7 +26,7 @@ declare class Camera {
23
26
  */
24
27
  private caclTargetByPitch;
25
28
  /**
26
- * caclSingleCoordinate
29
+ * caclSingleCoordinate, when use focus and target is single point
27
30
  * @param prevTarget
28
31
  * @param prevPosition
29
32
  * @param lastTarget
@@ -31,19 +34,27 @@ declare class Camera {
31
34
  */
32
35
  private caclSingleCoordinate;
33
36
  /**
34
- * handle camera changed
35
- */
36
- private handleChanged;
37
- /**
38
- * focus On Position
37
+ * camera focus
39
38
  * @param params
40
39
  */
41
40
  focus(params: {
42
- target: vector3Array | vector3Array[];
41
+ target: vector3Array | vector3Array[] | string;
43
42
  pitch?: number;
43
+ yaw?: number;
44
+ distance?: number;
44
45
  duration?: number;
45
46
  isTrigger?: boolean;
46
- }): Promise<unknown>;
47
+ onUpdate?: (args: {
48
+ position: Vector3;
49
+ target: Vector3;
50
+ }) => void;
51
+ }): Promise<{
52
+ position: number[];
53
+ target: number[];
54
+ duration: number;
55
+ userInput: boolean;
56
+ pitch: number;
57
+ }>;
47
58
  /**
48
59
  * set camera
49
60
  * @param params
@@ -53,9 +64,19 @@ declare class Camera {
53
64
  target: vector3Array;
54
65
  isTrigger?: boolean;
55
66
  duration?: number;
56
- }): Promise<unknown>;
67
+ onUpdate?: (args: {
68
+ position: Vector3;
69
+ target: Vector3;
70
+ }) => void;
71
+ }): Promise<{
72
+ position: number[];
73
+ target: number[];
74
+ isTrigger: boolean;
75
+ duration: number;
76
+ userInput: boolean;
77
+ }>;
57
78
  /**
58
- * get Camera info
79
+ * get camera position and target
59
80
  * @returns
60
81
  */
61
82
  get(): {
@@ -68,6 +89,6 @@ declare class Camera {
68
89
  * @param target
69
90
  * @param options
70
91
  */
71
- private moveCameraTo;
92
+ private motion;
72
93
  }
73
- export default Camera;
94
+ export default CameraUtil;
@@ -2,33 +2,53 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
2
2
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3
3
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
4
4
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
5
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
6
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
7
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
8
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
9
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
10
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
11
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
5
12
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
13
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
7
14
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
- import { Box3, MathUtils, TWEEN, Vector3 } from '@anov/3d-core';
9
- var Camera = /*#__PURE__*/function () {
10
- function Camera(camera, controls, sceneControl) {
11
- _classCallCheck(this, Camera);
12
- _defineProperty(this, "camera", void 0);
13
- _defineProperty(this, "controls", void 0);
14
- _defineProperty(this, "sceneControl", void 0);
15
- _defineProperty(this, "isTransitionPeriod", false);
16
- _defineProperty(this, "isTrigger", true);
17
- _defineProperty(this, "tween", void 0);
18
- this.camera = sceneControl.camera;
19
- this.controls = sceneControl.controls;
20
- this.sceneControl = sceneControl;
21
- this.handleChanged();
15
+ import { Box3, EventDispatcher, MathUtils, TWEEN, Vector3 } from '@anov/3d-core';
16
+ var CameraUtil = /*#__PURE__*/function (_EventDispatcher) {
17
+ _inherits(CameraUtil, _EventDispatcher);
18
+ var _super = _createSuper(CameraUtil);
19
+ function CameraUtil(camera, controls, sceneControl) {
20
+ var _this;
21
+ _classCallCheck(this, CameraUtil);
22
+ _this = _super.call(this);
23
+ _defineProperty(_assertThisInitialized(_this), "isTransitionPeriod", false);
24
+ _defineProperty(_assertThisInitialized(_this), "isTrigger", true);
25
+ _defineProperty(_assertThisInitialized(_this), "camera", void 0);
26
+ _defineProperty(_assertThisInitialized(_this), "controls", void 0);
27
+ _defineProperty(_assertThisInitialized(_this), "sceneControl", void 0);
28
+ _defineProperty(_assertThisInitialized(_this), "tween", void 0);
29
+ _this.camera = camera;
30
+ _this.controls = controls;
31
+ _this.sceneControl = sceneControl;
32
+ _this.controls.addEventListener('change', function () {
33
+ _this.dispatchEvent({
34
+ type: 'change',
35
+ position: _this.camera.position,
36
+ target: _this.controls.target
37
+ });
38
+ });
39
+ return _this;
22
40
  }
23
41
 
24
42
  /**
25
- * caclCurrentPos
43
+ * calculate last position from position box
44
+ * if distance is not defined, calculate distance from box size
26
45
  * @param currentPos
46
+ * @param pitch
27
47
  * @returns
28
48
  */
29
- _createClass(Camera, [{
49
+ _createClass(CameraUtil, [{
30
50
  key: "caclCurrentPos",
31
- value: function caclCurrentPos(currentPos, pitch) {
51
+ value: function caclCurrentPos(currentPos, distance) {
32
52
  var box = new Box3();
33
53
  box.setFromPoints(currentPos.map(function (item) {
34
54
  return new Vector3(item[0], item[1], item[2]);
@@ -38,10 +58,9 @@ var Camera = /*#__PURE__*/function () {
38
58
  var halfDiagonal = size.length() * 0.5;
39
59
  var maxDistance = halfDiagonal / Math.tan(this.camera.fov / 2 * Math.PI / 180);
40
60
  var cameraToCenterDistance = maxDistance;
41
- var directionVector = this.camera.position.clone().sub(this.controls.target).normalize(); // 相机指向物体中心的向量
42
-
43
- var lastPosition = directionVector.multiplyScalar(cameraToCenterDistance).add(center);
44
- var lastLookat = this.caclTargetByPitch(pitch, center, lastPosition);
61
+ var directionVector = this.camera.position.clone().sub(this.controls.target).normalize();
62
+ var lastPosition = directionVector.multiplyScalar(distance !== null && distance !== void 0 ? distance : cameraToCenterDistance).add(center);
63
+ var lastLookat = center;
45
64
  return {
46
65
  lastPosition: lastPosition,
47
66
  lastLookat: lastLookat
@@ -49,7 +68,7 @@ var Camera = /*#__PURE__*/function () {
49
68
  }
50
69
 
51
70
  /**
52
- * caclTargetByPitch
71
+ * get current camera pitch and yaw
53
72
  * @param pitch
54
73
  * @param target
55
74
  * @param position
@@ -68,7 +87,7 @@ var Camera = /*#__PURE__*/function () {
68
87
  }
69
88
 
70
89
  /**
71
- * caclSingleCoordinate
90
+ * caclSingleCoordinate, when use focus and target is single point
72
91
  * @param prevTarget
73
92
  * @param prevPosition
74
93
  * @param lastTarget
@@ -82,29 +101,22 @@ var Camera = /*#__PURE__*/function () {
82
101
  }
83
102
 
84
103
  /**
85
- * handle camera changed
86
- */
87
- }, {
88
- key: "handleChanged",
89
- value: function handleChanged() {
90
- // this.controls.addEventListener('change', () => {
91
- // // if (this.isTransitionPeriod)
92
- // // this.sceneControl.renderer!.render(this.sceneControl.scene!, this.sceneControl.camera!)
93
- // })
94
- }
95
-
96
- /**
97
- * focus On Position
104
+ * camera focus
98
105
  * @param params
99
106
  */
100
107
  }, {
101
108
  key: "focus",
102
109
  value: function focus(params) {
103
- var _this = this;
110
+ var _this2 = this;
104
111
  return new Promise(function (res) {
105
112
  var position = params.target,
106
- pitch = params.pitch,
107
- duration = params.duration;
113
+ _params$pitch = params.pitch,
114
+ pitch = _params$pitch === void 0 ? 0 : _params$pitch,
115
+ _params$yaw = params.yaw,
116
+ yaw = _params$yaw === void 0 ? 0 : _params$yaw,
117
+ distance = params.distance,
118
+ duration = params.duration,
119
+ _onUpdate = params.onUpdate;
108
120
  var moveOptions = function moveOptions() {
109
121
  var _ref, _params$isTrigger;
110
122
  return {
@@ -114,14 +126,18 @@ var Camera = /*#__PURE__*/function () {
114
126
  var _params$isTrigger2;
115
127
  var position = _ref2.position,
116
128
  lookat = _ref2.lookat;
117
- _this.isTrigger = (_params$isTrigger2 = params.isTrigger) !== null && _params$isTrigger2 !== void 0 ? _params$isTrigger2 : true;
129
+ _this2.isTrigger = (_params$isTrigger2 = params.isTrigger) !== null && _params$isTrigger2 !== void 0 ? _params$isTrigger2 : true;
130
+ _onUpdate && _onUpdate({
131
+ position: position,
132
+ target: lookat
133
+ });
118
134
  },
119
135
  onComplate: function onComplate() {
120
136
  var _params$duration;
121
- _this.isTrigger = false;
137
+ _this2.isTrigger = false;
122
138
  res({
123
- position: _this.camera.position.toArray(),
124
- target: _this.controls.target.toArray(),
139
+ position: _this2.camera.position.toArray(),
140
+ target: _this2.controls.target.toArray(),
125
141
  duration: (_params$duration = params.duration) !== null && _params$duration !== void 0 ? _params$duration : 0,
126
142
  userInput: true,
127
143
  pitch: pitch !== null && pitch !== void 0 ? pitch : 40
@@ -129,17 +145,21 @@ var Camera = /*#__PURE__*/function () {
129
145
  }
130
146
  };
131
147
  };
148
+
149
+ // if target is multiple points
132
150
  if (Array.isArray(position[0])) {
133
151
  var currentPos = position;
134
- var _this$caclCurrentPos = _this.caclCurrentPos(currentPos, 0),
135
- lastPosition = _this$caclCurrentPos.lastPosition,
136
- lastLookat = _this$caclCurrentPos.lastLookat;
137
- _this.moveCameraTo(lastPosition, lastLookat, pitch, moveOptions());
138
- } else {
152
+ var _this2$caclCurrentPos = _this2.caclCurrentPos(currentPos, distance),
153
+ lastPosition = _this2$caclCurrentPos.lastPosition,
154
+ lastLookat = _this2$caclCurrentPos.lastLookat;
155
+ _this2.motion(lastPosition, lastLookat, pitch, yaw, moveOptions());
156
+ }
157
+ // if target is single point
158
+ else {
139
159
  var _currentPos = position;
140
- var _lastPosition = _this.caclSingleCoordinate(_this.controls.target, _this.camera.position, new Vector3().fromArray(_currentPos));
141
- var _lastLookat = _this.caclTargetByPitch(0, new Vector3().fromArray(_currentPos), _lastPosition);
142
- _this.moveCameraTo(_lastPosition, _lastLookat, pitch, moveOptions());
160
+ var _lastPosition = _this2.caclSingleCoordinate(_this2.controls.target, _this2.camera.position, new Vector3().fromArray(_currentPos));
161
+ var _lastLookat = new Vector3().fromArray(_currentPos);
162
+ _this2.motion(_lastPosition, _lastLookat, pitch, yaw, moveOptions());
143
163
  }
144
164
  });
145
165
  }
@@ -151,24 +171,32 @@ var Camera = /*#__PURE__*/function () {
151
171
  }, {
152
172
  key: "set",
153
173
  value: function set(params) {
154
- var _this2 = this;
174
+ var _this3 = this;
175
+ var position = params.position,
176
+ target = params.target,
177
+ isTrigger = params.isTrigger,
178
+ duration = params.duration;
155
179
  return new Promise(function (res, _) {
156
- var _params$isTrigger3, _ref3;
157
- _this2.moveCameraTo(new Vector3(params.position[0], params.position[1], params.position[2]), new Vector3(params.target[0], params.target[1], params.target[2]), 0, {
158
- isTrigger: (_params$isTrigger3 = params.isTrigger) !== null && _params$isTrigger3 !== void 0 ? _params$isTrigger3 : true,
159
- duration: (_ref3 = params.duration && params.duration * 1000) !== null && _ref3 !== void 0 ? _ref3 : 1000,
180
+ var _ref3;
181
+ _this3.motion(new Vector3(position[0], position[1], position[2]), new Vector3(target[0], target[1], target[2]), 0, 0, {
182
+ isTrigger: isTrigger !== null && isTrigger !== void 0 ? isTrigger : true,
183
+ duration: (_ref3 = duration && duration * 1000) !== null && _ref3 !== void 0 ? _ref3 : 1000,
160
184
  onUpdate: function onUpdate(_ref4) {
161
- var _params$isTrigger4;
185
+ var _params$isTrigger3;
162
186
  var position = _ref4.position,
163
187
  lookat = _ref4.lookat;
164
- _this2.isTrigger = (_params$isTrigger4 = params.isTrigger) !== null && _params$isTrigger4 !== void 0 ? _params$isTrigger4 : true;
188
+ _this3.isTrigger = (_params$isTrigger3 = params.isTrigger) !== null && _params$isTrigger3 !== void 0 ? _params$isTrigger3 : true;
189
+ params.onUpdate && params.onUpdate({
190
+ position: position,
191
+ target: lookat
192
+ });
165
193
  },
166
194
  onComplate: function onComplate() {
167
195
  var _params$duration2;
168
- _this2.isTrigger = false;
196
+ _this3.isTrigger = false;
169
197
  res({
170
- position: _this2.camera.position.toArray(),
171
- target: _this2.controls.target.toArray(),
198
+ position: _this3.camera.position.toArray(),
199
+ target: _this3.controls.target.toArray(),
172
200
  isTrigger: true,
173
201
  duration: (_params$duration2 = params.duration) !== null && _params$duration2 !== void 0 ? _params$duration2 : 0,
174
202
  userInput: true
@@ -179,7 +207,7 @@ var Camera = /*#__PURE__*/function () {
179
207
  }
180
208
 
181
209
  /**
182
- * get Camera info
210
+ * get camera position and target
183
211
  * @returns
184
212
  */
185
213
  }, {
@@ -198,46 +226,73 @@ var Camera = /*#__PURE__*/function () {
198
226
  * @param options
199
227
  */
200
228
  }, {
201
- key: "moveCameraTo",
202
- value: function moveCameraTo(position, target) {
203
- var _this3 = this;
229
+ key: "motion",
230
+ value: function motion(position, target) {
231
+ var _this4 = this;
204
232
  var pitch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
205
- var options = arguments.length > 3 ? arguments[3] : undefined;
233
+ var yaw = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
234
+ var options = arguments.length > 4 ? arguments[4] : undefined;
206
235
  var currentPoition = this.camera.position.clone();
207
236
  var currentPositionInterpolation = new Vector3();
208
237
  if ((options === null || options === void 0 ? void 0 : options.duration) === 0) {
209
- this.isTrigger = !options.isTrigger;
238
+ this.isTrigger = false;
210
239
  this.camera.position.copy(position);
211
240
  this.controls.target.copy(target);
241
+ if (pitch) {
242
+ var p = -this.camera.rotation.x + (pitch ? MathUtils.degToRad(-pitch) : 0);
243
+
244
+ // @ts-ignore
245
+ // this.camera.rotationParent.x = p
246
+ // @ts-ignore
247
+ this.camera.rotationParent.x = MathUtils.degToRad(pitch);
248
+ }
249
+ if (yaw) {
250
+ var y = -this.camera.rotation.y + (yaw ? MathUtils.degToRad(-yaw) : 0);
251
+
252
+ // // @ts-ignore
253
+ // this.camera.rotationParent.y = y
254
+
255
+ // @ts-ignore
256
+ this.camera.rotationParent.y = MathUtils.degToRad(yaw);
257
+ }
212
258
  requestAnimationFrame(function () {
213
259
  (options === null || options === void 0 ? void 0 : options.onComplate) && options.onComplate();
214
- _this3.sceneControl.renderer.render(_this3.sceneControl.scene, _this3.sceneControl.camera);
260
+ _this4.sceneControl.renderer.render(_this4.sceneControl.scene, _this4.sceneControl.camera);
215
261
  });
216
262
  return;
217
263
  }
218
264
  if (this.tween) this.tween.stop();
219
- this.tween = new TWEEN.Tween({
265
+ this.tween = new TWEEN.Tween(
266
+ // @ts-ignore
267
+ {
220
268
  t: 0,
221
269
  lookat: this.controls.target.clone(),
222
- p: 0
223
- }).to({
270
+ p: this.camera.rotationParent.x,
271
+ yaw: this.camera.rotationParent.y
272
+ })
273
+ // @ts-ignore
274
+ .to({
224
275
  t: 1,
225
276
  lookat: target,
226
- p: -this.camera.rotation.x + (pitch ? MathUtils.degToRad(-pitch) : 0)
277
+ p: MathUtils.degToRad(pitch),
278
+ y: MathUtils.degToRad(yaw)
227
279
  }, (options === null || options === void 0 ? void 0 : options.duration) || 1000).onStart(function () {
228
280
  (options === null || options === void 0 ? void 0 : options.onStart) && options.onStart();
229
- _this3.controls.enabled = false;
230
- _this3.isTransitionPeriod = true;
281
+ _this4.controls.enabled = false;
282
+ _this4.isTransitionPeriod = true;
231
283
  }).easing(TWEEN.Easing.Quadratic.InOut).onUpdate(function (_ref5) {
232
284
  var t = _ref5.t,
233
285
  lookat = _ref5.lookat,
234
286
  p = _ref5.p;
235
- _this3.controls.target.copy(lookat);
287
+ _this4.controls.target.copy(lookat);
236
288
  if (pitch)
237
289
  // @ts-ignore
238
- _this3.camera.rotationParent.x = p;
290
+ _this4.camera.rotationParent.x = p;
291
+ if (yaw)
292
+ // @ts-ignore
293
+ _this4.camera.rotationParent.y = p;
239
294
  var currentPosition = currentPositionInterpolation.lerpVectors(currentPoition, position, t);
240
- _this3.camera.position.copy(currentPosition);
295
+ _this4.camera.position.copy(currentPosition);
241
296
  (options === null || options === void 0 ? void 0 : options.onUpdate) && options.onUpdate({
242
297
  position: currentPosition,
243
298
  lookat: lookat
@@ -246,14 +301,14 @@ var Camera = /*#__PURE__*/function () {
246
301
  requestAnimationFrame(function () {
247
302
  (options === null || options === void 0 ? void 0 : options.onComplate) && options.onComplate();
248
303
  });
249
- _this3.controls.enabled = true;
304
+ _this4.controls.enabled = true;
250
305
  setTimeout(function () {
251
- _this3.isTransitionPeriod = false;
306
+ _this4.isTransitionPeriod = false;
252
307
  });
253
308
  }).start();
254
309
  }
255
310
  }]);
256
- return Camera;
257
- }();
258
- export default Camera;
311
+ return CameraUtil;
312
+ }(EventDispatcher);
313
+ export default CameraUtil;
259
314
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Box3","MathUtils","TWEEN","Vector3","Camera","camera","controls","sceneControl","_classCallCheck","_defineProperty","handleChanged","_createClass","key","value","caclCurrentPos","currentPos","pitch","box","setFromPoints","map","item","center","getCenter","size","getSize","halfDiagonal","length","maxDistance","Math","tan","fov","PI","cameraToCenterDistance","directionVector","position","clone","sub","target","normalize","lastPosition","multiplyScalar","add","lastLookat","caclTargetByPitch","subVectors","upVector","localPitchAxis","crossVectors","applyAxisAngle","degToRad","distance","distanceTo","newTarget","caclSingleCoordinate","prevTarget","prevPosition","lastTarget","focus","params","_this","Promise","res","duration","moveOptions","_ref","_params$isTrigger","isTrigger","onUpdate","_ref2","_params$isTrigger2","lookat","onComplate","_params$duration","toArray","userInput","Array","isArray","_this$caclCurrentPos","moveCameraTo","fromArray","set","_this2","_","_params$isTrigger3","_ref3","_ref4","_params$isTrigger4","_params$duration2","get","x","y","z","_this3","arguments","undefined","options","currentPoition","currentPositionInterpolation","copy","requestAnimationFrame","renderer","render","scene","tween","stop","Tween","t","p","to","rotation","onStart","enabled","isTransitionPeriod","easing","Easing","Quadratic","InOut","_ref5","rotationParent","currentPosition","lerpVectors","onComplete","setTimeout","start"],"sources":["../../src/camera/index.ts"],"sourcesContent":["import type { OrbitControls, PerspectiveCamera, SceneControl } from '@anov/3d-core'\nimport { Box3, MathUtils, TWEEN, Vector3 } from '@anov/3d-core'\n\ntype vector3Array = number[]\ninterface ChangeCameraPresetOptions {\n duration?: number\n onUpdate?: (params: { position: Vector3; lookat: Vector3 }) => void\n onStart?: () => void\n onComplate?: () => void\n isTrigger?: boolean\n}\n\nclass Camera {\n private camera: PerspectiveCamera\n private controls: OrbitControls\n private sceneControl: SceneControl\n private isTransitionPeriod = false\n private isTrigger = true\n private tween: any\n\n constructor(camera: PerspectiveCamera, controls: OrbitControls, sceneControl: SceneControl) {\n this.camera = sceneControl.camera!\n this.controls = sceneControl.controls!\n this.sceneControl = sceneControl\n\n this.handleChanged()\n }\n\n /**\n * caclCurrentPos\n * @param currentPos\n * @returns\n */\n private caclCurrentPos(currentPos: vector3Array[], pitch: number) {\n const box = new Box3()\n\n box.setFromPoints(currentPos.map(item => new Vector3(item[0], item[1], item[2])))\n\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n const halfDiagonal = size.length() * 0.5\n\n const maxDistance = halfDiagonal / Math.tan(this.camera.fov / 2 * Math.PI / 180)\n const cameraToCenterDistance = maxDistance\n const directionVector = (this.camera.position.clone()).sub(this.controls.target).normalize() // 相机指向物体中心的向量\n\n const lastPosition = directionVector.multiplyScalar(cameraToCenterDistance).add(center)\n const lastLookat = this.caclTargetByPitch(pitch, center, lastPosition)\n\n return {\n lastPosition,\n lastLookat,\n }\n }\n\n /**\n * caclTargetByPitch\n * @param pitch\n * @param target\n * @param position\n * @returns\n */\n private caclTargetByPitch(pitch: number, target: Vector3, position: Vector3) {\n const directionVector = new Vector3().subVectors(target, position)\n const upVector = new Vector3(0, 1, 0)\n const localPitchAxis = new Vector3().crossVectors(directionVector, upVector).normalize()\n\n directionVector.applyAxisAngle(localPitchAxis, MathUtils.degToRad(pitch))\n\n const distance = position.distanceTo(target)\n const newTarget = position.clone().add(directionVector.normalize().multiplyScalar(distance))\n\n return newTarget\n }\n\n /**\n * caclSingleCoordinate\n * @param prevTarget\n * @param prevPosition\n * @param lastTarget\n * @returns\n */\n private caclSingleCoordinate(prevTarget: Vector3, prevPosition: Vector3, lastTarget: Vector3) {\n const directionVector = lastTarget.clone().sub(prevTarget).normalize()\n return directionVector.multiplyScalar(lastTarget.distanceTo(prevTarget)).add(prevPosition)\n }\n\n /**\n * handle camera changed\n */\n private handleChanged() {\n // this.controls.addEventListener('change', () => {\n // // if (this.isTransitionPeriod)\n // // this.sceneControl.renderer!.render(this.sceneControl.scene!, this.sceneControl.camera!)\n // })\n }\n\n /**\n * focus On Position\n * @param params\n */\n focus(params: { target: vector3Array | vector3Array[]; pitch?: number; duration?: number; isTrigger?: boolean }) {\n return new Promise((res) => {\n const { target: position, pitch, duration } = params\n const moveOptions = () => ({\n duration: (duration && duration * 1000) ?? 1000,\n isTrigger: params.isTrigger ?? true,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n duration: params.duration ?? 0,\n userInput: true,\n pitch: pitch ?? 40,\n })\n },\n }) as ChangeCameraPresetOptions\n\n if (Array.isArray(position[0])) {\n const currentPos = position as vector3Array[]\n const { lastPosition, lastLookat } = this.caclCurrentPos(currentPos, 0)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n else {\n const currentPos = position as vector3Array\n const lastPosition = this.caclSingleCoordinate(this.controls.target, this.camera.position, new Vector3().fromArray(currentPos))\n const lastLookat = this.caclTargetByPitch(0, new Vector3().fromArray(currentPos), lastPosition)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n })\n }\n\n /**\n * set camera\n * @param params\n */\n set(params: { position: vector3Array; target: vector3Array; isTrigger?: boolean; duration?: number }) {\n return new Promise((res, _) => {\n this.moveCameraTo(\n new Vector3(params.position[0], params.position[1], params.position[2]),\n new Vector3(params.target[0], params.target[1], params.target[2]),\n 0,\n {\n isTrigger: params.isTrigger ?? true,\n duration: (params.duration && params.duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n isTrigger: true,\n duration: params.duration ?? 0,\n userInput: true,\n })\n },\n })\n })\n }\n\n /**\n * get Camera info\n * @returns\n */\n get() {\n return {\n position: [this.camera.position.x, this.camera.position.y, this.camera.position.z],\n target: [this.controls.target.x, this.controls.target.y, this.controls.target.z],\n }\n }\n\n /**\n * interpolation move camera\n * @param position\n * @param target\n * @param options\n */\n private moveCameraTo(position: Vector3, target: Vector3, pitch = 0, options?: ChangeCameraPresetOptions) {\n const currentPoition = this.camera.position.clone()\n const currentPositionInterpolation = new Vector3()\n\n if (options?.duration === 0) {\n this.isTrigger = !options.isTrigger\n this.camera.position.copy(position)\n this.controls.target.copy(target)\n\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n this.sceneControl.renderer!.render(this.sceneControl.scene!, this.sceneControl.camera!)\n })\n\n return\n }\n\n if (this.tween)\n this.tween.stop()\n\n this.tween = new TWEEN.Tween({ t: 0, lookat: this.controls.target.clone(), p: 0 }).to({ t: 1, lookat: target, p: (-this.camera.rotation.x + (pitch ? MathUtils.degToRad(-pitch) : 0)) }, options?.duration || 1000)\n .onStart(() => {\n options?.onStart && options.onStart()\n this.controls.enabled = false\n this.isTransitionPeriod = true\n })\n .easing(TWEEN.Easing.Quadratic.InOut)\n .onUpdate(({ t, lookat, p }) => {\n this.controls.target.copy(lookat)\n\n if (pitch)\n // @ts-ignore\n this.camera.rotationParent.x = p\n\n const currentPosition = currentPositionInterpolation.lerpVectors(currentPoition, position, t)\n this.camera.position.copy(currentPosition)\n options?.onUpdate && options.onUpdate({ position: currentPosition, lookat })\n })\n .onComplete(() => {\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n })\n\n this.controls.enabled = true\n\n setTimeout(() => {\n this.isTransitionPeriod = false\n })\n })\n .start()\n }\n}\n\nexport default Camera"],"mappings":"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"}
1
+ {"version":3,"names":["Box3","EventDispatcher","MathUtils","TWEEN","Vector3","CameraUtil","_EventDispatcher","_inherits","_super","_createSuper","camera","controls","sceneControl","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","addEventListener","dispatchEvent","type","position","target","_createClass","key","value","caclCurrentPos","currentPos","distance","box","setFromPoints","map","item","center","getCenter","size","getSize","halfDiagonal","length","maxDistance","Math","tan","fov","PI","cameraToCenterDistance","directionVector","clone","sub","normalize","lastPosition","multiplyScalar","add","lastLookat","caclTargetByPitch","pitch","subVectors","upVector","localPitchAxis","crossVectors","applyAxisAngle","degToRad","distanceTo","newTarget","caclSingleCoordinate","prevTarget","prevPosition","lastTarget","focus","params","_this2","Promise","res","_params$pitch","_params$yaw","yaw","duration","onUpdate","moveOptions","_ref","_params$isTrigger","isTrigger","_ref2","_params$isTrigger2","lookat","onComplate","_params$duration","toArray","userInput","Array","isArray","_this2$caclCurrentPos","motion","fromArray","set","_this3","_","_ref3","_ref4","_params$isTrigger3","_params$duration2","get","x","y","z","_this4","arguments","undefined","options","currentPoition","currentPositionInterpolation","copy","p","rotation","rotationParent","requestAnimationFrame","renderer","render","scene","tween","stop","Tween","t","to","onStart","enabled","isTransitionPeriod","easing","Easing","Quadratic","InOut","_ref5","currentPosition","lerpVectors","onComplete","setTimeout","start"],"sources":["../../src/camera/index.ts"],"sourcesContent":["import type { OrbitControls, PerspectiveCamera, SceneControl } from '@anov/3d-core'\nimport { Box3, EventDispatcher, MathUtils, TWEEN, Vector3 } from '@anov/3d-core'\n\ntype vector3Array = number[]\n\ninterface ChangeCameraPresetOptions {\n duration?: number\n onUpdate?: (params: { position: Vector3; lookat: Vector3 }) => void\n onStart?: () => void\n onComplate?: () => void\n isTrigger?: boolean\n}\n\nclass CameraUtil extends EventDispatcher {\n isTransitionPeriod = false\n isTrigger = true\n\n private camera: PerspectiveCamera\n private controls: OrbitControls\n private sceneControl: SceneControl\n private tween: any\n\n constructor(camera: PerspectiveCamera, controls: OrbitControls, sceneControl: SceneControl) {\n super()\n\n this.camera = camera\n this.controls = controls\n this.sceneControl = sceneControl\n\n this.controls.addEventListener('change', () => {\n this.dispatchEvent({\n type: 'change',\n position: this.camera.position,\n target: this.controls.target,\n })\n })\n }\n\n /**\n * calculate last position from position box\n * if distance is not defined, calculate distance from box size\n * @param currentPos\n * @param pitch\n * @returns\n */\n private caclCurrentPos(currentPos: vector3Array[], distance?: number) {\n const box = new Box3()\n\n box.setFromPoints(currentPos.map(item => new Vector3(item[0], item[1], item[2])))\n\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n const halfDiagonal = size.length() * 0.5\n\n const maxDistance = halfDiagonal / Math.tan(this.camera.fov / 2 * Math.PI / 180)\n const cameraToCenterDistance = maxDistance\n const directionVector = (this.camera.position.clone()).sub(this.controls.target).normalize()\n\n const lastPosition = directionVector.multiplyScalar(distance ?? cameraToCenterDistance).add(center)\n const lastLookat = center\n\n return {\n lastPosition,\n lastLookat,\n }\n }\n\n /**\n * get current camera pitch and yaw\n * @param pitch\n * @param target\n * @param position\n * @returns\n */\n private caclTargetByPitch(pitch: number, target: Vector3, position: Vector3) {\n const directionVector = new Vector3().subVectors(target, position)\n const upVector = new Vector3(0, 1, 0)\n const localPitchAxis = new Vector3().crossVectors(directionVector, upVector).normalize()\n\n directionVector.applyAxisAngle(localPitchAxis, MathUtils.degToRad(pitch))\n\n const distance = position.distanceTo(target)\n const newTarget = position.clone().add(directionVector.normalize().multiplyScalar(distance))\n\n return newTarget\n }\n\n /**\n * caclSingleCoordinate, when use focus and target is single point\n * @param prevTarget\n * @param prevPosition\n * @param lastTarget\n * @returns\n */\n private caclSingleCoordinate(prevTarget: Vector3, prevPosition: Vector3, lastTarget: Vector3) {\n const directionVector = lastTarget.clone().sub(prevTarget).normalize()\n return directionVector.multiplyScalar(lastTarget.distanceTo(prevTarget)).add(prevPosition)\n }\n\n /**\n * camera focus\n * @param params\n */\n focus(params: {\n target: vector3Array | vector3Array[] | string\n pitch?: number\n yaw?: number\n distance?: number // distance from target\n duration?: number\n isTrigger?: boolean\n onUpdate?: (args: { position: Vector3; target: Vector3 }) => void\n }) {\n return new Promise<\n {\n position: number[]\n target: number[]\n duration: number\n userInput: boolean\n pitch: number\n }\n >((res) => {\n const { target: position, pitch = 0, yaw = 0, distance, duration, onUpdate } = params\n\n const moveOptions = () => ({\n duration: (duration && duration * 1000) ?? 1000,\n isTrigger: params.isTrigger ?? true,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n onUpdate && onUpdate({ position, target: lookat })\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n duration: params.duration ?? 0,\n userInput: true,\n pitch: pitch ?? 40,\n })\n },\n }) as ChangeCameraPresetOptions\n\n // if target is multiple points\n if (Array.isArray(position[0])) {\n const currentPos = position as vector3Array[]\n const { lastPosition, lastLookat } = this.caclCurrentPos(currentPos, distance)\n\n this.motion(\n lastPosition,\n lastLookat,\n pitch,\n yaw,\n moveOptions(),\n )\n }\n // if target is single point\n else {\n const currentPos = position as vector3Array\n const lastPosition = this.caclSingleCoordinate(this.controls.target, this.camera.position, new Vector3().fromArray(currentPos))\n const lastLookat = new Vector3().fromArray(currentPos)\n\n this.motion(\n lastPosition,\n lastLookat,\n pitch,\n yaw,\n moveOptions(),\n )\n }\n })\n }\n\n /**\n * set camera\n * @param params\n */\n set(params: {\n position: vector3Array\n target: vector3Array\n isTrigger?: boolean\n duration?: number\n onUpdate?: (args: { position: Vector3; target: Vector3 }) => void\n }) {\n const { position, target, isTrigger, duration } = params\n\n return new Promise<{\n position: number[]\n target: number[]\n isTrigger: boolean\n duration: number\n userInput: boolean\n }>((res, _) => {\n this.motion(\n new Vector3(position[0], position[1], position[2]),\n new Vector3(target[0], target[1], target[2]),\n 0,\n 0,\n {\n isTrigger: isTrigger ?? true,\n duration: (duration && duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n params.onUpdate && params.onUpdate({ position, target: lookat })\n },\n onComplate: () => {\n this.isTrigger = false\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n isTrigger: true,\n duration: params.duration ?? 0,\n userInput: true,\n })\n },\n })\n })\n }\n\n /**\n * get camera position and target\n * @returns\n */\n get() {\n return {\n position: [this.camera.position.x, this.camera.position.y, this.camera.position.z],\n target: [this.controls.target.x, this.controls.target.y, this.controls.target.z],\n }\n }\n\n /**\n * interpolation move camera\n * @param position\n * @param target\n * @param options\n */\n private motion(position: Vector3, target: Vector3, pitch = 0, yaw = 0, options?: ChangeCameraPresetOptions) {\n const currentPoition = this.camera.position.clone()\n const currentPositionInterpolation = new Vector3()\n\n if (options?.duration === 0) {\n this.isTrigger = false\n this.camera.position.copy(position)\n this.controls.target.copy(target)\n\n if (pitch) {\n const p = -this.camera.rotation.x + (pitch ? MathUtils.degToRad(-pitch) : 0)\n\n // @ts-ignore\n // this.camera.rotationParent.x = p\n // @ts-ignore\n this.camera.rotationParent.x = MathUtils.degToRad(pitch)\n }\n\n if (yaw) {\n const y = -this.camera.rotation.y + (yaw ? MathUtils.degToRad(-yaw) : 0)\n\n // // @ts-ignore\n // this.camera.rotationParent.y = y\n\n // @ts-ignore\n this.camera.rotationParent.y = MathUtils.degToRad(yaw)\n }\n\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n this.sceneControl.renderer!.render(this.sceneControl.scene!, this.sceneControl.camera!)\n })\n\n return\n }\n\n if (this.tween)\n this.tween.stop()\n\n this.tween = new TWEEN.Tween(\n // @ts-ignore\n { t: 0, lookat: this.controls.target.clone(), p: this.camera.rotationParent.x, yaw: this.camera.rotationParent.y })\n // @ts-ignore\n .to({ t: 1, lookat: target, p: MathUtils.degToRad(pitch), y: MathUtils.degToRad(yaw) }, options?.duration || 1000)\n .onStart(() => {\n options?.onStart && options.onStart()\n this.controls.enabled = false\n this.isTransitionPeriod = true\n })\n .easing(TWEEN.Easing.Quadratic.InOut)\n .onUpdate(({ t, lookat, p }) => {\n this.controls.target.copy(lookat)\n\n if (pitch)\n // @ts-ignore\n this.camera.rotationParent.x = p\n\n if (yaw)\n // @ts-ignore\n this.camera.rotationParent.y = p\n\n const currentPosition = currentPositionInterpolation.lerpVectors(currentPoition, position, t)\n this.camera.position.copy(currentPosition)\n options?.onUpdate && options.onUpdate({ position: currentPosition, lookat })\n })\n .onComplete(() => {\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n })\n\n this.controls.enabled = true\n\n setTimeout(() => {\n this.isTransitionPeriod = false\n })\n })\n .start()\n }\n}\n\nexport default CameraUtil"],"mappings":"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"}
@@ -5,8 +5,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
5
5
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
6
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
7
7
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
- import { Mesh, Vector3 } from '@anov/3d-core';
9
- import { acceleratedRaycast } from "three-mesh-bvh/build/index.module.js";
8
+ import { Mesh, Vector3, acceleratedRaycast } from '@anov/3d-core';
10
9
  import { SPEED } from "../config/constants";
11
10
  Mesh.prototype.raycast = acceleratedRaycast;
12
11
  var Character_control = /*#__PURE__*/function () {
@@ -1 +1 @@
1
- {"version":3,"names":["Mesh","Vector3","acceleratedRaycast","SPEED","prototype","raycast","Character_control","_ref","scene","character","input","animation","characterRotateBox","camera","_classCallCheck","_defineProperty","allowSet","angle","currentPosition","forwardVector","getWorldDirection","y","normalize","_createClass","key","value","updateNewPosition","deltaT","_this$input$keys","keys","forward","backward","left","right","vectorUp","vectorRight","crossVectors","moveDirection","add","sub","moveVector","multiplyScalar","preventAction","position","update","default"],"sources":["../../../../../src/controls/src/ThirdViewControl/player/control.ts"],"sourcesContent":["import type { Object3D, OrbitControls, PerspectiveCamera, Scene } from '@anov/3d-core'\nimport { BufferGeometry, Mesh, Quaternion, Vector3 } from '@anov/3d-core'\nimport { MeshBVH, acceleratedRaycast } from 'three-mesh-bvh'\nimport { SPEED } from '../config/constants'\nimport type BasicCharacterControllerInput from '../action/input'\nimport type Character_animation from './animation'\n\nMesh.prototype.raycast = acceleratedRaycast\n\ninterface PropsType {\n scene: Scene\n character: Object3D\n characterRotateBox: Object3D\n input: BasicCharacterControllerInput\n animation: Character_animation\n camera: PerspectiveCamera\n}\n\nexport default class Character_control {\n input: BasicCharacterControllerInput\n character: Object3D\n control: OrbitControls | any\n currentPosition: Vector3\n camera: PerspectiveCamera\n isRoll: boolean | any\n isMove = false\n animation: Character_animation\n characterRotateBox: Object3D<THREE.Event>\n characterRotateAngle = {\n allowSet: true,\n angle: 1,\n }\n\n scene: Scene\n forwardVector: Vector3\n\n constructor({\n scene,\n character,\n input,\n animation,\n characterRotateBox,\n camera,\n }: PropsType) {\n this.input = input\n this.character = character\n this.characterRotateBox = characterRotateBox\n this.animation = animation\n this.scene = scene\n this.camera = camera\n\n this.currentPosition = new Vector3()\n this.forwardVector = new Vector3()\n this.character.getWorldDirection(this.forwardVector)\n this.forwardVector.y = 0\n this.forwardVector.normalize()\n }\n\n updateNewPosition(deltaT: number) {\n const { forward, backward, left, right } = this.input.keys\n\n // 获取当前角色的前向向量\n const forwardVector = new Vector3()\n this.characterRotateBox.getWorldDirection(forwardVector)\n forwardVector.y = 0\n forwardVector.normalize()\n\n const vectorUp = new Vector3(0, 1, 0)\n const vectorRight = new Vector3().crossVectors(vectorUp, forwardVector).normalize()\n\n const moveDirection = new Vector3()\n\n if (forward)\n moveDirection.add(forwardVector)\n if (backward)\n moveDirection.sub(forwardVector)\n if (left)\n moveDirection.add(vectorRight)\n if (right)\n moveDirection.sub(vectorRight)\n\n // 计算最终移动向量\n const moveVector = moveDirection.normalize().multiplyScalar(SPEED * deltaT)\n\n // 更新角色的位置\n if (!this.animation.preventAction)\n this.character.position.add(moveVector)\n }\n\n update(deltaT: number) {\n this.updateNewPosition(deltaT)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Mesh","Vector3","acceleratedRaycast","SPEED","prototype","raycast","Character_control","_ref","scene","character","input","animation","characterRotateBox","camera","_classCallCheck","_defineProperty","allowSet","angle","currentPosition","forwardVector","getWorldDirection","y","normalize","_createClass","key","value","updateNewPosition","deltaT","_this$input$keys","keys","forward","backward","left","right","vectorUp","vectorRight","crossVectors","moveDirection","add","sub","moveVector","multiplyScalar","preventAction","position","update","default"],"sources":["../../../../../src/controls/src/ThirdViewControl/player/control.ts"],"sourcesContent":["import type { Object3D, OrbitControls, PerspectiveCamera, Scene } from '@anov/3d-core'\nimport { BufferGeometry, Mesh, MeshBVH, Quaternion, Vector3, acceleratedRaycast } from '@anov/3d-core'\nimport { SPEED } from '../config/constants'\nimport type BasicCharacterControllerInput from '../action/input'\nimport type Character_animation from './animation'\n\nMesh.prototype.raycast = acceleratedRaycast\n\ninterface PropsType {\n scene: Scene\n character: Object3D\n characterRotateBox: Object3D\n input: BasicCharacterControllerInput\n animation: Character_animation\n camera: PerspectiveCamera\n}\n\nexport default class Character_control {\n input: BasicCharacterControllerInput\n character: Object3D\n control: OrbitControls | any\n currentPosition: Vector3\n camera: PerspectiveCamera\n isRoll: boolean | any\n isMove = false\n animation: Character_animation\n characterRotateBox: Object3D<THREE.Event>\n characterRotateAngle = {\n allowSet: true,\n angle: 1,\n }\n\n scene: Scene\n forwardVector: Vector3\n\n constructor({\n scene,\n character,\n input,\n animation,\n characterRotateBox,\n camera,\n }: PropsType) {\n this.input = input\n this.character = character\n this.characterRotateBox = characterRotateBox\n this.animation = animation\n this.scene = scene\n this.camera = camera\n\n this.currentPosition = new Vector3()\n this.forwardVector = new Vector3()\n this.character.getWorldDirection(this.forwardVector)\n this.forwardVector.y = 0\n this.forwardVector.normalize()\n }\n\n updateNewPosition(deltaT: number) {\n const { forward, backward, left, right } = this.input.keys\n\n // 获取当前角色的前向向量\n const forwardVector = new Vector3()\n this.characterRotateBox.getWorldDirection(forwardVector)\n forwardVector.y = 0\n forwardVector.normalize()\n\n const vectorUp = new Vector3(0, 1, 0)\n const vectorRight = new Vector3().crossVectors(vectorUp, forwardVector).normalize()\n\n const moveDirection = new Vector3()\n\n if (forward)\n moveDirection.add(forwardVector)\n if (backward)\n moveDirection.sub(forwardVector)\n if (left)\n moveDirection.add(vectorRight)\n if (right)\n moveDirection.sub(vectorRight)\n\n // 计算最终移动向量\n const moveVector = moveDirection.normalize().multiplyScalar(SPEED * deltaT)\n\n // 更新角色的位置\n if (!this.animation.preventAction)\n this.character.position.add(moveVector)\n }\n\n update(deltaT: number) {\n this.updateNewPosition(deltaT)\n }\n}\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@ import createVolumetricCloud from './environment/volumetricCloud/inex';
12
12
  import createSkyCloud from './environment/shaderCloud/index';
13
13
  import Snow from './environment/showShader';
14
14
  import Rain from './environment/rainShader';
15
- import { Css2DPoi, Css3DPoi, EAnimationType, Poi, SpritePoi, PlanePoi } from './poi';
15
+ import { Css2DPoi, Css3DPoi, EAnimationType, PlanePoi, Poi, SpritePoi } from './poi';
16
16
  import Line from './line/index';
17
17
  import HeatMap from './heatmap/index';
18
18
  import SkyBox from './environment/skyBox';
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@ import createVolumetricCloud from "./environment/volumetricCloud/inex";
12
12
  import createSkyCloud from "./environment/shaderCloud/index";
13
13
  import Snow from "./environment/showShader";
14
14
  import Rain from "./environment/rainShader";
15
- import { Css2DPoi, Css3DPoi, EAnimationType, Poi, SpritePoi, PlanePoi } from "./poi";
15
+ import { Css2DPoi, Css3DPoi, EAnimationType, PlanePoi, Poi, SpritePoi } from "./poi";
16
16
  import Line from "./line/index";
17
17
  import HeatMap from "./heatmap/index";
18
18
  import SkyBox from "./environment/skyBox";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["SceneControl","createSnow","createRain","initPostEffects","initPostEffectsV2","createHighSelectedTool","createSun","GridMaterial","ViewHelper","createSkySystem","createVolumetricCloud","createSkyCloud","Snow","Rain","Css2DPoi","Css3DPoi","EAnimationType","Poi","SpritePoi","PlanePoi","Line","HeatMap","SkyBox","Camera","RoundLineGeometry","createRoundLineWallMesh","Fog2DMesh","addColorifyPass","addSsaoPass","addBloom","addBrightnessContrastPass","addMappingExposurePass","createBloomSelectedTool","FakeGlowMaterial","Sky","Weather","FirstViewControl","ThirdViewControl","RenderType"],"sources":["../src/index.ts"],"sourcesContent":["import { SceneControl } from '@anov/3d-core'\nimport { createSnow } from './environment/snow'\nimport { createRain } from './environment/rain'\nimport { initPostEffects } from './postEffects'\nimport { initPostEffectsV2 } from './postEffects/postprocessing'\nimport createHighSelectedTool from './postEffects/outlinePass'\nimport { createSun } from './environment/sun'\nimport GridMaterial from './material/pristineGridMaterial'\nimport ViewHelper from './helper/view'\nimport createSkySystem from './environment/sky'\nimport createVolumetricCloud from './environment/volumetricCloud/inex'\nimport createSkyCloud from './environment/shaderCloud/index'\nimport Snow from './environment/showShader'\nimport Rain from './environment/rainShader'\nimport { Css2DPoi, Css3DPoi, EAnimationType, Poi, SpritePoi,PlanePoi } from './poi'\nimport Line from './line/index'\nimport HeatMap from './heatmap/index'\nimport SkyBox from './environment/skyBox'\nimport Camera from './camera/index'\nimport { RoundLineGeometry, createRoundLineWallMesh } from './line/round-curve'\nimport Fog2DMesh from './weather/objects/Fog2DMesh'\nimport addColorifyPass from './postEffects/colorifyPass'\nimport addSsaoPass from './postEffects/saoPass'\nimport addBloom from './postEffects/bloomPass'\nimport addBrightnessContrastPass from './postEffects/addBrightnessContrastPass'\nimport addMappingExposurePass from './postEffects/addACESFilmicToneMappingPass'\nimport createBloomSelectedTool from './postEffects/bloomSelect'\nimport FakeGlowMaterial from './material/fakeGlowMaterial'\nimport Sky from './environment/skyv2'\nimport Weather from './weather'\nimport { FirstViewControl, ThirdViewControl } from './controls/index'\nimport { RenderType } from './common/constant'\n\nexport * from './scene'\n\nexport {\n SceneControl, // todo remove\n createRain,\n createSnow,\n createSun,\n createSkySystem,\n createVolumetricCloud,\n createSkyCloud,\n Snow,\n Rain,\n SkyBox,\n Fog2DMesh,\n Sky,\n Weather,\n\n Css2DPoi,\n Css3DPoi,\n SpritePoi,\n PlanePoi,\n Poi,\n EAnimationType,\n RenderType,\n Line,\n HeatMap,\n\n FakeGlowMaterial,\n GridMaterial,\n\n initPostEffects, // effect\n initPostEffectsV2,\n createHighSelectedTool,\n addColorifyPass,\n addSsaoPass,\n addBloom,\n addBrightnessContrastPass,\n addMappingExposurePass,\n createBloomSelectedTool,\n\n ViewHelper,\n Camera,\n\n RoundLineGeometry,\n createRoundLineWallMesh,\n\n FirstViewControl,\n ThirdViewControl,\n}\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,eAAe;AAC5C,SAASC,UAAU;AACnB,SAASC,UAAU;AACnB,SAASC,eAAe;AACxB,SAASC,iBAAiB;AAC1B,OAAOC,sBAAsB;AAC7B,SAASC,SAAS;AAClB,OAAOC,YAAY;AACnB,OAAOC,UAAU;AACjB,OAAOC,eAAe;AACtB,OAAOC,qBAAqB;AAC5B,OAAOC,cAAc;AACrB,OAAOC,IAAI;AACX,OAAOC,IAAI;AACX,SAASC,QAAQ,EAAEC,QAAQ,EAAEC,cAAc,EAAEC,GAAG,EAAEC,SAAS,EAACC,QAAQ;AACpE,OAAOC,IAAI;AACX,OAAOC,OAAO;AACd,OAAOC,MAAM;AACb,OAAOC,MAAM;AACb,SAASC,iBAAiB,EAAEC,uBAAuB;AACnD,OAAOC,SAAS;AAChB,OAAOC,eAAe;AACtB,OAAOC,WAAW;AAClB,OAAOC,QAAQ;AACf,OAAOC,yBAAyB;AAChC,OAAOC,sBAAsB;AAC7B,OAAOC,uBAAuB;AAC9B,OAAOC,gBAAgB;AACvB,OAAOC,GAAG;AACV,OAAOC,OAAO;AACd,SAASC,gBAAgB,EAAEC,gBAAgB;AAC3C,SAASC,UAAU;AAEnB;AAEA,SACEtC,YAAY;AAAE;AACdE,UAAU,EACVD,UAAU,EACVK,SAAS,EACTG,eAAe,EACfC,qBAAqB,EACrBC,cAAc,EACdC,IAAI,EACJC,IAAI,EACJS,MAAM,EACNI,SAAS,EACTQ,GAAG,EACHC,OAAO,EAEPrB,QAAQ,EACRC,QAAQ,EACRG,SAAS,EACTC,QAAQ,EACRF,GAAG,EACHD,cAAc,EACdsB,UAAU,EACVlB,IAAI,EACJC,OAAO,EAEPY,gBAAgB,EAChB1B,YAAY,EAEZJ,eAAe;AAAE;AACjBC,iBAAiB,EACjBC,sBAAsB,EACtBsB,eAAe,EACfC,WAAW,EACXC,QAAQ,EACRC,yBAAyB,EACzBC,sBAAsB,EACtBC,uBAAuB,EAEvBxB,UAAU,EACVe,MAAM,EAENC,iBAAiB,EACjBC,uBAAuB,EAEvBW,gBAAgB,EAChBC,gBAAgB"}
1
+ {"version":3,"names":["SceneControl","createSnow","createRain","initPostEffects","initPostEffectsV2","createHighSelectedTool","createSun","GridMaterial","ViewHelper","createSkySystem","createVolumetricCloud","createSkyCloud","Snow","Rain","Css2DPoi","Css3DPoi","EAnimationType","PlanePoi","Poi","SpritePoi","Line","HeatMap","SkyBox","Camera","RoundLineGeometry","createRoundLineWallMesh","Fog2DMesh","addColorifyPass","addSsaoPass","addBloom","addBrightnessContrastPass","addMappingExposurePass","createBloomSelectedTool","FakeGlowMaterial","Sky","Weather","FirstViewControl","ThirdViewControl","RenderType"],"sources":["../src/index.ts"],"sourcesContent":["import { SceneControl } from '@anov/3d-core'\nimport { createSnow } from './environment/snow'\nimport { createRain } from './environment/rain'\nimport { initPostEffects } from './postEffects'\nimport { initPostEffectsV2 } from './postEffects/postprocessing'\nimport createHighSelectedTool from './postEffects/outlinePass'\nimport { createSun } from './environment/sun'\nimport GridMaterial from './material/pristineGridMaterial'\nimport ViewHelper from './helper/view'\nimport createSkySystem from './environment/sky'\nimport createVolumetricCloud from './environment/volumetricCloud/inex'\nimport createSkyCloud from './environment/shaderCloud/index'\nimport Snow from './environment/showShader'\nimport Rain from './environment/rainShader'\nimport { Css2DPoi, Css3DPoi, EAnimationType, PlanePoi, Poi, SpritePoi } from './poi'\nimport Line from './line/index'\nimport HeatMap from './heatmap/index'\nimport SkyBox from './environment/skyBox'\nimport Camera from './camera/index'\nimport { RoundLineGeometry, createRoundLineWallMesh } from './line/round-curve'\nimport Fog2DMesh from './weather/objects/Fog2DMesh'\nimport addColorifyPass from './postEffects/colorifyPass'\nimport addSsaoPass from './postEffects/saoPass'\nimport addBloom from './postEffects/bloomPass'\nimport addBrightnessContrastPass from './postEffects/addBrightnessContrastPass'\nimport addMappingExposurePass from './postEffects/addACESFilmicToneMappingPass'\nimport createBloomSelectedTool from './postEffects/bloomSelect'\nimport FakeGlowMaterial from './material/fakeGlowMaterial'\nimport Sky from './environment/skyv2'\nimport Weather from './weather'\nimport { FirstViewControl, ThirdViewControl } from './controls/index'\nimport { RenderType } from './common/constant'\n\nexport * from './scene'\n\nexport {\n SceneControl, // todo remove\n createRain,\n createSnow,\n createSun,\n createSkySystem,\n createVolumetricCloud,\n createSkyCloud,\n Snow,\n Rain,\n SkyBox,\n Fog2DMesh,\n Sky,\n Weather,\n\n Css2DPoi,\n Css3DPoi,\n SpritePoi,\n PlanePoi,\n Poi,\n EAnimationType,\n RenderType,\n Line,\n HeatMap,\n\n FakeGlowMaterial,\n GridMaterial,\n\n initPostEffects, // effect\n initPostEffectsV2,\n createHighSelectedTool,\n addColorifyPass,\n addSsaoPass,\n addBloom,\n addBrightnessContrastPass,\n addMappingExposurePass,\n createBloomSelectedTool,\n\n ViewHelper,\n Camera,\n\n RoundLineGeometry,\n createRoundLineWallMesh,\n\n FirstViewControl,\n ThirdViewControl,\n}\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,eAAe;AAC5C,SAASC,UAAU;AACnB,SAASC,UAAU;AACnB,SAASC,eAAe;AACxB,SAASC,iBAAiB;AAC1B,OAAOC,sBAAsB;AAC7B,SAASC,SAAS;AAClB,OAAOC,YAAY;AACnB,OAAOC,UAAU;AACjB,OAAOC,eAAe;AACtB,OAAOC,qBAAqB;AAC5B,OAAOC,cAAc;AACrB,OAAOC,IAAI;AACX,OAAOC,IAAI;AACX,SAASC,QAAQ,EAAEC,QAAQ,EAAEC,cAAc,EAAEC,QAAQ,EAAEC,GAAG,EAAEC,SAAS;AACrE,OAAOC,IAAI;AACX,OAAOC,OAAO;AACd,OAAOC,MAAM;AACb,OAAOC,MAAM;AACb,SAASC,iBAAiB,EAAEC,uBAAuB;AACnD,OAAOC,SAAS;AAChB,OAAOC,eAAe;AACtB,OAAOC,WAAW;AAClB,OAAOC,QAAQ;AACf,OAAOC,yBAAyB;AAChC,OAAOC,sBAAsB;AAC7B,OAAOC,uBAAuB;AAC9B,OAAOC,gBAAgB;AACvB,OAAOC,GAAG;AACV,OAAOC,OAAO;AACd,SAASC,gBAAgB,EAAEC,gBAAgB;AAC3C,SAASC,UAAU;AAEnB;AAEA,SACEtC,YAAY;AAAE;AACdE,UAAU,EACVD,UAAU,EACVK,SAAS,EACTG,eAAe,EACfC,qBAAqB,EACrBC,cAAc,EACdC,IAAI,EACJC,IAAI,EACJS,MAAM,EACNI,SAAS,EACTQ,GAAG,EACHC,OAAO,EAEPrB,QAAQ,EACRC,QAAQ,EACRI,SAAS,EACTF,QAAQ,EACRC,GAAG,EACHF,cAAc,EACdsB,UAAU,EACVlB,IAAI,EACJC,OAAO,EAEPY,gBAAgB,EAChB1B,YAAY,EAEZJ,eAAe;AAAE;AACjBC,iBAAiB,EACjBC,sBAAsB,EACtBsB,eAAe,EACfC,WAAW,EACXC,QAAQ,EACRC,yBAAyB,EACzBC,sBAAsB,EACtBC,uBAAuB,EAEvBxB,UAAU,EACVe,MAAM,EAENC,iBAAiB,EACjBC,uBAAuB,EAEvBW,gBAAgB,EAChBC,gBAAgB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anov/3d-ability",
3
- "version": "0.0.33",
3
+ "version": "0.0.37",
4
4
  "description": "",
5
5
  "author": "",
6
6
  "license": "MIT",
@@ -16,7 +16,7 @@
16
16
  "package.json"
17
17
  ],
18
18
  "peerDependencies": {
19
- "@anov/3d-core": "^0.0.30"
19
+ "@anov/3d-core": "^0.0.34"
20
20
  },
21
21
  "dependencies": {
22
22
  "@types/suncalc": "^1.9.2",
@@ -25,11 +25,11 @@
25
25
  "javascript-state-machine": "^3.1.0",
26
26
  "postprocessing": "^6.33.3",
27
27
  "suncalc": "^1.9.0",
28
- "three-mesh-bvh": "^0.7.5"
28
+ "rxjs": "7.8.1"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/javascript-state-machine": "^2.4.6",
32
- "@anov/3d-core": "^0.0.30"
32
+ "@anov/3d-core": "^0.0.34"
33
33
  },
34
34
  "scripts": {
35
35
  "build": "father build",