more work on the ui theme and changing the hud

This commit is contained in:
2025-11-05 08:28:07 +11:00
parent 2f4159ebbe
commit f257a5df68
187 changed files with 806 additions and 799 deletions

View File

@@ -0,0 +1,7 @@
class_name CharacterPodium extends Node3D
@export var text: String = ""
func show_content() -> void:
$Base/Content.visible = true

View File

@@ -0,0 +1 @@
uid://bc0xyfr5nj1ul

View File

@@ -0,0 +1,40 @@
class_name CharacterPreview extends PanelContainer
@export var tower_label_scene: PackedScene
@export var tower_label_container: VBoxContainer
@export var hero_name_label: Label
var added_tags: Array[TowerLabel] = []
var regular_label: Label = null
func set_preview(hero: HeroClass) -> void:
hero_name_label.text = tr(hero.hero_name)
if regular_label:
regular_label.queue_free()
regular_label = null
for tag: TowerLabel in added_tags:
tag.queue_free()
added_tags = []
var added_labels: Array[Card] = []
for card: Card in hero.deck:
if !added_labels.has(card):
var new_label: TowerLabel = tower_label_scene.instantiate() as TowerLabel
new_label.change_label(tr(card.display_name), str(hero.deck.count(card)))
added_labels.append(card)
tower_label_container.add_child(new_label)
added_tags.append(new_label)
func setup_with_basic_text(hero: HeroClass, text: String) -> void:
hero_name_label.text = tr(hero.hero_name)
if regular_label:
regular_label.queue_free()
regular_label = null
for tag: TowerLabel in added_tags:
tag.queue_free()
added_tags = []
var new_label: Label = Label.new()
new_label.text = text
tower_label_container.add_child(new_label)
regular_label = new_label

View File

@@ -0,0 +1 @@
uid://b1ucgfqilvr67

View File

@@ -0,0 +1,79 @@
class_name CharacterSelect extends Node3D
signal hero_selected(hero_class: int)
signal hero_confirmed()
@export var hero_preview_panel: CharacterPreview
var podiums: Array[CharacterPodium]
var character_selected: int = 0
var can_hit_button: bool = true
func _ready() -> void:
hero_preview_panel.set_preview(Data.characters[0])
var heroes: int = Data.characters.size()
var x: int = 0
for hero: HeroClass in Data.characters:
var pivot: Node3D = Node3D.new()
$Podiums.add_child(pivot)
var podium: CharacterPodium = hero.podium.instantiate() as CharacterPodium
podium.position = Vector3(0.0, -0.5, 5.0)
podiums.append(podium)
pivot.add_child(podium)
pivot.rotate_y((TAU / heroes) * x)
x += 1
podiums[0].show_content()
if Data.save_data.mage_unlocked:
podiums[1].show_content()
func reset_button() -> void:
can_hit_button = true
func setup_ui() -> void:
#TODO: This should all tie into a proper achievements system
if character_selected == 0 or (character_selected == 1 and Data.save_data.mage_unlocked):
$Controls/ConfirmButton.disabled = false
hero_preview_panel.set_preview(Data.characters[character_selected])
hero_selected.emit(character_selected)
elif character_selected == 1 and !Data.save_data.mage_unlocked and Data.save_data.mage_card_seen_in_shop:
hero_preview_panel.setup_with_basic_text(Data.characters[character_selected], "Buy " + str(Data.save_data.mage_cards_bought) + "/10 scrolls in the shop to unlock")
else:
$Controls/ConfirmButton.disabled = true
hero_preview_panel.setup_with_basic_text(Data.characters[character_selected], podiums[character_selected].text)
func retreat_selector() -> void:
if !can_hit_button:
return
can_hit_button = false
var tween: Tween = create_tween()
tween.set_ease(Tween.EASE_OUT)
tween.set_trans(Tween.TRANS_CUBIC)
tween.tween_property($Node3D, "rotation_degrees", Vector3(0.0, $Node3D.rotation_degrees.y - 90.0, 0.0), 1.0)
tween.tween_callback(reset_button)
character_selected -= 1
if character_selected < 0:
character_selected = Data.characters.size() - 1
setup_ui()
func advance_selector() -> void:
if !can_hit_button:
return
can_hit_button = false
var tween: Tween = create_tween()
tween.set_ease(Tween.EASE_OUT)
tween.set_trans(Tween.TRANS_CUBIC)
tween.tween_property($Node3D, "rotation_degrees", Vector3(0.0, $Node3D.rotation_degrees.y + 90.0, 0.0), 1.0)
tween.tween_callback(reset_button)
character_selected += 1
if character_selected >= Data.characters.size():
character_selected = 0
setup_ui()
func _on_confirm_button_pressed() -> void:
hero_confirmed.emit()

View File

@@ -0,0 +1 @@
uid://plrd0ckxrabh

View File

@@ -0,0 +1,96 @@
[gd_scene load_steps=7 format=3 uid="uid://bc6m3cluulpis"]
[ext_resource type="Script" uid="uid://plrd0ckxrabh" path="res://UI/Menus/CharacterSelect/character_select.gd" id="1_lqqhx"]
[ext_resource type="Script" uid="uid://b1ucgfqilvr67" path="res://UI/Menus/CharacterSelect/character_preview.gd" id="9_8d0rx"]
[ext_resource type="PackedScene" uid="uid://clabkhnbn75rf" path="res://UI/tower_label.tscn" id="10_jdigy"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_tlgw2"]
sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
ground_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
energy_multiplier = 0.0
[sub_resource type="Sky" id="Sky_atdxu"]
sky_material = SubResource("ProceduralSkyMaterial_tlgw2")
[sub_resource type="Environment" id="Environment_pq6wd"]
background_mode = 2
sky = SubResource("Sky_atdxu")
tonemap_mode = 2
glow_enabled = true
[node name="CharacterSelect" type="Node3D" node_paths=PackedStringArray("hero_preview_panel")]
script = ExtResource("1_lqqhx")
hero_preview_panel = NodePath("PanelContainer")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_pq6wd")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0)
light_energy = 0.0
shadow_enabled = true
[node name="Node3D" type="Node3D" parent="."]
[node name="Camera3D" type="Camera3D" parent="Node3D"]
transform = Transform3D(1, 0, 0, 0, 0.976893, 0.21373, 0, -0.21373, 0.976893, 0, 2.25535, 10.9009)
cull_mask = 1047553
fov = 39.4
[node name="PanelContainer" type="PanelContainer" parent="." node_paths=PackedStringArray("tower_label_container", "hero_name_label")]
anchors_preset = -1
anchor_left = 0.05
anchor_top = 0.5
anchor_right = 0.05
anchor_bottom = 0.5
grow_vertical = 2
script = ExtResource("9_8d0rx")
tower_label_scene = ExtResource("10_jdigy")
tower_label_container = NodePath("HBoxContainer2/HBoxContainer")
hero_name_label = NodePath("HBoxContainer2/Label")
[node name="HBoxContainer2" type="VBoxContainer" parent="PanelContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/HBoxContainer2"]
auto_translate_mode = 2
layout_mode = 2
text = "character name"
horizontal_alignment = 1
vertical_alignment = 1
[node name="HSeparator" type="HSeparator" parent="PanelContainer/HBoxContainer2"]
layout_mode = 2
[node name="HBoxContainer" type="VBoxContainer" parent="PanelContainer/HBoxContainer2"]
layout_mode = 2
[node name="Controls" type="VBoxContainer" parent="."]
anchors_preset = -1
anchor_left = 0.5
anchor_top = 0.95
anchor_right = 0.5
anchor_bottom = 0.95
grow_horizontal = 2
grow_vertical = 0
[node name="HBoxContainer" type="HBoxContainer" parent="Controls"]
layout_mode = 2
[node name="PrevButton" type="Button" parent="Controls/HBoxContainer"]
layout_mode = 2
text = "BUTTON_PREVIOUS"
[node name="NextButton" type="Button" parent="Controls/HBoxContainer"]
layout_mode = 2
text = "BUTTON_NEXT"
[node name="ConfirmButton" type="Button" parent="Controls"]
layout_mode = 2
text = "BUTTON_CONFIRM"
[node name="Podiums" type="Node3D" parent="."]
[connection signal="pressed" from="Controls/HBoxContainer/PrevButton" to="." method="retreat_selector"]
[connection signal="pressed" from="Controls/HBoxContainer/NextButton" to="." method="advance_selector"]
[connection signal="pressed" from="Controls/ConfirmButton" to="." method="_on_confirm_button_pressed"]