完善每日挑战逻辑

This commit is contained in:
2025-05-21 10:15:23 +08:00
parent 061b8bc042
commit 2e384f43e4
17 changed files with 450 additions and 158 deletions

View File

@@ -6,8 +6,8 @@ import { LevelManager } from "../models/LevelManager";
import { UIManager } from "../models/UIManager";
import { respath } from "../constants/respath";
const { regClass, property } = Laya;
const { regClass, property } = Laya;
@regClass()
export class DailyChallenge extends Laya.Script {
declare owner : Laya.Box;
@@ -16,6 +16,12 @@ export class DailyChallenge extends Laya.Script {
public btn_back: Laya.Button
@property(Laya.Image)
public btn_trophy: Laya.Image
@property(Laya.Image)
public icon_trophy: Laya.Image
@property(Laya.Image)
public btn_left: Laya.Image
@property(Laya.Image)
public btn_right: Laya.Image
@property(Laya.Image)
public bg_dc: Laya.Image;
@@ -46,9 +52,11 @@ export class DailyChallenge extends Laya.Script {
@property(Laya.Box)
public obj_labels: Laya.Box;
private units: Array<CalendarUnit> = new Array();
private selectedUnit: CalendarUnit;
//组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
private selectedUnit: CalendarUnit;
private currentIndex: number
private indexMax: number
onAwake(): void {
this.btn_back.on(Laya.Event.CLICK, this, ()=>{
UIManager.getInstance().loadHomeUI()
@@ -57,64 +65,6 @@ export class DailyChallenge extends Laya.Script {
this.btn_trophy.on(Laya.Event.CLICK, this, ()=>{
UIManager.getInstance().loadTrophyUI()
})
var dayBegin = 4
var dayCount = 31
var user = StorageManager.getInstance().getUser()
var now = new Date()
var year = now.getFullYear()
var month = now.getMonth() + 1
var dayNow = new Date().getDate()
var stageID = `${year}-${month}-${dayNow}`
var starCount = user.get_doneCountBydate(year, month)
if (starCount >= dayCount) {
this.bg_dc.skin = respath.dc_top_bg_month_finish
}
else {
var progress = user.get_done(stageID)
console.log("progress >>>>>>>>>>>>>", stageID, progress)
if (progress >= 1) {
this.bg_dc.skin = respath.dc_top_bg_day_finish
}
else {
this.bg_dc.skin = respath.dc_top_bg_normal
}
}
this.label_year.text = year.toString()
this.label_month.text = config.MONTH_FULLNAMES[month-1]
this.label_star.text = `${starCount}/${dayCount}`
var day = 1
var index = -1
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 obj = hbox.getChildAt(j) as Laya.Box
var l_obj = l_hbox.getChildAt(j) as Laya.Label
index ++
if (index >= dayBegin && index < dayBegin+dayCount) {
obj.visible = true
l_obj.visible = true
var unit = obj.getComponent(CalendarUnit)
this.units.push(unit)
var stageID = `${year}-${month}-${day}`
var progress = user.get_done(stageID)
unit.onInit(day, day<=dayNow, progress, l_obj, this, this.onClickUnit)
if (day == dayNow) {
this.selectedUnit = unit
}
day ++
}
else {
obj.visible = false
l_obj.visible = false
}
}
}
this.onApplyUnit(this.selectedUnit)
this.btn_play.on(Laya.Event.CLICK, this, (evt: Laya.Event)=>{
// console.log(">>>>>>>>>>>>>>>>>>>>>>>", this.selectedUnit.day)
var now = new Date()
@@ -137,6 +87,132 @@ export class DailyChallenge extends Laya.Script {
UIManager.getInstance().loadStageUI(stageID);
this.owner.destroy()
})
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)
}
}
this.indexMax = config.MONTH_LIST.length - 1
var now = new Date()
var nowYear = now.getFullYear()
var nowMonth = now.getMonth() + 1
for (var i=0; i<config.MONTH_LIST.length; i++) {
var obj = config.MONTH_LIST[i]
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)
}
})
}
loadWithMonth(): void {
var now = new Date()
var nowYear = now.getFullYear()
var nowMonth = now.getMonth() + 1
this.currentIndex = 0
for (var i=0; i<config.MONTH_LIST.length; i++) {
var obj = config.MONTH_LIST[i]
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
var info = config.MONTH_LIST[index]
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
//设置背景
var starCount = user.get_doneCountBydate(info.year, info.month)
if (starCount >= info.dayCount) {
this.bg_dc.skin = respath.dc_top_bg_month_finish
}
else {
if (info.year == nowYear && info.month == nowMonth) {//当前月份
var stageID = `${info.year}-${info.month}-${nowDay}`
var progress = user.get_done(stageID)
console.log("progress >>>>>>>>>>>>>", stageID, progress)
if (progress >= 1) {
this.bg_dc.skin = respath.dc_top_bg_day_finish
}
else {
this.bg_dc.skin = respath.dc_top_bg_normal
}
}
else {
this.bg_dc.skin = respath.dc_top_bg_normal
}
}
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)
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)
}
public onApplyUnit(unit: CalendarUnit): void {
@@ -144,12 +220,8 @@ export class DailyChallenge extends Laya.Script {
this.selectedUnit = unit
this.selectedUnit.setSelected(true)
var now = new Date()
var year = now.getFullYear()
var month = now.getMonth() + 1
var dayNow = unit.day
var stageID = `${year}-${month}-${dayNow}`
this.label_date.text = `${config.MONTH_ABBRS[month-1]} ${dayNow},${year}`
var stageID = `${unit.year}-${unit.month}-${unit.day}`
this.label_date.text = `${config.MONTH_ABBRS[unit.month-1]} ${unit.day},${unit.year}`
var user = StorageManager.getInstance().getUser()
var progress = user.get_done(stageID)
// console.log("onApplyUnit >>>>>", stageID, progress)