chore: improve and fix things

This commit is contained in:
Varylios 2025-08-31 16:46:11 +02:00
parent ef1a638466
commit aa7116be5d
12 changed files with 70 additions and 133 deletions

View file

@ -1,53 +1,35 @@
[gd_resource type="Resource" script_class="Level" load_steps=11 format=3 uid="uid://ob41fnhkjr3o"] [gd_resource type="Resource" script_class="Level" load_steps=9 format=3 uid="uid://ob41fnhkjr3o"]
[ext_resource type="Script" uid="uid://cuhq6u67cbbqm" path="res://Scripts/Level.gd" id="1_ftl6b"] [ext_resource type="Script" uid="uid://cuhq6u67cbbqm" path="res://Scripts/Level/Level.gd" id="1_ftl6b"]
[ext_resource type="Script" uid="uid://chu8s12rtdeqx" path="res://Scripts/Wave.gd" id="2_457yt"] [ext_resource type="Script" uid="uid://chu8s12rtdeqx" path="res://Scripts/Level/Wave.gd" id="2_457yt"]
[ext_resource type="Script" uid="uid://blxx3vs2wnfet" path="res://Scripts/Troop.gd" id="3_ub8wd"] [ext_resource type="Script" uid="uid://blxx3vs2wnfet" path="res://Scripts/Level/Troop.gd" id="3_ub8wd"]
[ext_resource type="PackedScene" uid="uid://dknt1oiyei5e5" path="res://enemies/enemy-a.tscn" id="4_ujs1b"] [ext_resource type="PackedScene" uid="uid://dknt1oiyei5e5" path="res://enemies/enemy-a.tscn" id="4_ujs1b"]
[sub_resource type="Resource" id="Resource_1mxdl"]
script = ExtResource("3_ub8wd")
enemy = ExtResource("4_ujs1b")
number_to_spawn = 3
spawn_delay = 0.0
metadata/_custom_type_script = "uid://blxx3vs2wnfet"
[sub_resource type="Resource" id="Resource_87wss"] [sub_resource type="Resource" id="Resource_87wss"]
script = ExtResource("3_ub8wd") script = ExtResource("3_ub8wd")
enemy = ExtResource("4_ujs1b") enemy = ExtResource("4_ujs1b")
number_to_spawn = 1 number_to_spawn = 1
spawn_delay = 10.0 spawn_delay = 5.0
metadata/_custom_type_script = "uid://blxx3vs2wnfet" metadata/_custom_type_script = "uid://blxx3vs2wnfet"
[sub_resource type="Resource" id="Resource_457yt"] [sub_resource type="Resource" id="Resource_457yt"]
script = ExtResource("2_457yt") script = ExtResource("2_457yt")
troops = Array[ExtResource("3_ub8wd")]([SubResource("Resource_1mxdl"), SubResource("Resource_87wss")]) troops = Array[ExtResource("3_ub8wd")]([SubResource("Resource_87wss")])
wait_for_enemy_kills = true
metadata/_custom_type_script = "uid://chu8s12rtdeqx" metadata/_custom_type_script = "uid://chu8s12rtdeqx"
[sub_resource type="Resource" id="Resource_ps5n4"]
script = ExtResource("3_ub8wd")
enemy = ExtResource("4_ujs1b")
number_to_spawn = 1
spawn_delay = 0.0
metadata/_custom_type_script = "uid://blxx3vs2wnfet"
[sub_resource type="Resource" id="Resource_qfjse"] [sub_resource type="Resource" id="Resource_qfjse"]
script = ExtResource("3_ub8wd") script = ExtResource("3_ub8wd")
enemy = ExtResource("4_ujs1b") enemy = ExtResource("4_ujs1b")
number_to_spawn = 1 number_to_spawn = 1
spawn_delay = 10.0 spawn_delay = 5.0
metadata/_custom_type_script = "uid://blxx3vs2wnfet"
[sub_resource type="Resource" id="Resource_m6gub"] [sub_resource type="Resource" id="Resource_qeljc"]
script = ExtResource("2_457yt") script = ExtResource("2_457yt")
troops = Array[ExtResource("3_ub8wd")]([SubResource("Resource_ps5n4"), SubResource("Resource_qfjse")]) troops = Array[ExtResource("3_ub8wd")]([SubResource("Resource_qfjse")])
wait_for_enemy_kills = true
metadata/_custom_type_script = "uid://chu8s12rtdeqx"
[resource] [resource]
script = ExtResource("1_ftl6b") script = ExtResource("1_ftl6b")
waves = Array[ExtResource("2_457yt")]([SubResource("Resource_457yt"), SubResource("Resource_m6gub")]) waves = Array[ExtResource("2_457yt")]([SubResource("Resource_457yt"), SubResource("Resource_qeljc")])
auto_start = false auto_start = false
allowedTowers = Array[int]([1, 2]) allowedTowers = Array[int]([1, 2])
metadata/_custom_type_script = "uid://cuhq6u67cbbqm" metadata/_custom_type_script = "uid://cuhq6u67cbbqm"

View file

@ -1,79 +0,0 @@
[gd_resource type="Resource" script_class="Level" load_steps=17 format=3 uid="uid://cbgaiaaleyf6j"]
[ext_resource type="Script" uid="uid://cuhq6u67cbbqm" path="res://Scripts/Level.gd" id="1_c4t4w"]
[ext_resource type="Script" uid="uid://chu8s12rtdeqx" path="res://Scripts/Wave.gd" id="2_2ji0m"]
[ext_resource type="Script" uid="uid://blxx3vs2wnfet" path="res://Scripts/Troop.gd" id="3_y8rub"]
[ext_resource type="PackedScene" uid="uid://dknt1oiyei5e5" path="res://enemies/enemy-a.tscn" id="4_nj0jn"]
[sub_resource type="Resource" id="Resource_cm6sg"]
script = ExtResource("2_2ji0m")
troops = Array[ExtResource("3_y8rub")]([])
wait_for_enemy_kills = true
[sub_resource type="Resource" id="Resource_ps5n4"]
script = ExtResource("3_y8rub")
enemy = ExtResource("4_nj0jn")
number_to_spawn = 7
spawn_delay = 3.0
metadata/_custom_type_script = "uid://blxx3vs2wnfet"
[sub_resource type="Resource" id="Resource_qeljc"]
script = ExtResource("3_y8rub")
enemy = ExtResource("4_nj0jn")
number_to_spawn = 1
spawn_delay = 1.0
[sub_resource type="Resource" id="Resource_1p7sg"]
script = ExtResource("3_y8rub")
enemy = ExtResource("4_nj0jn")
number_to_spawn = 1
spawn_delay = 0.0
[sub_resource type="Resource" id="Resource_y8rub"]
script = ExtResource("3_y8rub")
enemy = ExtResource("4_nj0jn")
number_to_spawn = 1
spawn_delay = 0.0
[sub_resource type="Resource" id="Resource_w0brl"]
script = ExtResource("3_y8rub")
number_to_spawn = 1
spawn_delay = 1.0
[sub_resource type="Resource" id="Resource_c4t4w"]
script = ExtResource("2_2ji0m")
troops = Array[ExtResource("3_y8rub")]([SubResource("Resource_ps5n4"), SubResource("Resource_qeljc"), SubResource("Resource_1p7sg"), SubResource("Resource_y8rub"), SubResource("Resource_w0brl")])
wait_for_enemy_kills = true
metadata/_custom_type_script = "uid://chu8s12rtdeqx"
[sub_resource type="Resource" id="Resource_2ji0m"]
script = ExtResource("3_y8rub")
number_to_spawn = 1
spawn_delay = 1.0
[sub_resource type="Resource" id="Resource_nj0jn"]
script = ExtResource("3_y8rub")
number_to_spawn = 1
spawn_delay = 1.0
[sub_resource type="Resource" id="Resource_s83h5"]
script = ExtResource("2_2ji0m")
troops = Array[ExtResource("3_y8rub")]([SubResource("Resource_2ji0m"), SubResource("Resource_nj0jn")])
wait_for_enemy_kills = true
[sub_resource type="Resource" id="Resource_833nr"]
script = ExtResource("3_y8rub")
number_to_spawn = 1
spawn_delay = 1.0
[sub_resource type="Resource" id="Resource_xgtww"]
script = ExtResource("2_2ji0m")
troops = Array[ExtResource("3_y8rub")]([SubResource("Resource_833nr")])
wait_for_enemy_kills = true
[resource]
script = ExtResource("1_c4t4w")
waves = Array[ExtResource("2_2ji0m")]([SubResource("Resource_cm6sg"), SubResource("Resource_c4t4w"), SubResource("Resource_s83h5"), SubResource("Resource_xgtww")])
auto_start = false
allowedTowers = Array[int]([1, 2])
metadata/_custom_type_script = "uid://cuhq6u67cbbqm"

View file

@ -27,6 +27,7 @@ func _process(delta: float) -> void:
func spawn_next_wave() -> void: func spawn_next_wave() -> void:
if level.waves.is_empty(): if level.waves.is_empty():
queue_free.call_deferred()
EventBus.player_has_won.emit() EventBus.player_has_won.emit()
return return

View file

@ -6,7 +6,6 @@
[node name="Pierre" instance=ExtResource("1_7f7qx")] [node name="Pierre" instance=ExtResource("1_7f7qx")]
script = ExtResource("1_v16mf") script = ExtResource("1_v16mf")
tower_name = null
tower_type = 1 tower_type = 1
icone = ExtResource("3_odfqx") icone = ExtResource("3_odfqx")
bio = null bio = null

View file

@ -18,7 +18,7 @@ var enemies : Dictionary
@onready var autoLaunchLevel := $VBoxContainer2/ButtonContainer2/AutoLaunchLevel @onready var autoLaunchLevel := $VBoxContainer2/ButtonContainer2/AutoLaunchLevel
@onready var levelSelect := $VBoxContainer2/HBoxContainer/LevelSelect @onready var levelSelect := $VBoxContainer2/HBoxContainer/LevelSelect
@onready var waveTabContainer := $VBoxContainer2/ScrollContainer/WaveContainer @onready var waveTabContainer : TabContainer = $VBoxContainer2/ScrollContainer/WaveContainer
@onready var towerSelector := $VBoxContainer2/ButtonContainer5/TowerSelector @onready var towerSelector := $VBoxContainer2/ButtonContainer5/TowerSelector
var level : Level var level : Level
@ -26,8 +26,7 @@ var currentWave : int = -1
func _ready() -> void: func _ready() -> void:
enemies = getOptionsFromFile(ENEMY_PATH, ENEMY_REGEX_PATERN) resetApp()
levelSelect.setOptions(getOptionsFromFile(LEVEL_PATH, LEVEL_REGEX_PATERN))
towerSelector.clear() towerSelector.clear()
towerSelector.max_columns = Tower.TYPES.size() towerSelector.max_columns = Tower.TYPES.size()
@ -40,9 +39,10 @@ func _input(event: InputEvent) -> void:
if event is not InputEventKey || !event.pressed: if event is not InputEventKey || !event.pressed:
return return
if event.keycode == KEY_RIGHT && waveTabContainer.get_tab_count() > waveTabContainer.current_tab: # NOTE prevent to select new wave button
if event.keycode == KEY_PAGEUP:
waveTabContainer.select_next_available() waveTabContainer.select_next_available()
elif event.keycode == KEY_LEFT && waveTabContainer.current_tab > 0: elif event.keycode == KEY_PAGEDOWN:
waveTabContainer.select_previous_available() waveTabContainer.select_previous_available()
@ -53,7 +53,9 @@ func buildTree() -> void:
manageAllowedTowers() manageAllowedTowers()
autoLaunchLevel.button_pressed = level.auto_start autoLaunchLevel.button_pressed = level.auto_start
for i in level.waves.size(): for i in level.waves.size():
buildWave(level.waves[i]) waveTabContainer.add_child(buildWave(level.waves[i]))
recreateTabBar()
func manageAllowedTowers() -> void: func manageAllowedTowers() -> void:
@ -63,14 +65,14 @@ func manageAllowedTowers() -> void:
towerSelector.select(towerAllowed - 1, false) towerSelector.select(towerAllowed - 1, false)
func buildWave(wave : Wave) -> void: func buildWave(wave : Wave) -> VBoxContainer:
var troopContainer := VBoxContainer.new() var troopContainer := VBoxContainer.new()
for i in wave.troops.size(): for i in wave.troops.size():
var troop : Troop = wave.troops[i] var troop : Troop = wave.troops[i]
if troop.spawn_delay > 0 || i > 0 \ if troop.spawn_delay > 0 || i > 0 && \
&& !troopContainer.get_child(troopContainer.get_child_count() - 1).has_meta("troop_group"): !troopContainer.get_child(troopContainer.get_child_count() - 1).has_meta("troop_group"):
troopContainer.add_child(HSeparator.new()) troopContainer.add_child(HSeparator.new())
if troop.spawn_delay: if troop.spawn_delay:
@ -78,7 +80,7 @@ func buildWave(wave : Wave) -> void:
func(newValue): func(newValue):
troop.spawn_delay = newValue troop.spawn_delay = newValue
if newValue == 0: if newValue == 0:
cleanAndBuildMenu(), refreshWaveNode(level.waves[currentWave], currentWave),
troop.spawn_delay, troop.spawn_delay,
CustomLineEdit.TYPE.FLOAT, CustomLineEdit.TYPE.FLOAT,
"sec." "sec."
@ -106,7 +108,7 @@ func buildWave(wave : Wave) -> void:
button.pressed.connect( button.pressed.connect(
func(): func():
troop.spawn_delay = 1 troop.spawn_delay = 1
cleanAndBuildMenu() refreshWaveNode(level.waves[currentWave], currentWave),
) )
ennemyContainer.add_child(button) ennemyContainer.add_child(button)
@ -117,9 +119,8 @@ func buildWave(wave : Wave) -> void:
addTroopBtn.text = "Ajouter une troupe" addTroopBtn.text = "Ajouter une troupe"
addTroopBtn.pressed.connect(addTroop.bind(wave)) addTroopBtn.pressed.connect(addTroop.bind(wave))
troopContainer.add_child(addTroopBtn) troopContainer.add_child(addTroopBtn)
waveTabContainer.add_child(troopContainer)
var tabCount : int = waveTabContainer.get_tab_count() return troopContainer
waveTabContainer.set_tab_title(tabCount - 1, "Vague N°" + str(tabCount))
@ -180,17 +181,29 @@ func createSection(sectionName : String, BtnCallback : Callable, settings : Labe
func cleanMenu() -> void: func cleanMenu() -> void:
for child in waveTabContainer.get_children(): for child in waveTabContainer.get_children():
child.free() waveTabContainer.remove_child(child)
child.queue_free()
func addTroop(toWave : Wave) -> void: func addTroop(toWave : Wave) -> void:
toWave.troops.append(Troop.new()) toWave.troops.append(Troop.new())
cleanAndBuildMenu() refreshWaveNode(toWave, currentWave)
func removeTroop(troop : Troop, fromWave : Wave) -> void: func removeTroop(troop : Troop, fromWave : Wave) -> void:
fromWave.troops.erase(troop) fromWave.troops.erase(troop)
cleanAndBuildMenu() refreshWaveNode(fromWave, currentWave)
func refreshWaveNode(wave : Wave, waveIdx : int) -> void:
var waveNode := waveTabContainer.get_child(waveIdx)
waveTabContainer.remove_child(waveNode)
waveNode.queue_free()
var waveUI := buildWave(wave)
waveTabContainer.add_child(waveUI)
waveTabContainer.move_child(waveUI, waveIdx)
recreateTabBar()
waveTabContainer.current_tab = waveIdx
func cleanAndBuildMenu() -> void: func cleanAndBuildMenu() -> void:
@ -198,16 +211,26 @@ func cleanAndBuildMenu() -> void:
buildTree() buildTree()
func resetApp() -> void:
enemies = getOptionsFromFile(ENEMY_PATH, ENEMY_REGEX_PATERN)
levelSelect.setOptions(getOptionsFromFile(LEVEL_PATH, LEVEL_REGEX_PATERN))
cleanAndBuildMenu()
func removeWave() -> void: func removeWave() -> void:
level.waves.remove_at(currentWave) level.waves.remove_at(currentWave)
waveTabContainer.get_child(currentWave).free() var wave := waveTabContainer.get_child(currentWave)
waveTabContainer.remove_child(wave)
wave.queue_free()
recreateTabBar()
func addWave() -> void: func addWave() -> void:
var wave := Wave.new() var wave := Wave.new()
level.waves.append(wave) level.waves.append(wave)
buildWave(wave) waveTabContainer.add_child(buildWave(wave))
waveTabContainer.select_next_available() recreateTabBar()
waveTabContainer.current_tab = level.waves.size() - 1
func changeWaveOrder(newPos : int) -> void: func changeWaveOrder(newPos : int) -> void:
@ -267,3 +290,13 @@ func getOptionsFromFile(path : String, regexPattern : String) -> Dictionary :
files.set(fileMatch.strings[1], path + "/" + file) files.set(fileMatch.strings[1], path + "/" + file)
return files return files
func recreateTabBar() -> void:
var waveTabBar := waveTabContainer.get_tab_bar()
for i in waveTabBar.tab_count:
if i < waveTabContainer.get_child_count():
waveTabBar.set_tab_title(i, "Vague N°" + str(i + 1))
else:
waveTabBar.remove_tab(i)

View file

@ -30,11 +30,9 @@ layout_mode = 2
layout_mode = 2 layout_mode = 2
selected = 0 selected = 0
allow_reselect = true allow_reselect = true
item_count = 2 item_count = 1
popup/item_0/text = "level_1" popup/item_0/text = "level_1"
popup/item_0/id = 0 popup/item_0/id = 0
popup/item_1/text = "level_2"
popup/item_1/id = 1
script = ExtResource("2_xjxpq") script = ExtResource("2_xjxpq")
metadata/_custom_type_script = "uid://b47p2u458hsn0" metadata/_custom_type_script = "uid://b47p2u458hsn0"
@ -46,6 +44,10 @@ text = "Nouveau Niveau"
layout_mode = 2 layout_mode = 2
text = "Sauvegarder" text = "Sauvegarder"
[node name="RefreshUI" type="Button" parent="VBoxContainer2/HBoxContainer"]
layout_mode = 2
text = "Rafraichir"
[node name="ButtonContainer" type="HBoxContainer" parent="VBoxContainer2"] [node name="ButtonContainer" type="HBoxContainer" parent="VBoxContainer2"]
layout_mode = 2 layout_mode = 2
@ -99,17 +101,16 @@ size_flags_vertical = 3
[node name="WaveContainer" type="TabContainer" parent="VBoxContainer2/ScrollContainer"] [node name="WaveContainer" type="TabContainer" parent="VBoxContainer2/ScrollContainer"]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
current_tab = 0
clip_tabs = false clip_tabs = false
drag_to_rearrange_enabled = true drag_to_rearrange_enabled = true
[connection signal="onValueChanged" from="VBoxContainer2/HBoxContainer/LevelSelect" to="." method="selectLevel"] [connection signal="onValueChanged" from="VBoxContainer2/HBoxContainer/LevelSelect" to="." method="selectLevel"]
[connection signal="pressed" from="VBoxContainer2/HBoxContainer/NewLevel" to="." method="_on_new_level_pressed"] [connection signal="pressed" from="VBoxContainer2/HBoxContainer/NewLevel" to="." method="_on_new_level_pressed"]
[connection signal="pressed" from="VBoxContainer2/HBoxContainer/Save" to="." method="_on_save_pressed"] [connection signal="pressed" from="VBoxContainer2/HBoxContainer/Save" to="." method="_on_save_pressed"]
[connection signal="pressed" from="VBoxContainer2/HBoxContainer/RefreshUI" to="." method="resetApp"]
[connection signal="pressed" from="VBoxContainer2/ButtonContainer/Add wave" to="." method="addWave"] [connection signal="pressed" from="VBoxContainer2/ButtonContainer/Add wave" to="." method="addWave"]
[connection signal="pressed" from="VBoxContainer2/ButtonContainer/RemoveWave" to="." method="removeWave"] [connection signal="pressed" from="VBoxContainer2/ButtonContainer/RemoveWave" to="." method="removeWave"]
[connection signal="toggled" from="VBoxContainer2/ButtonContainer2/AutoLaunchLevel" to="." method="_on_auto_launch_wave_toggled"] [connection signal="toggled" from="VBoxContainer2/ButtonContainer2/AutoLaunchLevel" to="." method="_on_auto_launch_wave_toggled"]
[connection signal="multi_selected" from="VBoxContainer2/ButtonContainer5/TowerSelector" to="." method="onSelectedTowerChange"] [connection signal="multi_selected" from="VBoxContainer2/ButtonContainer5/TowerSelector" to="." method="onSelectedTowerChange"]
[connection signal="active_tab_rearranged" from="VBoxContainer2/ScrollContainer/WaveContainer" to="." method="changeWaveOrder"] [connection signal="active_tab_rearranged" from="VBoxContainer2/ScrollContainer/WaveContainer" to="." method="changeWaveOrder"]
[connection signal="tab_changed" from="VBoxContainer2/ScrollContainer/WaveContainer" to="." method="tabFocusHaschanged"] [connection signal="tab_changed" from="VBoxContainer2/ScrollContainer/WaveContainer" to="." method="tabFocusHaschanged"]
[connection signal="tab_hovered" from="VBoxContainer2/ScrollContainer/WaveContainer" to="." method="test"]