feat(meta): 主菜单解锁面板(花碎片解锁法术)
This commit is contained in:
@@ -5,6 +5,8 @@ var _settings_layer: CanvasLayer = null
|
||||
var _settings_root: Control = null
|
||||
var _leaderboard_layer: CanvasLayer = null
|
||||
var _ftue_layer: CanvasLayer = null
|
||||
var _unlock_layer: CanvasLayer = null
|
||||
var _unlock_root: Control = null
|
||||
var _continue_btn: Button = null
|
||||
var _quit_confirm: bool = false
|
||||
|
||||
@@ -15,6 +17,7 @@ func _ready() -> void:
|
||||
_build_settings_panel()
|
||||
_build_leaderboard_panel()
|
||||
_build_ftue_panel()
|
||||
_build_unlock_panel()
|
||||
|
||||
func _build_bg() -> void:
|
||||
# 深色渐变背景
|
||||
@@ -49,6 +52,7 @@ func _build_menu() -> void:
|
||||
["MENU_NEW_GAME", _on_new_game],
|
||||
["MENU_CONTINUE", _on_continue],
|
||||
["MENU_LEADERBOARD", _on_leaderboard],
|
||||
["MENU_UNLOCK", _on_unlock],
|
||||
["MENU_SETTINGS", _on_settings],
|
||||
["MENU_QUIT", _on_quit],
|
||||
]
|
||||
@@ -121,11 +125,13 @@ func _on_lang() -> void:
|
||||
c.queue_free()
|
||||
_settings_layer = null
|
||||
_leaderboard_layer = null
|
||||
_unlock_layer = null
|
||||
_settings_root = null
|
||||
_build_bg()
|
||||
_build_menu()
|
||||
_build_settings_panel()
|
||||
_build_leaderboard_panel()
|
||||
_build_unlock_panel()
|
||||
|
||||
func _on_quit() -> void:
|
||||
if not _quit_confirm:
|
||||
@@ -154,6 +160,8 @@ func _input(event: InputEvent) -> void:
|
||||
_settings_layer.visible = false
|
||||
elif _leaderboard_layer and _leaderboard_layer.visible:
|
||||
_leaderboard_layer.visible = false
|
||||
elif _unlock_layer and _unlock_layer.visible:
|
||||
_unlock_layer.visible = false
|
||||
|
||||
# ── 设置面板 ─────────────────────────────────────────────────
|
||||
func _build_settings_panel() -> void:
|
||||
@@ -351,3 +359,77 @@ func _on_ftue_pick(difficulty_idx: int) -> void:
|
||||
AudioManager.play("buy")
|
||||
_ftue_layer.visible = false
|
||||
SceneManager.start_new_game()
|
||||
|
||||
# ── 解锁面板 ─────────────────────────────────────────────────
|
||||
func _on_unlock() -> void:
|
||||
_unlock_layer.visible = true
|
||||
_rebuild_unlock()
|
||||
|
||||
func _build_unlock_panel() -> void:
|
||||
_unlock_layer = CanvasLayer.new()
|
||||
_unlock_layer.layer = 10
|
||||
_unlock_layer.visible = false
|
||||
add_child(_unlock_layer)
|
||||
var bg := ColorRect.new()
|
||||
bg.color = Color(0.0, 0.0, 0.0, 0.72)
|
||||
bg.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||
_unlock_layer.add_child(bg)
|
||||
_unlock_root = Control.new()
|
||||
_unlock_layer.add_child(_unlock_root)
|
||||
|
||||
func _rebuild_unlock() -> void:
|
||||
for c in _unlock_root.get_children():
|
||||
c.queue_free()
|
||||
var panel := ColorRect.new()
|
||||
panel.color = Color(0.06, 0.06, 0.14, 0.98)
|
||||
panel.size = Vector2(560, 470)
|
||||
panel.position = Vector2(300, 90)
|
||||
_unlock_root.add_child(panel)
|
||||
var title := Label.new()
|
||||
title.text = tr("META_TITLE")
|
||||
title.position = Vector2(324, 106)
|
||||
title.add_theme_font_size_override("font_size", 28)
|
||||
title.modulate = Color.GOLD
|
||||
_unlock_root.add_child(title)
|
||||
var aether_lbl := Label.new()
|
||||
aether_lbl.text = tr("META_AETHER") % MetaProgress.aether
|
||||
aether_lbl.position = Vector2(324, 148)
|
||||
aether_lbl.add_theme_font_size_override("font_size", 18)
|
||||
aether_lbl.modulate = Color(0.6, 0.85, 1.0)
|
||||
_unlock_root.add_child(aether_lbl)
|
||||
var y: float = 188.0
|
||||
for id in SpellRegistry.get_all_ids():
|
||||
var s: SpellNode = SpellRegistry.get_spell(id)
|
||||
if s == null:
|
||||
continue
|
||||
var cost: int = int(s.meta.get("unlock_cost", 0))
|
||||
if cost <= 0:
|
||||
continue
|
||||
var name_lbl := Label.new()
|
||||
name_lbl.text = s.display_name
|
||||
name_lbl.position = Vector2(324, y + 4)
|
||||
name_lbl.add_theme_font_size_override("font_size", 16)
|
||||
_unlock_root.add_child(name_lbl)
|
||||
var btn := Button.new()
|
||||
btn.position = Vector2(560, y)
|
||||
btn.size = Vector2(230, 32)
|
||||
if MetaProgress.is_unlocked(id):
|
||||
btn.text = tr("META_UNLOCKED")
|
||||
btn.disabled = true
|
||||
else:
|
||||
btn.text = tr("META_UNLOCK_BTN") % cost
|
||||
btn.disabled = MetaProgress.aether < cost
|
||||
var sid := id
|
||||
var scost := cost
|
||||
btn.connect("pressed", func():
|
||||
if MetaProgress.unlock(sid, scost):
|
||||
AudioManager.play("buy")
|
||||
_rebuild_unlock())
|
||||
_unlock_root.add_child(btn)
|
||||
y += 40.0
|
||||
var close := Button.new()
|
||||
close.text = tr("META_CLOSE")
|
||||
close.position = Vector2(700, 508)
|
||||
close.size = Vector2(120, 36)
|
||||
close.connect("pressed", func(): _unlock_layer.visible = false)
|
||||
_unlock_root.add_child(close)
|
||||
|
||||
Reference in New Issue
Block a user