Skip to content

Commit 6d5781d

Browse files
authored
Align wander startup state with Creator (cocos#845)
1 parent 217ac79 commit 6d5781d

4 files changed

Lines changed: 29 additions & 52 deletions

File tree

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Service } from '../../core/decorator';
2+
import { NeedAnimState } from '../../engine';
3+
4+
export function enterCameraState(state: NeedAnimState) {
5+
try {
6+
(Service.Engine as any)?.enterState?.(state);
7+
} catch (e) {
8+
// Engine may not be ready
9+
}
10+
}
11+
12+
export function exitCameraState(state: NeedAnimState) {
13+
try {
14+
(Service.Engine as any)?.exitState?.(state);
15+
} catch (e) {
16+
// Engine may not be ready
17+
}
18+
}
19+
20+
export { NeedAnimState };

src/core/scene/scene-process/service/camera/modes/orbit-mode.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import ModeBase3D from './mode-base-3d';
33
import { CameraMoveMode } from '../utils';
44
import type { ISceneMouseEvent } from '../../operation/types';
55
import type { CameraController3D } from '../camera-controller-3d';
6+
import { enterCameraState, exitCameraState, NeedAnimState } from './engine-state';
67

78
class OrbitMode extends ModeBase3D {
89
private _rotateSpeed = 0.006;
@@ -17,21 +18,11 @@ class OrbitMode extends ModeBase3D {
1718
node.getWorldRotation(this._curRot);
1819
this._cameraCtrl.viewDist = Vec3.distance(this._curPos, this._cameraCtrl.sceneViewCenter);
1920
this._cameraCtrl.emit('camera-move-mode', CameraMoveMode.ORBIT);
20-
try {
21-
const { Service } = require('../../core/decorator');
22-
Service.Engine?.repaintInEditMode?.();
23-
} catch (e) {
24-
// Engine may not be ready
25-
}
21+
enterCameraState(NeedAnimState.CAMERA_ORBIT);
2622
}
2723

2824
public async exit() {
29-
try {
30-
const { Service } = require('../../core/decorator');
31-
Service.Engine?.repaintInEditMode?.();
32-
} catch (e) {
33-
// Engine may not be ready
34-
}
25+
exitCameraState(NeedAnimState.CAMERA_ORBIT);
3526
}
3627

3728
onMouseDown(event: ISceneMouseEvent): boolean {

src/core/scene/scene-process/service/camera/modes/pan-mode.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import ModeBase3D from './mode-base-3d';
33
import { CameraMoveMode } from '../utils';
44
import type { ISceneMouseEvent } from '../../operation/types';
55
import type { CameraController3D } from '../camera-controller-3d';
6+
import { enterCameraState, exitCameraState, NeedAnimState } from './engine-state';
67

78
const v3a = new Vec3();
89
const v3b = new Vec3();
@@ -26,22 +27,12 @@ class PanMode extends ModeBase3D {
2627
Vec3.normalize(this._up, this._up);
2728

2829
this._cameraCtrl.emit('camera-move-mode', CameraMoveMode.PAN);
29-
try {
30-
const { Service } = require('../../core/decorator');
31-
Service.Engine?.repaintInEditMode?.();
32-
} catch (e) {
33-
// Engine may not be ready
34-
}
30+
enterCameraState(NeedAnimState.CAMERA_PAN);
3531
}
3632

3733
public async exit() {
3834
this._cameraCtrl.updateViewCenterByDist(-this._cameraCtrl.viewDist);
39-
try {
40-
const { Service } = require('../../core/decorator');
41-
Service.Engine?.repaintInEditMode?.();
42-
} catch (e) {
43-
// Engine may not be ready
44-
}
35+
exitCameraState(NeedAnimState.CAMERA_PAN);
4536
}
4637

4738
onMouseMove(event: ISceneMouseEvent): boolean {

src/core/scene/scene-process/service/camera/modes/wander-mode.ts

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { CameraMoveMode, CameraUtils } from '../utils';
44
import { AnimVec3 } from '../animate-value';
55
import type { ISceneMouseEvent, ISceneKeyboardEvent } from '../../operation/types';
66
import type { CameraController3D } from '../camera-controller-3d';
7+
import { enterCameraState, exitCameraState, NeedAnimState } from './engine-state';
78

89
const v3b = new Vec3();
910
const v3c = new Vec3();
@@ -80,10 +81,6 @@ class WanderMode extends ModeBase3D {
8081

8182
this._curMouseDX = 0;
8283
this._curMouseDY = 0;
83-
this._wanderKeyDown = false;
84-
this._shiftKey = false;
85-
this._wanderSpeedTarget = 0;
86-
this._wanderAnim.value = new Vec3();
8784

8885
try {
8986
const { Service } = require('../../core/decorator');
@@ -94,13 +91,7 @@ class WanderMode extends ModeBase3D {
9491

9592
this._cameraCtrl.emit('camera-move-mode', CameraMoveMode.WANDER);
9693
CameraUtils.showWanderTip();
97-
98-
try {
99-
const { Service } = require('../../core/decorator');
100-
Service.Engine?.repaintInEditMode?.();
101-
} catch (e) {
102-
// Engine may not be ready
103-
}
94+
enterCameraState(NeedAnimState.CAMERA_WANDER);
10495
}
10596

10697
public async exit() {
@@ -113,14 +104,8 @@ class WanderMode extends ModeBase3D {
113104
}
114105

115106
this._cameraCtrl.updateViewCenterByDist(-this._cameraCtrl.viewDist);
107+
exitCameraState(NeedAnimState.CAMERA_WANDER);
116108
this._velocity.set(0, 0, 0);
117-
118-
try {
119-
const { Service } = require('../../core/decorator');
120-
Service.Engine?.repaintInEditMode?.();
121-
} catch (e) {
122-
// Engine may not be ready
123-
}
124109
}
125110

126111
onMouseMove(event: ISceneMouseEvent): boolean {
@@ -255,16 +240,6 @@ class WanderMode extends ModeBase3D {
255240
Vec3.add(eye, eye, v3d);
256241
Vec3.lerp(this._curPos, this._curPos, eye, this._damping);
257242

258-
// CLI-specific: request repaint since we don't have enterState/exitState
259-
if (this._wanderKeyDown || this._curMouseDX !== 0 || this._curMouseDY !== 0) {
260-
try {
261-
const { Service } = require('../../core/decorator');
262-
Service.Engine?.repaintInEditMode?.();
263-
} catch (e) {
264-
// Engine may not be ready
265-
}
266-
}
267-
268243
this._cameraCtrl.node.setPosition(this._curPos);
269244
this._cameraCtrl.node.setRotation(this._curRot);
270245
this._curMouseDX = 0;

0 commit comments

Comments
 (0)