59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
// assets/scripts/GameManager.ts
|
|
import { _decorator, Component, Node, Label, Vec3 } from "cc";
|
|
import { BallPhysics } from "./BallPhysics";
|
|
// import { CameraRig } from "./CameraRig";
|
|
const { ccclass, property } = _decorator;
|
|
|
|
@ccclass("GameManager")
|
|
export class GameManager extends Component {
|
|
@property(Node) ball!: Node;
|
|
// @property(Node) cameraRig!: Node;
|
|
// @property(Label) scoreLabel!: Label;
|
|
// @property(Label) windLabel!: Label;
|
|
|
|
private score = 0;
|
|
private ballPhys!: BallPhysics;
|
|
// private cam!: CameraRig;
|
|
|
|
onLoad() {
|
|
this.ballPhys = this.ball.getComponent(BallPhysics)!;
|
|
this.ballPhys.init();
|
|
// this.cam = this.cameraRig.getComponent(CameraRig)!;
|
|
|
|
// 监听进球
|
|
this.node.on("GOAL", this.onGoal, this);
|
|
|
|
this.newRound();
|
|
}
|
|
|
|
onGoal() {
|
|
this.score += 1;
|
|
this.updateScore();
|
|
this.scheduleOnce(() => {
|
|
this.newRound();
|
|
}, 1.0);
|
|
}
|
|
|
|
private updateScore() {
|
|
// if (this.scoreLabel) this.scoreLabel.string = `${this.score}`;
|
|
}
|
|
|
|
private newRound() {
|
|
// 重置球与镜头
|
|
this.ballPhys.resetBall();
|
|
// this.cam.setModeStatic();
|
|
|
|
// 随机风
|
|
// const dir = new Vec3(Math.random() - 0.5, 0, Math.random() - 0.5);
|
|
// const strength = 4 * Math.random(); // 0~4
|
|
// this.ballPhys.setWind(dir, strength);
|
|
// if (this.windLabel) {
|
|
// const a = (Math.atan2(dir.x, dir.z) * 180) / Math.PI; // 粗略角度显示
|
|
// this.windLabel.string = `Wind ${strength.toFixed(1)} @ ${a.toFixed(0)}°`;
|
|
// }
|
|
|
|
// 几百毫秒后把镜头切为跟随(等玩家射门后也可在 KickInput 里触发)
|
|
// this.scheduleOnce(() => this.cam.setModeFollow(), 0.6);
|
|
}
|
|
}
|