squidGame/tgx-games-client/assets/level1/Script/WoodenManUI.ts

88 lines
2.4 KiB
TypeScript

import { _decorator, Component, Node, Label, Button } from 'cc';
import { WoodenManGame, GamePhase } from './WoodenManGame';
const { ccclass, property } = _decorator;
@ccclass('WoodenManUI')
export class WoodenManUI extends Component {
@property(WoodenManGame)
game: WoodenManGame | null = null;
@property(Label)
roundLabel: Label | null = null;
@property(Label)
timerLabel: Label | null = null;
@property(Node)
stepButtons: Node | null = null;
@property(Label)
statusLabel: Label | null = null;
@property(Label)
dollStateLabel: Label = null; // 木头人状态提示
private localPlayerId = 0; // 本地玩家ID
start() {
this.initUI();
}
private initUI() {
// 初始化步数选择按钮
if (this.stepButtons) {
for (let i = 1; i <= 6; i++) {
const button = this.stepButtons.getChildByName(`Step${i}`)?.getComponent(Button);
if (button) {
button.node.on('click', () => this.onStepSelected(i));
}
}
}
}
update() {
if (!this.game) return;
const gameState = this.game.getGameState();
// 更新回合显示
if (this.roundLabel) {
this.roundLabel.string = `Round: ${gameState.currentRound}/15`;
}
// 更新计时器
if (this.timerLabel) {
this.timerLabel.string = `Time: ${Math.ceil(gameState.remainingTime)}s`;
}
// 更新状态文本
if (this.statusLabel) {
const player = gameState.players.find(p => p.id === this.localPlayerId);
if (player) {
this.statusLabel.string = `Position: ${player.position}m\nState: ${this.getStateText(player.state)}`;
}
}
// 更新木头人状态
if (this.game.getCurrentPhase() === GamePhase.MOVING) {
this.dollStateLabel.string = "木头人转身了!";
} else {
this.dollStateLabel.string = "123木头人...";
}
}
private getStateText(state: number): string {
switch (state) {
case 0: return 'Alive';
case 1: return 'Dead';
case 2: return 'Qualified';
default: return 'Unknown';
}
}
private onStepSelected(steps: number) {
if (this.game) {
this.game.playerChooseSteps(this.localPlayerId, steps);
}
}
}