71 lines
3.4 KiB
GDScript
71 lines
3.4 KiB
GDScript
class_name SkillScreen
|
|
extends Control
|
|
## Skilltree: oben Level, Erfahrung bis zum nächsten Level und freie Skillpunkte; darunter drei
|
|
## Äste (Skills.BRANCHES) mit ihren Skills als Karten: Name, Wirkung, aktuelle und nächste Stufe
|
|
## in Zahlen (Skills.effect), Stufe und „Lernen“.
|
|
|
|
var app
|
|
var level_label: Label
|
|
var xp_label: Label
|
|
var points_label: Label
|
|
var msg_label: Label
|
|
var learn_buttons := {} # Skill-ID -> Knopf
|
|
var rank_labels := {} # Skill-ID -> Label
|
|
var now_labels := {} # Skill-ID -> Wirkung jetzt
|
|
var next_labels := {} # Skill-ID -> Wirkung der nächsten Stufe
|
|
|
|
|
|
func _ready() -> void:
|
|
Style.header(self, "Skilltree", func(): app.show_screen(MenuScreen.new()))
|
|
level_label = Style.chip(self, "", Rect2(40, 86, 220, 38))
|
|
xp_label = Style.chip(self, "", Rect2(276, 86, 400, 38), Style.BLUE)
|
|
points_label = Style.chip(self, "", Rect2(692, 86, 300, 38), Style.GREEN)
|
|
Style.label(self, "Erfahrung sind deine verdienten Münzen. Jedes Level bringt einen Skillpunkt.", 14, Style.MUTED, Rect2(40, 134, 1200, 22), "left")
|
|
for b in Skills.BRANCHES.size():
|
|
var branch: String = Skills.BRANCHES[b]
|
|
var x := 40 + b * 410
|
|
Style.panel(self, Rect2(x, 170, 390, 580))
|
|
Style.label(self, branch, 22, Style.GOLD, Rect2(x, 184, 390, 32), "center", true)
|
|
var y := 236
|
|
for id in Skills.in_branch(branch):
|
|
var sk: Dictionary = Skills.SKILLS[id]
|
|
Style.panel(self, Rect2(x + 16, y, 358, 176), Style.PANEL_LIGHT, 8)
|
|
Style.label(self, sk.name, 18, Style.TEXT, Rect2(x + 32, y + 10, 326, 26), "left", true)
|
|
Style.label(self, sk.text, 14, Style.MUTED, Rect2(x + 32, y + 38, 326, 22), "left")
|
|
now_labels[id] = Style.label(self, "", 14, Style.TEXT, Rect2(x + 32, y + 64, 326, 22), "left")
|
|
next_labels[id] = Style.label(self, "", 14, Style.GREEN, Rect2(x + 32, y + 86, 326, 22), "left")
|
|
rank_labels[id] = Style.label(self, "", 15, Style.GOLD, Rect2(x + 32, y + 126, 150, 30), "left", true)
|
|
learn_buttons[id] = Style.button(self, "Lernen", Rect2(x + 214, y + 122, 144, 40), learn.bind(id), Style.PRIMARY)
|
|
y += 192
|
|
msg_label = Style.label(self, "", 15, Style.RED, Rect2(0, 760, 1280, 24), "center")
|
|
refresh()
|
|
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
if event.is_action_pressed("ui_cancel"):
|
|
app.show_screen(MenuScreen.new())
|
|
|
|
|
|
func learn(id: String) -> void:
|
|
var err: String = app.profile.learn(id)
|
|
msg_label.text = tr(err) if err != "" else ""
|
|
if err == "":
|
|
app.sfx.play("combo")
|
|
app.save()
|
|
refresh()
|
|
|
|
|
|
func refresh() -> void:
|
|
var p: Profile = app.profile
|
|
var lvl := p.player_level()
|
|
var base := Skills.xp_for_level(lvl)
|
|
level_label.text = tr("Level %d") % lvl
|
|
xp_label.text = tr("%d / %d EP bis Level %d") % [p.xp - base, Skills.xp_for_level(lvl + 1) - base, lvl + 1]
|
|
points_label.text = tr("Skillpunkte: %d") % p.skill_points()
|
|
for id in Skills.SKILLS:
|
|
var sk: Dictionary = Skills.SKILLS[id]
|
|
rank_labels[id].text = tr("Stufe %d / %d") % [p.skill(id), int(sk.max)]
|
|
now_labels[id].text = tr("Jetzt: %s") % Skills.effect(id, p.skill(id))
|
|
next_labels[id].text = tr("Nächste Stufe: %s") % Skills.effect(id, p.skill(id) + 1) if p.skill(id) < int(sk.max) else tr("Höchste Stufe erreicht")
|
|
learn_buttons[id].disabled = p.skill_points() <= 0 or p.skill(id) >= int(sk.max)
|