feat: add game director
parent
9a42d59c30
commit
a29e6b62af
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
||||||
|
{"ver":"1.1.43","importer":"scene","imported":true,"uuid":"aa17106a-0b45-4280-a91c-9650d0c417b3","files":[".json"],"subMetas":{},"userData":{}}
|
|
@ -0,0 +1,126 @@
|
||||||
|
import {
|
||||||
|
Node,
|
||||||
|
AnimationState,
|
||||||
|
director,
|
||||||
|
TweenSystem,
|
||||||
|
PhysicsSystem2D,
|
||||||
|
PhysicsSystem,
|
||||||
|
AnimationManager,
|
||||||
|
Animation,
|
||||||
|
} from 'cc';
|
||||||
|
|
||||||
|
export class pauseConfig {
|
||||||
|
exclude?: Node[];
|
||||||
|
recuExclude?: Node[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class GameDirector {
|
||||||
|
public static pauseData = new (class {
|
||||||
|
state = false;
|
||||||
|
physics2D: boolean;
|
||||||
|
physics3D: boolean;
|
||||||
|
scheduler: any[];
|
||||||
|
anim: AnimationState[] = [];
|
||||||
|
tweenTarget: any[];
|
||||||
|
})();
|
||||||
|
|
||||||
|
private static recuNodeList(node: Node, result: Node[] = []): Node[] {
|
||||||
|
if (!node) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
result.push(node);
|
||||||
|
node.children.forEach((v1) => {
|
||||||
|
result.push(v1);
|
||||||
|
this.recuNodeList(v1);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static pause(config?: pauseConfig): void {
|
||||||
|
if (GameDirector.pauseData.state) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GameDirector.pauseData.scheduler = director.getScheduler().pauseAllTargets();
|
||||||
|
|
||||||
|
let animSystem = director.getSystem(AnimationManager.ID);
|
||||||
|
GameDirector.pauseData.anim.splice(0, GameDirector.pauseData.anim.length, ...animSystem['_anims'].array);
|
||||||
|
GameDirector.pauseData.anim.forEach((v1) => {
|
||||||
|
v1.pause();
|
||||||
|
});
|
||||||
|
|
||||||
|
GameDirector.pauseData.tweenTarget = TweenSystem.instance.ActionManager.pauseAllRunningActions();
|
||||||
|
{
|
||||||
|
if (PhysicsSystem2D && PhysicsSystem2D.instance.enable) {
|
||||||
|
GameDirector.pauseData.physics2D = PhysicsSystem2D.instance.enable;
|
||||||
|
PhysicsSystem2D.instance.enable = false;
|
||||||
|
}
|
||||||
|
if (PhysicsSystem && PhysicsSystem.instance.enable) {
|
||||||
|
GameDirector.pauseData.physics3D = PhysicsSystem.instance.enable;
|
||||||
|
PhysicsSystem.instance.enable = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config) {
|
||||||
|
let exclude: Node[] = [];
|
||||||
|
exclude.push(...config.exclude);
|
||||||
|
config.recuExclude?.forEach((v1) => {
|
||||||
|
exclude.push(...GameDirector.recuNodeList(v1));
|
||||||
|
});
|
||||||
|
exclude.forEach((v1) => {
|
||||||
|
GameDirector.resumeNode(v1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
GameDirector.pauseData.state = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static resume(): void {
|
||||||
|
director.getScheduler().resumeTargets(GameDirector.pauseData.scheduler);
|
||||||
|
GameDirector.pauseData.anim.forEach((v1) => {
|
||||||
|
if (v1.isPlaying && v1.isPaused) {
|
||||||
|
v1.play();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
TweenSystem.instance.ActionManager.resumeTargets(GameDirector.pauseData.tweenTarget);
|
||||||
|
if (GameDirector.pauseData.physics2D) {
|
||||||
|
PhysicsSystem2D.instance.enable = GameDirector.pauseData.physics2D;
|
||||||
|
}
|
||||||
|
if (GameDirector.pauseData.physics3D) {
|
||||||
|
PhysicsSystem.instance.enable = GameDirector.pauseData.physics3D;
|
||||||
|
}
|
||||||
|
GameDirector.pauseData.state = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static pauseNode(node: Node): void;
|
||||||
|
public static pauseNode(node: Node[]): void;
|
||||||
|
public static pauseNode(args: Node | Node[]): void {
|
||||||
|
let node: Node[];
|
||||||
|
if (Array.isArray(args)) {
|
||||||
|
node = args;
|
||||||
|
} else {
|
||||||
|
node = [args];
|
||||||
|
}
|
||||||
|
node.forEach((v1) => {
|
||||||
|
director.getScheduler().pauseTarget(v1);
|
||||||
|
v1.getComponent(Animation)?.pause();
|
||||||
|
TweenSystem.instance.ActionManager.pauseTarget(v1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static resumeNode(node: Node): void;
|
||||||
|
public static resumeNode(node: Node[]): void;
|
||||||
|
public static resumeNode(args: Node | Node[]): void {
|
||||||
|
let node: Node[];
|
||||||
|
if (Array.isArray(args)) {
|
||||||
|
node = args;
|
||||||
|
} else {
|
||||||
|
node = [args];
|
||||||
|
}
|
||||||
|
node.forEach((v1) => {
|
||||||
|
director.getScheduler().resumeTarget(v1);
|
||||||
|
v1.getComponent(Animation)?.resume();
|
||||||
|
TweenSystem.instance.ActionManager.resumeTarget(v1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"ver": "4.0.23",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "bc911ddc-f6b6-45ed-bdf9-ae20f48dfd80",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
|
@ -126,12 +126,8 @@ export class GameOverPanel extends Component {
|
||||||
const obj = this._pool.get(this._scoreUI);
|
const obj = this._pool.get(this._scoreUI);
|
||||||
obj.setWorldPosition(this._scoreUI.worldPosition);
|
obj.setWorldPosition(this._scoreUI.worldPosition);
|
||||||
tween(obj)
|
tween(obj)
|
||||||
.to(randomRange(0.2, 0.3), { worldPosition: target }, { easing: 'sineIn' })
|
.to(0.3, { worldPosition: target }, { easing: 'sineIn' })
|
||||||
.call(() => this._pool.release(obj))
|
.call(() => this._pool.release(obj))
|
||||||
.call(() => {
|
|
||||||
Tween.stopAllByTarget(this.yourScore);
|
|
||||||
tween(this.yourScore.node)
|
|
||||||
.to(0.1, { scale: new Vec3(1.3, 1.3, 1.3) })
|
|
||||||
.call(async () => {
|
.call(async () => {
|
||||||
if (i == items - 1) {
|
if (i == items - 1) {
|
||||||
this.yourScore.string = totalScore.toString();
|
this.yourScore.string = totalScore.toString();
|
||||||
|
@ -143,9 +139,6 @@ export class GameOverPanel extends Component {
|
||||||
this.yourScore.string = score.toString();
|
this.yourScore.string = score.toString();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.set({ scale: Vec3.ONE })
|
|
||||||
.start();
|
|
||||||
})
|
|
||||||
.start();
|
.start();
|
||||||
SoundManager.instance.playSfx(this._soundCollectCoinFx);
|
SoundManager.instance.playSfx(this._soundCollectCoinFx);
|
||||||
await Utilities.delay(time);
|
await Utilities.delay(time);
|
||||||
|
|
Loading…
Reference in New Issue