import { UIManager } from "../models/UIManager"; import { Block } from "./Block"; import { Candy } from "./Candy"; import { DOStage } from "../models/DOStage"; import { config } from "../constants/config"; import { StorageManager } from "../models/StorageManager"; import { Utility_CalculateScore, Utility_ConvertSecondToString } from "../utils/utility"; import { EVENT_TYPES, EventManager } from "../models/EventManager"; import { G_getMonthInfo } from "../models/DCManager"; const { regClass, property } = Laya; @regClass() export class Stage extends Laya.Script { declare owner : Laya.Box; @property(Laya.Box) public btn_back: Laya.Box @property(Laya.Box) public btn_new: Laya.Box @property(Laya.Button) public btn_pause: Laya.Button @property(Laya.Label) public label_score: Laya.Label; private score_last: number private score_current: number private score_step: number private score_animation_wait_frame = 0 @property(Laya.Label) public label_mistake: Laya.Label; @property(Laya.Label) public label_name: Laya.Label; @property(Laya.Label) public label_time: Laya.Label; @property(Laya.Box) public obj_blocks: Laya.Box; @property(Laya.Box) public obj_block_labels: Laya.Box; private blocks: Array = new Array(); @property(Laya.Box) public obj_candys: Laya.Box; @property(Laya.Box) public obj_candy_labels: Laya.Box; private candys: Array = new Array(); @property(Laya.Button) public btn_undo: Laya.Button; @property(Laya.Button) public btn_erase: Laya.Button; @property(Laya.Button) public btn_note: Laya.Button; private btn_note_normal: Laya.Box private btn_note_checked: Laya.Box private label_note: Laya.Label @property(Laya.Button) public btn_hint: Laya.Button; private btn_hint_normal: Laya.Box private btn_hint_ad: Laya.Box private btn_hint_label: Laya.Label private data: DOStage; private selectedBlock: Block; private paused: boolean private static _instance: Stage onAwake(): void { Stage._instance = this this.btn_back.on(Laya.Event.CLICK, this, ()=>{ if (this.data.get_stageType() == config.STAGE_TYPE.MAIN) { UIManager.getInstance().loadHomeUI(); UIManager.getInstance().closeStageUI(); } else { UIManager.getInstance().loadDCUI(); UIManager.getInstance().closeStageUI(); } }) if (this.btn_new) { this.btn_new.on(Laya.Event.CLICK, this, ()=>{ var user = StorageManager.getInstance().getUser() user.update_progress(this.data.get_difficulty(), this.data.get_stageIndex()+1)//主线关卡更新难度进度 StorageManager.getInstance().newStage(config.DEFAULT_STAGE_ID, config.STAGE_TYPE.MAIN, this.data.get_difficulty(), this.data.get_difficulty()) UIManager.getInstance().loadStageUI(config.DEFAULT_STAGE_ID) }) } this.btn_pause.on(Laya.Event.CLICK, this, ()=>{ UIManager.getInstance().loadGamePauseUI(this.data); }) for (var i=0; i{ if (this.paused) { return } var last = this.data.get_duration() last ++ this.data.set_duration(last) this.label_time.text = Utility_ConvertSecondToString(last) }) var blocks = doStage.get_blocks() for (var i=0; i this.score_last) this.score_animation_wait_frame = 54 else this.score_animation_wait_frame = 0 this.data.set_score(score) } } onLateUpdate(): void { this.score_animation_wait_frame -- if (this.score_animation_wait_frame < 0) this.score_animation_wait_frame = 0 if (this.score_animation_wait_frame <= 0) { if (this.score_current != this.score_last) { if (this.score_current > this.score_last) { this.score_last += this.score_step if (this.score_last > this.score_current) this.score_last = this.score_current this.label_score.text = `Score: ${this.score_last}` } else { this.label_score.text = `Score: ${this.score_current}` this.score_last = this.score_current } } } } onUpdateMistake(): void { this.label_mistake.text = `Mistake: ${this.data.get_mistake()}/${config.MISTAKE_MAX}` } onSetBlock(block: Block, animated: boolean = false): void { //全部格子还原 for (var i=0; i>>>", JSON.stringify(undo)) this.selectedBlock = this.blocks[undo.index] this.onApplyBlock(this.selectedBlock) if (undo.notes && undo.notes.length > 0) { this.selectedBlock.setNotes(undo.notes) } else { this.selectedBlock.setShowNumber(undo.show, 0) } // this.onSetBlock(this.selectedBlock) this.onUpdateScore() var undos = this.data.get_undos() if (undos.length > 0) { var last = undos[undos.length-1] this.selectedBlock = this.blocks[last.index] this.onApplyBlock(this.selectedBlock) } } } onClickErase(evt: Laya.Event): void { if (this.selectedBlock.getData().get_checked() == false) {//未完成且有数字或者笔记才可以使用橡皮 var show = this.selectedBlock.getData().get_show() var notes = this.selectedBlock.getData().get_notes() if (show > 0 || notes.length > 0) { this.data.add_undo(this.selectedBlock.getData().get_index(), show, notes) this.selectedBlock.setShowNumber(0, 0) this.onUpdateScore() this.onSetBlock(this.selectedBlock) } } } onClickNote(evt: Laya.Event): void { if (evt != null) { this.data.set_note_open(!this.data.get_note_open()) } this.btn_note_normal.visible = this.data.get_note_open() == false this.btn_note_checked.visible = this.data.get_note_open() this.label_note.color = this.data.get_note_open() ? "#1d5cdc" : "#545962" for (var i=0; i 0) { if (this.selectedBlock.getData().get_checked() == false) {//当前选中的格子没有完成 var correct = this.selectedBlock.getData().get_correct() this.onApplyCandy(correct, true) this.data.set_hint(hint-1) this.onUpdateHintStatus() } else { var list: Array = new Array() for (var i=0; i 0) { var random = Math.random() var index = Math.round(random*list.length) if (index >= list.length) index = list.length -1 var block = list[index] this.onApplyBlock(block) var correct = block.getData().get_correct() this.onApplyCandy(correct, true) this.data.set_hint(hint-1) this.onUpdateHintStatus() } } } else { //这里播放广告 现在每个广告每次点击+9 this.data.set_hint(9) this.onUpdateHintStatus() } } onUpdateHintStatus(): void { var hint = this.data.get_hint() this.btn_hint_normal.visible = hint > 0 this.btn_hint_ad.visible = hint <= 0 this.btn_hint_label.text = hint.toString() } public onApplyCandy(showNumber: number, hint: boolean): void { var show = this.selectedBlock.getData().get_show() var notes = this.selectedBlock.getData().get_notes() if (this.selectedBlock.getData().get_checked() == false) { if (this.data.get_note_open() && hint == false) { var relateds = this.findRelatedBlocks(this.selectedBlock) var find = false for (var i=0; i= 1) {//完成每日挑战关卡检查是否或者当月奖杯 var now = new Date() var nowYear = now.getFullYear() var nowMonth = now.getMonth() + 1 var doneCount = user.get_doneCountByDate(nowYear, nowMonth) var dayCount = 0 var info = G_getMonthInfo(nowYear, nowMonth) if (info) dayCount = info.dayCount console.log("dc完成信息>>>>>>>>>>>>>>>", nowYear, nowMonth, doneCount, dayCount) if (doneCount >= dayCount) {//当月每日挑战全部完成 user.add_trophy_record(nowYear, nowMonth, now.getDate()) } } UIManager.getInstance().loadGameDoneUI(false, this.data) } } } else {//失败 this.data.set_mistake(this.data.get_mistake()+1) this.onUpdateMistake() if (this.data.get_mistake() >= config.MISTAKE_MAX) { console.log("关卡失败") this.paused = true UIManager.getInstance().loadGameOverUI(this.data) } } } this.onUpdateCandys() } } } public onClickCandy(evt: Laya.Event): void { var candy = evt.target.getComponent(Candy); this.onApplyCandy(candy.get_show(), false) var sp = evt.target.getChildByName("Sprite") as Laya.Sprite Laya.Tween.to(sp, {scaleX: 0.9, scaleY: 0.9}, 100, Laya.Ease.linearIn) Laya.Tween.to(sp, {scaleX: 1, scaleY: 1}, 100, Laya.Ease.linearInOut, null, 100) } onKeyUp(evt: Laya.Event): void { var n = Number(evt.key) if (n && n > 0) { this.onApplyCandy(n, false) } } onUpdateCandys(): void { var list: Map = new Map() for (var i=1; i<=9; i++) list.set(i, 0) for (var i=0; i { var list: Array = new Array() for (var i=0; i { var list: Array = new Array() for (var i=0; i { var list: Array = new Array() for (var i=0; i= 0) list.push(block) } return list } getIsComplete(): boolean { var b = true; for (var i=1; i