class_name GameMenuPartyTab extends Control func refresh() -> void: var list = $ScrollContainer/MemberList for child in list.get_children(): child.queue_free() for member in PARTY.getFullParty(): list.add_child(_makeMemberCard(member)) func _makeMemberCard(member:PartyMember) -> Control: var panel = PanelContainer.new() var margin = MarginContainer.new() panel.add_child(margin) margin.add_theme_constant_override("margin_left", 8) margin.add_theme_constant_override("margin_right", 8) margin.add_theme_constant_override("margin_top", 6) margin.add_theme_constant_override("margin_bottom", 6) var vbox = VBoxContainer.new() margin.add_child(vbox) # Name + status row var headerRow = HBoxContainer.new() vbox.add_child(headerRow) var nameLabel = Label.new() nameLabel.text = member.name nameLabel.size_flags_horizontal = Control.SIZE_EXPAND_FILL headerRow.add_child(nameLabel) var statusLabel = Label.new() statusLabel.text = "DEAD" if member.status == BattleFighter.Status.DEAD else "OK" headerRow.add_child(statusLabel) # HP row var hpRow = HBoxContainer.new() hpRow.add_theme_constant_override("separation", 6) vbox.add_child(hpRow) var hpKey = Label.new() hpKey.text = "HP" hpKey.custom_minimum_size = Vector2(30, 0) hpRow.add_child(hpKey) var hpVal = Label.new() hpVal.text = "%d / %d" % [member.health, member.maxHealth] hpRow.add_child(hpVal) # MP row var mpRow = HBoxContainer.new() mpRow.add_theme_constant_override("separation", 6) vbox.add_child(mpRow) var mpKey = Label.new() mpKey.text = "MP" mpKey.custom_minimum_size = Vector2(30, 0) mpRow.add_child(mpKey) var mpVal = Label.new() mpVal.text = "%d / %d" % [member.mp, member.maxMp] mpRow.add_child(mpVal) # Stats row var statsRow = HBoxContainer.new() statsRow.add_theme_constant_override("separation", 14) vbox.add_child(statsRow) for pair in [["ATK", member.attack], ["DEF", member.defense], ["SPD", member.speed], ["MAG", member.magic], ["LCK", member.luck]]: var label = Label.new() label.text = "%s %d" % [pair[0], pair[1]] statsRow.add_child(label) return panel