2026-05-29 19:54:56 +08:00

458 lines
22 KiB
GDScript

class_name SignPanel
extends PanelModule
# 每日签到面板:
# - 负责一周签到路径、累计宝箱、今日签到和补签。
# - 签到记录从后端读取,按钮状态由 signed_days/continue_count 推导,不硬编码 UI 状态。
# - 成功领取后刷新接口数据并发放奖励,保证本地显示和后端一致。
var _pay_bg_path := ""
var _remedy_item_id := 103008
var _rows: Array[Dictionary] = []
var _signed_days: Array[int] = []
var _claimed_reward_days: Array[int] = []
var _continue_count := 0
var _panel: Control
var _sign_reward_popup: Control
const SIGN_PROGRESS_MAX_WIDTH := 383.0
const SIGN_PROGRESS_SIZE := Vector2(383.0, 25.0)
const SIGN_PROGRESS_BG_SIZE := Vector2(387.0, 29.0)
const SIGN_REWARD_DAYS := [3, 5, 7]
const SIGN_LINE_MASK_RECTS := [
Rect2(-3.0, -2.0, 94.0, 138.0),
Rect2(124.0, 8.0, 116.0, 104.0),
Rect2(234.0, 8.0, 116.0, 104.0),
Rect2(364.0, 8.0, 116.0, 104.0),
Rect2(324.0, 148.0, 116.0, 104.0),
Rect2(184.0, 138.0, 116.0, 104.0),
Rect2(-1.0, 153.0, 151.0, 104.0)
]
func setup(options: Dictionary) -> void:
super.setup(options)
_pay_bg_path = str(options.get("pay_bg_path", _pay_bg_path))
_remedy_item_id = int(options.get("remedy_item_id", _remedy_item_id))
func open() -> void:
_close_modal(false)
await _refresh_store_house()
_panel = _ui.create_modal_root("SignPanel")
var panel_origin := Vector2(4.0, 146.0)
var group_offset := panel_origin + Vector2(0.0, 60.0)
_ui.add_scale9_patch(_panel, "PanelBg", _texture_provider.common("c_panel"), Vector2(19.0, 146.0), Vector2(602.0, 663.0), Rect2(122.0, 179.0, 5.0, 4.0))
_ui.add_texture(_panel, "PanelIcon", _texture_provider.frame(_texture_provider.atlas_path("sign"), "panel_icon_sign_png"), group_offset + Vector2(172.0, -7.0), Vector2(80.0, 65.0), TextureRect.STRETCH_KEEP_ASPECT_CENTERED)
_ui.add_texture(_panel, "PanelTitle", _texture_provider.frame(_texture_provider.atlas_path("sign"), "panel_title_sign_png"), group_offset + Vector2(252.0, -17.0), Vector2(140.0, 82.0), TextureRect.STRETCH_KEEP_ASPECT_CENTERED)
_ui.add_scale9_patch(_panel, "PayBg", _texture_provider.standalone(_pay_bg_path), group_offset + Vector2(59.0, 76.0), Vector2(522.0, 547.0), Rect2(65.0, 203.0, 392.0, 9.0))
_add_sign_progress_bar(_panel, "Progress", group_offset + Vector2(126.5, 200.0))
_ui.add_texture(_panel, "RoleDecor", _texture_provider.standalone("res://assets/egret/assets/game/createrole/role_zhuangshi.png"), group_offset + Vector2(40.0, 586.0), Vector2(549.0, 77.0))
_ui.add_texture(_panel, "DecorLeft", _texture_provider.standalone("res://assets/egret/assets/game/pay/pay_zhuangshi.png"), group_offset + Vector2(4.0, 57.0), Vector2(167.0, 269.0))
var decor_right: TextureRect = _ui.add_texture(_panel, "DecorRight", _texture_provider.standalone("res://assets/egret/assets/game/pay/pay_zhuangshi.png"), group_offset + Vector2(466.0, 57.0), Vector2(167.0, 269.0))
decor_right.flip_h = true
_ui.add_texture(_panel, "LineClose", _texture_provider.standalone("res://assets/egret/assets/game/sign/sign_line_close.png"), group_offset + Vector2(96.0, 268.0), Vector2(453.0, 238.0), TextureRect.STRETCH_KEEP_ASPECT_CENTERED)
var line_segments := Control.new()
line_segments.name = "LineOpenSegments"
line_segments.position = Vector2.ZERO
line_segments.size = _panel_screen_size
line_segments.mouse_filter = Control.MOUSE_FILTER_IGNORE
_panel.add_child(line_segments)
_ui.add_panel_label(_panel, "WeekTextA", "本周已累计签到", group_offset + Vector2(139.0, 80.0), Vector2(170.0, 30.0), 20, Color.html("#fffbf2"), 2, Color.html("#724f2e"), HORIZONTAL_ALIGNMENT_LEFT)
_ui.add_scale9_patch(_panel, "DayBg", _texture_provider.frame(_texture_provider.atlas_path("sign"), "inp_day_bg_png"), group_offset + Vector2(319.0, 77.0), Vector2(85.0, 25.0), Rect2(14.0, 12.0, 2.0, 1.0))
_ui.add_panel_label(_panel, "SignedDayNum", "0", group_offset + Vector2(328.0, 72.0), Vector2(65.0, 35.0), 30, Color.html("#fff500"), 2, Color.html("#724f2e"))
_ui.add_panel_label(_panel, "WeekTextB", "", group_offset + Vector2(405.0, 80.0), Vector2(32.0, 30.0), 20, Color.html("#fffbf2"), 2, Color.html("#724f2e"), HORIZONTAL_ALIGNMENT_LEFT)
var reward_box_x := [268.5, 356.5, 448.0]
var reward_box_y := [124.0, 122.0, 129.0]
var reward_box_days := [3, 5, 7]
for index in range(3):
var x := float(reward_box_x[index])
var box_key := "sign_box0_png" if index == 0 else ("sign_box1_png" if index == 1 else "sign_box2_png")
var box_size := Vector2(88.0, 89.0) if index == 0 else (Vector2(95.0, 91.0) if index == 1 else Vector2(95.0, 84.0))
_ui.add_texture_button(_panel, "RewardBox%s" % index, _texture_provider.frame(_texture_provider.atlas_path("sign"), box_key), group_offset + Vector2(x, float(reward_box_y[index])), box_size, "", Callable(self, "_open_sign_reward_popup"), 1)
_ui.add_panel_label(_panel, "RewardBoxLabel%s" % index, "%s" % int(reward_box_days[index]), group_offset + Vector2(285.0 + 96.0 * index, 226.0), Vector2(54.0, 28.0), 20, Color.html("#fffbf2"), 2, Color.html("#724f2e"))
var positions := [
Vector2(40.0, 315.0), Vector2(115.0, 222.0), Vector2(261.0, 255.0), Vector2(379.0, 225.0),
Vector2(460.0, 345.0), Vector2(330.0, 385.0), Vector2(200.0, 395.0)
]
var card_bg_positions := [
Vector2(39.0, 11.0), Vector2(39.0, 11.0), Vector2(19.0, 11.0), Vector2(7.0, 35.0),
Vector2(19.0, 9.0), Vector2(19.0, 9.0), Vector2(-1.0, 19.0)
]
var day_positions := [
Vector2(61.0, 30.0), Vector2(64.0, 26.0), Vector2(46.0, 21.0), Vector2(37.0, 32.0),
Vector2(54.0, 24.0), Vector2(50.0, 22.0), Vector2(30.0, 24.0)
]
var rotations := [
20.0, 10.0, 0.0, -25.0, 8.0, 5.0, -8.0
]
for index in range(7):
var day := index + 1
var card := Control.new()
card.name = "SignCard%s" % day
card.position = group_offset + positions[index]
card.size = Vector2(125.0, 152.0)
card.set_meta("day", day)
_panel.add_child(card)
var card_bg: TextureRect = _ui.add_texture(card, "CardBg", _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_card_png"), card_bg_positions[index], Vector2(92.0, 114.0))
card_bg.rotation_degrees = float(rotations[index])
var day_img: TextureRect = _ui.add_texture(card, "Day", _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_day%s_png" % day), day_positions[index], Vector2(42.0, 16.0), TextureRect.STRETCH_KEEP_ASPECT_CENTERED)
day_img.rotation_degrees = float(rotations[index])
_ui.add_texture(card, "Icon", _texture_provider.common("item_bg"), Vector2(22.0, 42.0), Vector2(64.0, 64.0))
_ui.add_panel_label(card, "Num", "x0", Vector2(58.0, 101.0), Vector2(62.0, 28.0), 24, Color.html("#b36011"), 2, Color.html("#fcd394"), HORIZONTAL_ALIGNMENT_LEFT)
_ui.add_texture(card, "Get", _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_get_png"), Vector2(30.0, 88.0), Vector2(41.0, 35.0))
var sign_button: Control = _ui.add_texture_button(_panel, "SignButton", _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_getbutton_png"), panel_origin + Vector2(180.0, 595.0), Vector2(160.0, 57.0), "签到", Callable(self, "_sign_today"), 28)
var remedy_button: Control = _ui.add_texture_button(_panel, "RemedyButton", _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_btn_wood_png"), Vector2(357.0, 741.0), Vector2(121.0, 49.0), "补签", Callable(self, "_remedy_sign"), 24)
_style_label(sign_button.get_node("Label") as Label, 28, Color.WHITE, 2, Color.html("#643591"))
_style_label(remedy_button.get_node("Label") as Label, 24, Color.WHITE, 2, Color.html("#7d1c1c"))
_ui.add_panel_label(_panel, "SignCardNum", "", Vector2(326.0, 797.0), Vector2(185.0, 28.0), 18, Color.WHITE, 2, Color.html("#724f2e"))
_ui.add_texture_button(_panel, "PanelClose", _texture_provider.common("c_btn1"), Vector2(220.0, 813.0), Vector2(200.0, 70.0), "离开", Callable(self, "_close_modal").bind(true), 36)
_open_modal(_panel)
await render()
func render() -> void:
var panel := _panel
if not _is_current_node(panel, _panel):
return
var result: Dictionary = await _activity_api.fetch_sign_list(_token())
if not _is_current_node(panel, _panel):
return
if not result.get("ok", false):
_show_toast(_response_status_text(result, "签到读取失败"))
_rows = _game_config.get_sign_config()
_signed_days.clear()
_claimed_reward_days.clear()
_continue_count = 0
var data = _response_data(result, {})
if data is Dictionary:
for row in data.get("list", []):
if row is Dictionary:
_signed_days.append(_weekday_for_unix(int(row.get("sign_time", 0))))
var continue_rows = data.get("continue_list", [])
if continue_rows is Array:
_continue_count = continue_rows.size()
for row in continue_rows:
if row is Dictionary:
var reward_day := int(row.get("count", 0))
if reward_day > 0 and not _claimed_reward_days.has(reward_day):
_claimed_reward_days.append(reward_day)
for day in range(1, 8):
var card := panel.get_node_or_null("SignCard%s" % day) as Control
var sign_config := _find_config_by_id(_rows, day)
if card == null or sign_config.is_empty():
continue
var reward_costs := _parse_cost_string(str(sign_config.get("days_id", "")))
var first_reward := reward_costs[0] if not reward_costs.is_empty() else {"item_id": 105002, "count": 0}
var icon := card.get_node_or_null("Icon") as TextureRect
if icon != null:
icon.texture = _get_item_icon_texture(_game_config.get_item_icon_id(int(first_reward.get("item_id", 0))))
var num_label := card.get_node_or_null("Num") as Label
if num_label != null:
num_label.text = "x%s" % int(first_reward.get("count", 0))
var get_img := card.get_node_or_null("Get") as TextureRect
if get_img != null:
get_img.visible = _signed_days.has(day)
var signed_count := _running_count()
_update_progress_bar(panel, "Progress", signed_count)
_update_line_segments(panel)
_update_reward_boxes(panel, signed_count)
var day_label := panel.get_node_or_null("SignedDayNum") as Label
if day_label != null:
day_label.text = str(signed_count)
var card_count := _owned_amount(_remedy_item_id)
var card_label := panel.get_node_or_null("SignCardNum") as Label
if card_label != null:
card_label.text = I18nScript.t("剩余补签卡%s" % card_count)
var can_sign := not _signed_days.has(_today_weekday())
_set_texture_button_enabled(panel.get_node_or_null("SignButton") as Control, can_sign, _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_getbutton_png"), _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_getbutton_d_png"))
func _sign_today() -> void:
if _is_busy():
return
if _signed_days.has(_today_weekday()):
_show_toast("今日已签到")
return
_set_busy(true)
var result: Dictionary = await _activity_api.sign_today(_token())
_set_busy(false)
if not result.get("ok", false):
_show_toast(_response_status_text(result, "签到失败"))
return
var config := _find_config_by_id(_game_config.get_sign_config(), _today_weekday())
var reward := str(config.get("days_id", ""))
_add_reward_items(reward)
_show_toast("签到成功")
await _refresh_store_house()
await render()
_update_sign_reward_popup()
func _remedy_sign() -> void:
if _is_busy():
return
var day := _remedy_day()
if day <= 0:
_show_toast("当前不能补签")
return
if _owned_amount(_remedy_item_id) <= 0:
_show_toast("补签卡不足")
return
_set_busy(true)
var result: Dictionary = await _activity_api.remedy_sign(_token())
_set_busy(false)
if not result.get("ok", false):
_show_toast(_response_status_text(result, "补签失败"))
return
var config := _find_config_by_id(_game_config.get_sign_config(), day)
_add_reward_items(str(config.get("days_id", "")))
_decrease_warehouse_item(_remedy_item_id, 1)
_show_toast("补签成功")
await _refresh_store_house()
await render()
_update_sign_reward_popup()
func _open_sign_reward_popup() -> void:
if not _is_current_node(_panel, _panel):
return
_close_sign_reward_popup()
_sign_reward_popup = Control.new()
_sign_reward_popup.name = "SignRewardPopup"
_sign_reward_popup.position = Vector2.ZERO
_sign_reward_popup.size = _panel_screen_size
_sign_reward_popup.mouse_filter = Control.MOUSE_FILTER_STOP
_sign_reward_popup.z_index = 80
_panel.add_child(_sign_reward_popup)
var mask := Button.new()
mask.name = "Mask"
mask.position = Vector2.ZERO
mask.size = _panel_screen_size
mask.focus_mode = Control.FOCUS_NONE
_apply_empty_button_style(mask)
mask.pressed.connect(Callable(self, "_close_sign_reward_popup"))
_sign_reward_popup.add_child(mask)
_ui.add_scale9_patch(_sign_reward_popup, "PopupBg", _texture_provider.common("c_panel2"), Vector2(41.0, 226.0), Vector2(559.0, 519.0), Rect2(117.0, 55.0, 7.0, 9.0))
_add_sign_progress_bar(_sign_reward_popup, "PopupProgress", Vector2(126.5, 370.0))
_ui.add_texture(_sign_reward_popup, "PopupRewardBg", _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_dikuang_png"), Vector2(92.0, 434.0), Vector2(456.0, 227.0))
_ui.add_texture(_sign_reward_popup, "PopupTitle", _texture_provider.frame(_texture_provider.atlas_path("sign"), "panel_title_sign_png"), Vector2(237.0, 194.0), Vector2(140.0, 82.0), TextureRect.STRETCH_KEEP_ASPECT_CENTERED)
_ui.add_scale9_patch(_sign_reward_popup, "PopupDayBg", _texture_provider.frame(_texture_provider.atlas_path("sign"), "inp_day_bg_png"), Vector2(319.0, 278.0), Vector2(85.0, 25.0), Rect2(14.0, 12.0, 2.0, 1.0))
_ui.add_panel_label(_sign_reward_popup, "PopupWeekTextA", "本周已累计签到", Vector2(172.0, 282.0), Vector2(170.0, 30.0), 20, Color.html("#fffbf2"), 2, Color.html("#724f2e"), HORIZONTAL_ALIGNMENT_LEFT)
_ui.add_panel_label(_sign_reward_popup, "PopupSignedDayNum", "0", Vector2(328.0, 273.0), Vector2(65.0, 35.0), 30, Color.html("#fff500"), 2, Color.html("#724f2e"))
_ui.add_panel_label(_sign_reward_popup, "PopupWeekTextB", "", Vector2(405.0, 280.0), Vector2(32.0, 30.0), 20, Color.html("#fffbf2"), 2, Color.html("#724f2e"), HORIZONTAL_ALIGNMENT_LEFT)
var popup_box_x := [184.0, 318.0, 463.0]
var popup_box_y := [304.0, 304.0, 304.0]
for index in range(3):
var box_key := "sign_box0_png" if index == 0 else ("sign_box1_png" if index == 1 else "sign_box2_png")
var box_size := Vector2(88.0, 89.0) if index == 0 else (Vector2(95.0, 91.0) if index == 1 else Vector2(95.0, 84.0))
_ui.add_texture(_sign_reward_popup, "PopupRewardBox%s" % index, _texture_provider.frame(_texture_provider.atlas_path("sign"), box_key), Vector2(float(popup_box_x[index]), float(popup_box_y[index])), box_size, TextureRect.STRETCH_KEEP_ASPECT_CENTERED)
_ui.add_panel_label(_sign_reward_popup, "PopupRewardBoxLabel%s" % index, "%s" % int(SIGN_REWARD_DAYS[index]), Vector2(292.0 + 94.0 * index, 400.0), Vector2(54.0, 28.0), 20, Color.html("#fffbf2"), 2, Color.html("#724f2e"))
var item_positions := [Vector2(126.0, 469.0), Vector2(275.0, 469.0), Vector2(417.0, 470.0)]
for index in range(3):
var item := Control.new()
item.name = "PopupRewardItem%s" % index
item.position = item_positions[index]
item.size = Vector2(90.0, 90.0)
item.mouse_filter = Control.MOUSE_FILTER_IGNORE
_sign_reward_popup.add_child(item)
_ui.add_texture(item, "Bg", _texture_provider.common("item_bg"), Vector2.ZERO, Vector2(90.0, 90.0))
_ui.add_texture(item, "Icon", _texture_provider.common("item_bg"), Vector2(12.0, 12.0), Vector2(66.0, 66.0), TextureRect.STRETCH_KEEP_ASPECT_CENTERED)
_ui.add_panel_label(item, "Num", "", Vector2(0.0, 65.0), Vector2(90.0, 22.0), 22, Color.html("#7d1c1c"), 0, Color.TRANSPARENT, HORIZONTAL_ALIGNMENT_RIGHT)
var get_button: Control = _ui.add_texture_button(_sign_reward_popup, "PopupClaim", _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_getbutton_png"), Vector2(240.0, 569.0), Vector2(160.0, 57.0), "领取", Callable(self, "_claim_continue_reward"), 28)
_style_label(get_button.get_node("Label") as Label, 28, Color.WHITE, 2, Color.html("#643591"))
var close_button: Control = _ui.add_texture_button(_sign_reward_popup, "PopupClose", _texture_provider.common("c_btn3"), Vector2(237.0, 679.0), Vector2(166.0, 58.0), "离开", Callable(self, "_close_sign_reward_popup"), 30)
_style_label(close_button.get_node("Label") as Label, 30, Color.WHITE, 2, Color.html("#7d1c1c"))
_update_sign_reward_popup()
func _close_sign_reward_popup() -> void:
if _sign_reward_popup == null or not is_instance_valid(_sign_reward_popup):
_sign_reward_popup = null
return
_sign_reward_popup.queue_free()
_sign_reward_popup = null
func _claim_continue_reward() -> void:
if _is_busy():
return
var reward_day := _next_continue_reward_day()
if reward_day <= 0:
_show_toast("没有可领取的连续签到奖励")
return
var user_id := _player_id()
if user_id <= 0:
_show_toast("玩家信息缺失")
return
_set_busy(true)
var result: Dictionary = await _activity_api.claim_continue_sign_gift(_token(), user_id, reward_day)
_set_busy(false)
if not result.get("ok", false):
_show_toast(_response_status_text(result, "领取连续签到奖励失败"))
return
var config := _find_config_by_id(_game_config.get_sign_config(), reward_day)
_add_reward_items(str(config.get("accumulation_id", "")))
_show_toast("领取成功")
await _refresh_store_house()
await render()
_update_sign_reward_popup()
func _weekday_for_unix(unix_time: int) -> int:
if unix_time <= 0:
return 1
var dt := Time.get_datetime_dict_from_unix_time(unix_time)
var weekday := int(dt.get("weekday", 1))
return 7 if weekday == 0 else weekday
func _today_weekday() -> int:
return _weekday_for_unix(int(Time.get_unix_time_from_system()))
func _running_count() -> int:
var current := 0
var max_count := 0
for day in range(1, 8):
if _signed_days.has(day):
current += 1
max_count = maxi(max_count, current)
else:
current = 0
return max_count
func _eligible_reward_box_count(signed_count: int) -> int:
if signed_count >= 7:
return 3
if signed_count >= 5:
return 2
if signed_count >= 3:
return 1
return 0
func _next_continue_reward_day() -> int:
var eligible_count := _eligible_reward_box_count(_running_count())
for index in range(mini(eligible_count, SIGN_REWARD_DAYS.size())):
var reward_day := int(SIGN_REWARD_DAYS[index])
if not _claimed_reward_days.has(reward_day):
return reward_day
return 0
func _display_continue_reward_day() -> int:
var next_day := _next_continue_reward_day()
return next_day if next_day > 0 else 7
func _add_sign_progress_bar(parent: Control, name: String, position: Vector2) -> Control:
_ui.add_scale9_patch(parent, "%sBg" % name, _texture_provider.frame(_texture_provider.atlas_path("common2"), "common2_prossbarbg_png"), position, SIGN_PROGRESS_BG_SIZE, Rect2(40.0, 12.0, 40.0, 12.0))
var clip := Control.new()
clip.name = "%sClip" % name
clip.position = position + Vector2(2.0, 2.0)
clip.size = SIGN_PROGRESS_SIZE
clip.clip_contents = true
clip.mouse_filter = Control.MOUSE_FILTER_IGNORE
parent.add_child(clip)
_ui.add_texture(clip, "Art", _texture_provider.frame(_texture_provider.atlas_path("common2"), "common2_prossbar_png"), Vector2.ZERO, SIGN_PROGRESS_SIZE)
return clip
func _update_progress_bar(parent: Control, name: String, signed_count: int) -> void:
var clip := parent.get_node_or_null("%sClip" % name) as Control
if clip == null:
return
var ratio := clampf(float(signed_count) / 7.0, 0.0, 1.0)
clip.visible = ratio > 0.0
clip.size.x = floorf(SIGN_PROGRESS_MAX_WIDTH * ratio)
func _update_line_segments(panel: Control) -> void:
var root := panel.get_node_or_null("LineOpenSegments") as Control
if root == null:
return
for child in root.get_children():
root.remove_child(child)
child.queue_free()
var line_texture: Texture2D = _texture_provider.standalone("res://assets/egret/assets/game/sign/sign_line_open.png")
var line_position := Vector2(100.0, 474.0)
var mask_origin := Vector2(90.0, 468.0)
for index in range(mini(SIGN_LINE_MASK_RECTS.size(), 7)):
var day := index + 1
if not _signed_days.has(day):
continue
var rect: Rect2 = SIGN_LINE_MASK_RECTS[index]
var clip := Control.new()
clip.name = "LineOpenDay%s" % day
clip.position = mask_origin + rect.position
clip.size = rect.size
clip.clip_contents = true
clip.mouse_filter = Control.MOUSE_FILTER_IGNORE
root.add_child(clip)
_ui.add_texture(clip, "Art", line_texture, line_position - clip.position, Vector2(453.0, 238.0), TextureRect.STRETCH_KEEP_ASPECT_CENTERED)
func _update_reward_boxes(panel: Control, signed_count: int) -> void:
var eligible_count := _eligible_reward_box_count(signed_count)
for index in range(3):
var holder := panel.get_node_or_null("RewardBox%s" % index) as Control
if holder == null:
continue
var art := holder.get_node_or_null("Art") as TextureRect
if art == null:
continue
var box_key := "sign_box1_png" if eligible_count > index else ("sign_box2_png" if index == 2 else "sign_box0_png")
art.texture = _texture_provider.frame(_texture_provider.atlas_path("sign"), box_key)
func _update_sign_reward_popup() -> void:
if _sign_reward_popup == null or not is_instance_valid(_sign_reward_popup):
return
var signed_count := _running_count()
_update_progress_bar(_sign_reward_popup, "PopupProgress", signed_count)
var day_label := _sign_reward_popup.get_node_or_null("PopupSignedDayNum") as Label
if day_label != null:
day_label.text = str(signed_count)
var eligible_count := _eligible_reward_box_count(signed_count)
for index in range(3):
var box := _sign_reward_popup.get_node_or_null("PopupRewardBox%s" % index) as TextureRect
if box != null:
var box_key := "sign_box1_png" if eligible_count > index else ("sign_box2_png" if index == 2 else "sign_box0_png")
box.texture = _texture_provider.frame(_texture_provider.atlas_path("sign"), box_key)
var reward_day := _display_continue_reward_day()
var reward_config := _find_config_by_id(_rows, reward_day)
var rewards := _parse_cost_string(str(reward_config.get("accumulation_id", "")))
for index in range(3):
var item := _sign_reward_popup.get_node_or_null("PopupRewardItem%s" % index) as Control
if item == null:
continue
var has_reward := index < rewards.size()
item.visible = has_reward
if not has_reward:
continue
var reward := rewards[index]
var icon := item.get_node_or_null("Icon") as TextureRect
if icon != null:
icon.texture = _get_item_icon_texture(_game_config.get_item_icon_id(int(reward.get("item_id", 0))))
var num := item.get_node_or_null("Num") as Label
if num != null:
num.text = "X%s" % int(reward.get("count", 0))
var can_claim := _next_continue_reward_day() > 0
_set_texture_button_enabled(_sign_reward_popup.get_node_or_null("PopupClaim") as Control, can_claim, _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_getbutton_png"), _texture_provider.frame(_texture_provider.atlas_path("sign"), "sign_getbutton_d_png"))
func _remedy_day() -> int:
var today := _today_weekday()
for day in range(today - 1, 0, -1):
if not _signed_days.has(day):
return day
return 0