first commmit
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
import { _decorator, Component, director, Label, Node, Color } from 'cc';
|
||||
import { ChapterSettlement, ISettlementStats } from '../logic/ChapterSettlement';
|
||||
import { ensureCanvasSize, createLabel, createButton } from './MainMenuEntry';
|
||||
import { DESIGN_HEIGHT } from '../common/Constants';
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
/**
|
||||
* Settlement scene entry (task 8.2 hookup, req 14.x).
|
||||
*
|
||||
* Attach to the root of `Settlement.scene`. All UI is auto-built by default
|
||||
* (title, score, closing line, back-to-menu button). If `autoBuildUI` is
|
||||
* disabled and you wire up `scoreLabelNode` / `closingLabelNode` manually,
|
||||
* those wins.
|
||||
*/
|
||||
@ccclass('SettlementEntry')
|
||||
export class SettlementEntry extends Component {
|
||||
@property({ type: Node, tooltip: '得分 Label 节点 (可留空自动创建)' })
|
||||
public scoreLabelNode: Node | null = null;
|
||||
|
||||
@property({ type: Node, tooltip: '结局旁白 Label 节点 (可留空自动创建)' })
|
||||
public closingLabelNode: Node | null = null;
|
||||
|
||||
@property({ tooltip: '是否自动创建结算界面 (Label + Back 按钮)' })
|
||||
public autoBuildUI: boolean = true;
|
||||
|
||||
protected onLoad(): void {
|
||||
if (this.autoBuildUI) this.buildDefaultUI();
|
||||
|
||||
const defaultStats: ISettlementStats = {
|
||||
totalScore: 0,
|
||||
stageScore: 0,
|
||||
comboCount: 0,
|
||||
flawless: true,
|
||||
remainingTimeSec: 0,
|
||||
};
|
||||
const settlement = new ChapterSettlement(defaultStats);
|
||||
const result = settlement.build();
|
||||
this.setLabel(this.scoreLabelNode, `Stage Score: ${result.stats.stageScore}`);
|
||||
this.setLabel(this.closingLabelNode, result.closingLine);
|
||||
}
|
||||
|
||||
/** Bind to a "Back to Menu" button. */
|
||||
public onReturnToMenu(): void {
|
||||
director.loadScene('MainMenu');
|
||||
}
|
||||
|
||||
private setLabel(node: Node | null, text: string): void {
|
||||
if (!node) return;
|
||||
const label = node.getComponent(Label);
|
||||
if (label) label.string = text;
|
||||
}
|
||||
|
||||
private buildDefaultUI(): void {
|
||||
ensureCanvasSize(this.node);
|
||||
// Title.
|
||||
createLabel(this.node, '章 节 结 算', 0, DESIGN_HEIGHT / 2 - 70, 40, Color.WHITE);
|
||||
// Score label (created only if inspector did not supply one).
|
||||
if (!this.scoreLabelNode) {
|
||||
this.scoreLabelNode = createLabel(this.node, '', 0, 40, 30, new Color(255, 220, 120, 255));
|
||||
}
|
||||
// Closing line label.
|
||||
if (!this.closingLabelNode) {
|
||||
this.closingLabelNode = createLabel(this.node, '', 0, -30, 24, new Color(200, 200, 200, 255));
|
||||
}
|
||||
// Bottom "Back to Menu" button.
|
||||
createButton(this.node, 'Back to Menu', 0, -DESIGN_HEIGHT / 2 + 80, 240, 60, () => this.onReturnToMenu());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user