148 lines
4.9 KiB
TypeScript
148 lines
4.9 KiB
TypeScript
import { _decorator, bezier, Button, CCInteger, Component, EventTarget, Label, log, Node, EventTouch } from 'cc';
|
|
import { GameplayController } from './GameplayController';
|
|
import BEConnector from './BEConnector';
|
|
const { ccclass, property } = _decorator;
|
|
|
|
export enum PanelState {
|
|
NotShowing,
|
|
CompareScore,
|
|
Continue,
|
|
ShowResult
|
|
}
|
|
@ccclass('EndGameUIController')
|
|
export class EndGameUIController extends Component {
|
|
@property(CCInteger)
|
|
private countdownTime: number = 15;
|
|
private currentCD: number = 15;
|
|
|
|
private isContinuable: boolean = true;
|
|
private isEndGameByTime: boolean = false;
|
|
private currentState: PanelState = PanelState.NotShowing;
|
|
|
|
// Texts
|
|
@property(Label)
|
|
private yourScoreTxt: Label = null;
|
|
@property(Label)
|
|
private topScoreTxt: Label = null;
|
|
@property(Label)
|
|
private continueTxt: Label = null;
|
|
@property(Label)
|
|
private countdownToReplayTxt: Label = null;
|
|
|
|
// Buttons
|
|
@property(Button)
|
|
private yesBtn: Label = null;
|
|
@property(Button)
|
|
private noBtn: Label = null;
|
|
|
|
// Panel
|
|
@property(Node)
|
|
private compareScorePnl: Node = null;
|
|
@property(Node)
|
|
private continuePnl: Node = null;
|
|
@property(Node)
|
|
private finalResultPnl: Node = null;
|
|
|
|
private eventRevive = new EventTarget();
|
|
|
|
//#region Cocos methods
|
|
protected onEnable(): void {
|
|
this.Setup();
|
|
this.currentCD = this.countdownTime;
|
|
}
|
|
protected update(dt: number): void {
|
|
if (this.isEndGameByTime == true) return;
|
|
|
|
this.currentCD -= dt;
|
|
this.countdownToReplayTxt.string = Math.round(this.currentCD).toString();
|
|
|
|
if (this.currentCD <= 0 && !this.isEndGameByTime) {
|
|
this.currentCD = 0;
|
|
this.ChangeState(PanelState.ShowResult);
|
|
this.isEndGameByTime = true;
|
|
}
|
|
}
|
|
//#endregion
|
|
|
|
private Setup(): void {
|
|
if (this.isContinuable)
|
|
this.ChangeState(PanelState.CompareScore);
|
|
else
|
|
this.ChangeState(PanelState.ShowResult);
|
|
}
|
|
|
|
private ChangeState(newState: PanelState): void {
|
|
if (this.currentState == newState) return;
|
|
|
|
this.currentState = newState;
|
|
switch (this.currentState) {
|
|
case PanelState.CompareScore:
|
|
this.TurnOffAllPanels(this.compareScorePnl);
|
|
var totalScore = GameplayController.Instance().score + GameplayController.Instance().highestStreak * 2;
|
|
this.yourScoreTxt.string = "Your score: " + totalScore;
|
|
|
|
/// Todo: set top score here
|
|
break;
|
|
case PanelState.Continue:
|
|
this.TurnOffAllPanels(this.continuePnl);
|
|
var ticket = BEConnector.instance.numberTicket;
|
|
|
|
if (ticket >= BEConnector.instance.getTicketCanBeMinus()) {
|
|
this.continueTxt.string = "To continue playing, you will be deducted " + ticket +
|
|
" Extras. Do you want to proceed?";
|
|
}
|
|
else {
|
|
this.continueTxt.string =
|
|
"You don't have enough Extras to continue playing. Would you like to buy more tickets?";
|
|
}
|
|
break;
|
|
case PanelState.ShowResult:
|
|
this.yesBtn.node.active = false;
|
|
this.noBtn.node.active = false;
|
|
this.countdownToReplayTxt.node.active = false;
|
|
|
|
this.TurnOffAllPanels(this.finalResultPnl);
|
|
BEConnector.instance.postScoreToServer(GameplayController.Instance().score);
|
|
break;
|
|
}
|
|
}
|
|
private TurnOffAllPanels(activePnl: Node): void {
|
|
this.compareScorePnl.active = false;
|
|
this.continuePnl.active = false;
|
|
this.finalResultPnl.active = false;
|
|
if (activePnl != null)
|
|
activePnl.active = true;
|
|
}
|
|
|
|
public YesNoClick(e: EventTouch, yesNoString: string): void {
|
|
var isYesClick = true;
|
|
if (yesNoString == "true")
|
|
isYesClick = true;
|
|
else isYesClick = false;
|
|
|
|
switch (this.currentState) {
|
|
case PanelState.CompareScore:
|
|
if (isYesClick)
|
|
this.ChangeState(PanelState.Continue);
|
|
else
|
|
this.ChangeState(PanelState.ShowResult);
|
|
break;
|
|
case PanelState.Continue:
|
|
if (isYesClick) {
|
|
var ticket = BEConnector.instance.getTicketCanBeMinus();
|
|
if (BEConnector.instance.numberTicket >= ticket) {
|
|
GameplayController.Instance().OnRevive();
|
|
BEConnector.instance.ticketMinus("revive");
|
|
this.isContinuable = false;
|
|
}
|
|
else
|
|
BEConnector.instance.postMessage();
|
|
}
|
|
else {
|
|
this.ChangeState(PanelState.CompareScore);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
} |