2025-05-23 20:47:03 +08:00
|
|
|
import { config } from "../../constants/config";
|
|
|
|
|
import { Utility_ConvertSecondToString } from "../../utils/utility";
|
|
|
|
|
import { StorageManager } from "../../models/StorageManager";
|
2025-05-20 17:41:43 +08:00
|
|
|
import { CalendarUnit } from "./CalendarUnit";
|
2025-05-23 20:47:03 +08:00
|
|
|
import { UIManager } from "../../models/UIManager";
|
|
|
|
|
import { respath } from "../../constants/respath";
|
|
|
|
|
import { MONTH_LIST } from "../../models/DCManager";
|
2025-05-27 11:45:10 +08:00
|
|
|
import { EVENT_TYPES, EventManager } from "../../models/EventManager";
|
2025-05-20 17:41:43 +08:00
|
|
|
|
|
|
|
|
|
2025-05-21 10:15:23 +08:00
|
|
|
const { regClass, property } = Laya;
|
2025-05-20 17:41:43 +08:00
|
|
|
@regClass()
|
|
|
|
|
export class DailyChallenge extends Laya.Script {
|
|
|
|
|
declare owner : Laya.Box;
|
|
|
|
|
|
|
|
|
|
@property(Laya.Button)
|
|
|
|
|
public btn_back: Laya.Button
|
2025-05-20 21:05:30 +08:00
|
|
|
@property(Laya.Image)
|
|
|
|
|
public btn_trophy: Laya.Image
|
2025-05-22 14:54:48 +08:00
|
|
|
@property(Laya.Sprite)
|
|
|
|
|
public btn_trophy_red: Laya.Sprite
|
2025-05-21 10:15:23 +08:00
|
|
|
@property(Laya.Image)
|
|
|
|
|
public icon_trophy: Laya.Image
|
2025-05-21 11:08:50 +08:00
|
|
|
@property(Laya.Box)
|
|
|
|
|
public btn_left: Laya.Box
|
|
|
|
|
@property(Laya.Box)
|
|
|
|
|
public btn_right: Laya.Box
|
2025-05-20 17:41:43 +08:00
|
|
|
|
2025-05-20 18:27:32 +08:00
|
|
|
@property(Laya.Image)
|
|
|
|
|
public bg_dc: Laya.Image;
|
2025-05-20 17:41:43 +08:00
|
|
|
@property(Laya.Label)
|
|
|
|
|
public label_year: Laya.Label;
|
|
|
|
|
@property(Laya.Label)
|
|
|
|
|
public label_month: Laya.Label;
|
|
|
|
|
@property(Laya.Label)
|
|
|
|
|
public label_star: Laya.Label;
|
|
|
|
|
|
|
|
|
|
@property(Laya.Box)
|
|
|
|
|
public btn_play: Laya.Box
|
|
|
|
|
@property(Laya.Label)
|
|
|
|
|
public label_play: Laya.Label
|
|
|
|
|
@property(Laya.Box)
|
|
|
|
|
public obj_summary: Laya.Box
|
|
|
|
|
@property(Laya.Label)
|
|
|
|
|
public label_date: Laya.Label;
|
|
|
|
|
@property(Laya.Label)
|
|
|
|
|
public label_diffucuty: Laya.Label
|
|
|
|
|
@property(Laya.Label)
|
|
|
|
|
public label_score: Laya.Label
|
|
|
|
|
@property(Laya.Label)
|
|
|
|
|
public label_time: Laya.Label
|
|
|
|
|
|
|
|
|
|
@property(Laya.Box)
|
|
|
|
|
public obj_items: Laya.Box;
|
|
|
|
|
@property(Laya.Box)
|
|
|
|
|
public obj_labels: Laya.Box;
|
|
|
|
|
private units: Array<CalendarUnit> = new Array();
|
2025-05-21 10:15:23 +08:00
|
|
|
|
2025-05-20 17:41:43 +08:00
|
|
|
private selectedUnit: CalendarUnit;
|
2025-05-21 10:15:23 +08:00
|
|
|
private currentIndex: number
|
|
|
|
|
private indexMax: number
|
2025-05-20 17:41:43 +08:00
|
|
|
|
2025-05-27 11:45:10 +08:00
|
|
|
private static _instance: DailyChallenge
|
2025-05-20 17:41:43 +08:00
|
|
|
onAwake(): void {
|
2025-05-27 11:45:10 +08:00
|
|
|
DailyChallenge._instance = this
|
|
|
|
|
|
2025-05-26 19:57:17 +08:00
|
|
|
if (this.btn_back) {
|
|
|
|
|
this.btn_back.on(Laya.Event.CLICK, this, ()=>{
|
|
|
|
|
UIManager.getInstance().loadHomeUI()
|
|
|
|
|
UIManager.getInstance().closeDCUI()
|
|
|
|
|
})
|
|
|
|
|
}
|
2025-05-22 14:54:48 +08:00
|
|
|
|
|
|
|
|
var user = StorageManager.getInstance().getUser()
|
|
|
|
|
this.btn_trophy_red.visible = user.get_trophyHasUnread()
|
2025-05-20 21:05:30 +08:00
|
|
|
this.btn_trophy.on(Laya.Event.CLICK, this, ()=>{
|
2025-05-22 14:54:48 +08:00
|
|
|
user.set_trophyAllread()
|
|
|
|
|
this.btn_trophy_red.visible = false
|
2025-05-20 21:05:30 +08:00
|
|
|
UIManager.getInstance().loadTrophyUI()
|
|
|
|
|
})
|
2025-05-22 14:54:48 +08:00
|
|
|
|
2025-05-20 17:41:43 +08:00
|
|
|
this.btn_play.on(Laya.Event.CLICK, this, (evt: Laya.Event)=>{
|
|
|
|
|
// console.log(">>>>>>>>>>>>>>>>>>>>>>>", this.selectedUnit.day)
|
|
|
|
|
var now = new Date()
|
|
|
|
|
var year = now.getFullYear()
|
|
|
|
|
var month = now.getMonth() + 1
|
|
|
|
|
var dayNow = this.selectedUnit.day
|
|
|
|
|
var stageID = `${year}-${month}-${dayNow}`
|
2025-05-26 19:57:17 +08:00
|
|
|
var doStage = StorageManager.getInstance().getStage(stageID)
|
2025-05-20 17:41:43 +08:00
|
|
|
console.log("play >>>>>>>>>>>>>>>>>>>>>>>", stageID, doStage)
|
2025-05-26 20:56:15 +08:00
|
|
|
if (!doStage || doStage.get_mistake() >= config.MISTAKE_MAX) {
|
2025-05-20 17:41:43 +08:00
|
|
|
var stageName = `${config.MONTH_ABBRS[month-1]} ${dayNow}`
|
2025-05-22 19:12:00 +08:00
|
|
|
StorageManager.getInstance().newStage(stageID, config.STAGE_TYPE.DC, stageName)
|
2025-05-20 17:41:43 +08:00
|
|
|
}
|
|
|
|
|
UIManager.getInstance().loadStageUI(stageID);
|
|
|
|
|
this.owner.destroy()
|
|
|
|
|
})
|
2025-05-21 10:15:23 +08:00
|
|
|
|
|
|
|
|
for (var i=0; i<this.obj_items.numChildren; i++) {
|
|
|
|
|
var hbox = this.obj_items.getChildAt(i)
|
|
|
|
|
var l_hbox = this.obj_labels.getChildAt(i)
|
|
|
|
|
for (var j=0; j<hbox.numChildren; j++) {
|
|
|
|
|
var unit = hbox.getChildAt(j).getComponent(CalendarUnit)
|
|
|
|
|
var l_obj = l_hbox.getChildAt(j) as Laya.Label
|
|
|
|
|
this.units.push(unit)
|
|
|
|
|
unit.onInit(l_obj)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-22 14:54:48 +08:00
|
|
|
this.indexMax = MONTH_LIST.length - 1
|
2025-05-21 10:15:23 +08:00
|
|
|
var now = new Date()
|
|
|
|
|
var nowYear = now.getFullYear()
|
|
|
|
|
var nowMonth = now.getMonth() + 1
|
2025-05-22 14:54:48 +08:00
|
|
|
for (var i=0; i<MONTH_LIST.length; i++) {
|
|
|
|
|
var obj = MONTH_LIST[i]
|
2025-05-21 10:15:23 +08:00
|
|
|
if (nowYear == obj.year && nowMonth == obj.month) {
|
|
|
|
|
this.indexMax = i;
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
this.btn_left.on(Laya.Event.CLICK, this, ()=>{
|
|
|
|
|
if (this.currentIndex > 0) {
|
|
|
|
|
this.currentIndex --
|
|
|
|
|
this.loadWithIndex(this.currentIndex)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
this.btn_right.on(Laya.Event.CLICK, this, ()=>{
|
|
|
|
|
if (this.currentIndex < this.indexMax) {
|
|
|
|
|
this.currentIndex ++
|
|
|
|
|
this.loadWithIndex(this.currentIndex)
|
|
|
|
|
}
|
|
|
|
|
})
|
2025-05-27 11:45:10 +08:00
|
|
|
|
|
|
|
|
EventManager.getInstance().RegisterEvent(EVENT_TYPES.NOT_SET_TROPHY_BUTTON, DailyChallenge.EventUpdateTrophyButton)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
onDestroy(): void {
|
|
|
|
|
EventManager.getInstance().UnregisterEvent(EVENT_TYPES.NOT_SET_TROPHY_BUTTON, DailyChallenge.EventUpdateTrophyButton)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static EventUpdateTrophyButton(arg: any): void {
|
|
|
|
|
if (DailyChallenge._instance) {
|
|
|
|
|
DailyChallenge._instance.btn_trophy.visible = arg
|
|
|
|
|
}
|
2025-05-21 10:15:23 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
loadWithMonth(): void {
|
|
|
|
|
var now = new Date()
|
|
|
|
|
var nowYear = now.getFullYear()
|
|
|
|
|
var nowMonth = now.getMonth() + 1
|
|
|
|
|
this.currentIndex = 0
|
2025-05-22 14:54:48 +08:00
|
|
|
for (var i=0; i<MONTH_LIST.length; i++) {
|
|
|
|
|
var obj = MONTH_LIST[i]
|
2025-05-21 10:15:23 +08:00
|
|
|
if (nowYear == obj.year && nowMonth == obj.month) {
|
|
|
|
|
this.currentIndex = i;
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
console.log("DailyChallenge loadWithMonth >>>>>>>>>>>>>>>", nowYear, nowMonth, this.currentIndex)
|
|
|
|
|
this.loadWithIndex(this.currentIndex)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public loadWithIndex(index: number): void {
|
|
|
|
|
this.btn_left.visible = this.currentIndex > 0
|
|
|
|
|
this.btn_right.visible = this.currentIndex < this.indexMax
|
2025-05-22 14:54:48 +08:00
|
|
|
var info = MONTH_LIST[index]
|
2025-05-21 10:15:23 +08:00
|
|
|
var user = StorageManager.getInstance().getUser()
|
|
|
|
|
var now = new Date()
|
|
|
|
|
var nowYear = now.getFullYear()
|
|
|
|
|
var nowMonth = now.getMonth() + 1
|
|
|
|
|
var nowDay = new Date().getDate()
|
|
|
|
|
|
|
|
|
|
this.icon_trophy.skin = info.icon_res
|
|
|
|
|
//设置背景
|
2025-05-22 14:54:48 +08:00
|
|
|
var starCount = user.get_doneCountByDate(info.year, info.month)
|
2025-05-21 10:15:23 +08:00
|
|
|
if (starCount >= info.dayCount) {
|
|
|
|
|
this.bg_dc.skin = respath.dc_top_bg_month_finish
|
|
|
|
|
}
|
|
|
|
|
else {
|
2025-05-22 18:16:23 +08:00
|
|
|
this.bg_dc.skin = respath.dc_top_bg_normal
|
2025-05-21 10:15:23 +08:00
|
|
|
}
|
|
|
|
|
this.label_year.text = info.year.toString()
|
|
|
|
|
this.label_month.text = config.MONTH_FULLNAMES[info.month-1]
|
|
|
|
|
this.label_star.text = `${starCount}/${info.dayCount}`
|
|
|
|
|
|
|
|
|
|
this.selectedUnit = null
|
|
|
|
|
var day = 1
|
|
|
|
|
for (var i=0; i<this.units.length; i++) {
|
|
|
|
|
var unit = this.units[i]
|
|
|
|
|
if (i >= info.begin && i < info.begin+info.dayCount) {
|
|
|
|
|
unit.owner.visible = true
|
|
|
|
|
unit.label_show.visible = true
|
|
|
|
|
var open = true
|
|
|
|
|
if (info.year > nowYear) {
|
|
|
|
|
open = false
|
|
|
|
|
}
|
|
|
|
|
else if (info.year == nowYear) {
|
|
|
|
|
if (info.month > nowMonth) {
|
|
|
|
|
open = false
|
|
|
|
|
}
|
|
|
|
|
else if (info.month == nowMonth) {
|
|
|
|
|
if (day > nowDay) {
|
|
|
|
|
open = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var stageID = `${info.year}-${info.month}-${day}`
|
|
|
|
|
var progress = user.get_done(stageID)
|
2025-05-26 20:56:15 +08:00
|
|
|
if (open && progress < 1) {//检查失败的关卡,如果失败了就重置
|
|
|
|
|
var doStage = StorageManager.getInstance().getStage(stageID)
|
|
|
|
|
if (doStage) {//有关卡数据
|
|
|
|
|
if (doStage.get_mistake() >= config.MISTAKE_MAX) {
|
|
|
|
|
progress = 0
|
|
|
|
|
user.update_stage_done(stageID, 0)
|
|
|
|
|
StorageManager.getInstance().cleanStage(stageID)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-05-21 10:15:23 +08:00
|
|
|
unit.setCalendarUnit(info.year, info.month, day, open, progress, this, this.onClickUnit)
|
|
|
|
|
if (info.year == nowYear && info.month == nowMonth && day == nowDay) {
|
|
|
|
|
this.selectedUnit = unit
|
|
|
|
|
}
|
|
|
|
|
day ++
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
unit.owner.visible = false
|
|
|
|
|
unit.label_show.visible = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (this.selectedUnit == null)
|
|
|
|
|
this.selectedUnit = this.units[info.begin+info.dayCount-1]
|
|
|
|
|
this.onApplyUnit(this.selectedUnit)
|
2025-05-20 17:41:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public onApplyUnit(unit: CalendarUnit): void {
|
|
|
|
|
this.selectedUnit.setSelected(false)
|
|
|
|
|
this.selectedUnit = unit
|
|
|
|
|
this.selectedUnit.setSelected(true)
|
|
|
|
|
|
2025-05-21 10:15:23 +08:00
|
|
|
var stageID = `${unit.year}-${unit.month}-${unit.day}`
|
|
|
|
|
this.label_date.text = `${config.MONTH_ABBRS[unit.month-1]} ${unit.day},${unit.year}`
|
2025-05-20 17:41:43 +08:00
|
|
|
var user = StorageManager.getInstance().getUser()
|
|
|
|
|
var progress = user.get_done(stageID)
|
|
|
|
|
// console.log("onApplyUnit >>>>>", stageID, progress)
|
|
|
|
|
if (progress >= 1) {
|
|
|
|
|
this.btn_play.visible = false
|
|
|
|
|
this.obj_summary.visible = true
|
2025-05-26 19:57:17 +08:00
|
|
|
var doStage = StorageManager.getInstance().getStage(stageID)
|
2025-05-20 17:41:43 +08:00
|
|
|
this.label_diffucuty.text = doStage.get_difficulty()
|
|
|
|
|
this.label_score.text = doStage.get_score().toString()
|
|
|
|
|
this.label_time.text = Utility_ConvertSecondToString(doStage.get_duration())
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
this.btn_play.visible = true
|
|
|
|
|
this.obj_summary.visible = false
|
2025-05-26 19:57:17 +08:00
|
|
|
var doStage = StorageManager.getInstance().getStage(stageID)
|
2025-05-20 17:41:43 +08:00
|
|
|
if (doStage) {
|
|
|
|
|
this.label_play.text = "Continue"
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
this.label_play.text = "Play"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public onClickUnit(evt: Laya.Event): void {
|
|
|
|
|
var unit = evt.target.getComponent(CalendarUnit)
|
|
|
|
|
this.onApplyUnit(unit)
|
|
|
|
|
}
|
2025-05-22 14:54:48 +08:00
|
|
|
|
|
|
|
|
onStart(): void {
|
|
|
|
|
var user = StorageManager.getInstance().getUser()
|
|
|
|
|
var find = user.get_trophyHasNew()
|
|
|
|
|
if (find) {
|
|
|
|
|
UIManager.getInstance().loadTrophyClaimUI(find)
|
|
|
|
|
user.set_trophyNew(find, false)
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-05-20 17:41:43 +08:00
|
|
|
}
|