way too many changes to list, oops. big rewrite.
This commit is contained in:
3
Scenes/Menus/CharacterSelect/character_podium.gd
Normal file
3
Scenes/Menus/CharacterSelect/character_podium.gd
Normal file
@ -0,0 +1,3 @@
|
||||
class_name CharacterPodium extends Node3D
|
||||
|
||||
@export var text: String = ""
|
1
Scenes/Menus/CharacterSelect/character_podium.gd.uid
Normal file
1
Scenes/Menus/CharacterSelect/character_podium.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://bc0xyfr5nj1ul
|
41
Scenes/Menus/CharacterSelect/character_preview.gd
Normal file
41
Scenes/Menus/CharacterSelect/character_preview.gd
Normal file
@ -0,0 +1,41 @@
|
||||
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 = 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(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 = 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] = []
|
||||
var new_label: Label = Label.new()
|
||||
new_label.text = text
|
||||
tower_label_container.add_child(new_label)
|
||||
regular_label = new_label
|
1
Scenes/Menus/CharacterSelect/character_preview.gd.uid
Normal file
1
Scenes/Menus/CharacterSelect/character_preview.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://b1ucgfqilvr67
|
78
Scenes/Menus/CharacterSelect/character_select.gd
Normal file
78
Scenes/Menus/CharacterSelect/character_select.gd
Normal file
@ -0,0 +1,78 @@
|
||||
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
|
||||
#if Data.save_data.mage_unlocked:
|
||||
#podiums.visible = true
|
||||
|
||||
|
||||
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):
|
||||
$VBoxContainer/Button.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:
|
||||
$VBoxContainer/Button.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()
|
1
Scenes/Menus/CharacterSelect/character_select.gd.uid
Normal file
1
Scenes/Menus/CharacterSelect/character_select.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://plrd0ckxrabh
|
104
Scenes/Menus/CharacterSelect/character_select.tscn
Normal file
104
Scenes/Menus/CharacterSelect/character_select.tscn
Normal file
@ -0,0 +1,104 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://bc6m3cluulpis"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://plrd0ckxrabh" path="res://Scenes/Menus/CharacterSelect/character_select.gd" id="1_lqqhx"]
|
||||
[ext_resource type="Script" uid="uid://b1ucgfqilvr67" path="res://Scenes/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 = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 100.0
|
||||
offset_top = -91.5
|
||||
offset_right = 299.0
|
||||
offset_bottom = 91.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"]
|
||||
layout_mode = 2
|
||||
text = "character name"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Label2" type="Label" parent="PanelContainer/HBoxContainer2"]
|
||||
layout_mode = 2
|
||||
text = "------------------------"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="VBoxContainer" parent="PanelContainer/HBoxContainer2"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -20.0
|
||||
offset_top = -40.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = -150.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Button2" type="Button" parent="VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "prev"
|
||||
|
||||
[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "next"
|
||||
|
||||
[node name="Button" type="Button" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Confirm"
|
||||
|
||||
[node name="Podiums" type="Node3D" parent="."]
|
||||
|
||||
[connection signal="pressed" from="VBoxContainer/HBoxContainer/Button2" to="." method="retreat_selector"]
|
||||
[connection signal="pressed" from="VBoxContainer/HBoxContainer/Button" to="." method="advance_selector"]
|
||||
[connection signal="pressed" from="VBoxContainer/Button" to="." method="_on_confirm_button_pressed"]
|
@ -1,19 +0,0 @@
|
||||
class_name HeroSelector extends Control
|
||||
|
||||
signal hero_selected(hero_class: int)
|
||||
|
||||
@export var hero_card_scene: PackedScene
|
||||
@export var hbox: HBoxContainer
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
for hero: HeroClass in Data.characters:
|
||||
var card: Control = hero_card_scene.instantiate()
|
||||
card.set_hero(hero)
|
||||
card.pressed.connect(func(x: int) -> void: hero_selected.emit(x))
|
||||
card.button_mouse_entered.connect(_on_button_mouse_entered)
|
||||
hbox.add_child(card)
|
||||
|
||||
|
||||
func _on_button_mouse_entered() -> void:
|
||||
$AudioStreamPlayer.play()
|
@ -1,49 +0,0 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://dqqitmhu66a7d"]
|
||||
|
||||
[ext_resource type="Script" path="res://Scenes/Menus/CharacterSelect/charselect.gd" id="1_h2h26"]
|
||||
[ext_resource type="PackedScene" uid="uid://bnsf2degj5tio" path="res://Scenes/UI/hero_card.tscn" id="1_v2mfo"]
|
||||
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="3_ho1fl"]
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ehpk7"]
|
||||
random_pitch = 1.1
|
||||
streams_count = 1
|
||||
stream_0/stream = ExtResource("3_ho1fl")
|
||||
stream_0/weight = 1.0
|
||||
|
||||
[node name="Control" type="Control" node_paths=PackedStringArray("hbox")]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("1_h2h26")
|
||||
hero_card_scene = ExtResource("1_v2mfo")
|
||||
hbox = NodePath("CenterContainer/VBoxContainer/HBoxContainer")
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="CenterContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Choose your hero"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||
stream = SubResource("AudioStreamRandomizer_ehpk7")
|
||||
bus = &"SFX"
|
Reference in New Issue
Block a user