53 lines
1.8 KiB
TypeScript
53 lines
1.8 KiB
TypeScript
import { _decorator, Collider2D, Component, Contact2DType, Node } from "cc";
|
||
import { GlobalData } from "../config/GlobalData";
|
||
import { GameState } from "../config/Config";
|
||
import { NoteControl } from "./NoteControl";
|
||
import { EventDispatcher } from "../libs/EventDispatcher";
|
||
const { ccclass, property } = _decorator;
|
||
|
||
@ccclass("LineControl")
|
||
export class LineControl extends Component {
|
||
start() {
|
||
// 监听碰撞事件
|
||
this.node
|
||
.getComponent(Collider2D)
|
||
.on(Contact2DType.BEGIN_CONTACT, this.onCollisionEnter, this);
|
||
}
|
||
|
||
onCollisionEnter(selfCollider: Collider2D, otherCollider: Collider2D) {
|
||
// 如果游戏状态不是进行中,直接返回
|
||
if (GlobalData.gameState != GameState.PLAYING) {
|
||
return;
|
||
}
|
||
|
||
if (otherCollider.tag == 2) {
|
||
// 1. 剩余生命值减 1
|
||
GlobalData.lifeNumPerRound--;
|
||
|
||
// 2. 剩余生命值是否大于等于0
|
||
if (GlobalData.lifeNumPerRound >= 0) {
|
||
// 触发音符碰到线事件
|
||
EventDispatcher.getTarget().emit(EventDispatcher.UPDATE_LIFE);
|
||
}
|
||
// 3. 如果小于0,游戏结束
|
||
if (GlobalData.lifeNumPerRound < 0) {
|
||
GlobalData.gameState = GameState.GAME_OVER;
|
||
// 调用 NoteControl 中的 pause 方法暂停音符
|
||
otherCollider.getComponent(NoteControl).noteHitLine();
|
||
// 发送游戏结束事件
|
||
EventDispatcher.getTarget().emit(EventDispatcher.GAME_OVER);
|
||
} else {
|
||
GlobalData.gameState = GameState.PAUSED;
|
||
otherCollider.getComponent(NoteControl).noteHitLine();
|
||
// 发送暂停事件
|
||
EventDispatcher.getTarget().emit(EventDispatcher.GAME_PAUSE);
|
||
}
|
||
// 4. 如果剩余生命值大于等于0,继续游戏(弹出暂停界面)
|
||
|
||
// 线碰到了音符
|
||
}
|
||
}
|
||
|
||
update(deltaTime: number) {}
|
||
}
|