From aa7116be5df13353d20bd2f0fed04e2f8b2512ec Mon Sep 17 00:00:00 2001 From: Varylios Date: Sun, 31 Aug 2025 16:46:11 +0200 Subject: [PATCH] chore: improve and fix things --- Levels/level_1.tres | 38 ++++---------- Levels/level_2.tres | 79 ------------------------------ Scripts/{ => Level}/Level.gd | 0 Scripts/{ => Level}/Level.gd.uid | 0 Scripts/{ => Level}/Troop.gd | 0 Scripts/{ => Level}/Troop.gd.uid | 0 Scripts/{ => Level}/Wave.gd | 0 Scripts/{ => Level}/Wave.gd.uid | 0 Scripts/WaveManager.gd | 1 + Towers/Pierre/pierre.tscn | 1 - addons/LevelEditor/WaveMaker.gd | 73 +++++++++++++++++++-------- addons/LevelEditor/wave_maker.tscn | 11 +++-- 12 files changed, 70 insertions(+), 133 deletions(-) delete mode 100644 Levels/level_2.tres rename Scripts/{ => Level}/Level.gd (100%) rename Scripts/{ => Level}/Level.gd.uid (100%) rename Scripts/{ => Level}/Troop.gd (100%) rename Scripts/{ => Level}/Troop.gd.uid (100%) rename Scripts/{ => Level}/Wave.gd (100%) rename Scripts/{ => Level}/Wave.gd.uid (100%) diff --git a/Levels/level_1.tres b/Levels/level_1.tres index fe29951..e499b6a 100644 --- a/Levels/level_1.tres +++ b/Levels/level_1.tres @@ -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://chu8s12rtdeqx" path="res://Scripts/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://cuhq6u67cbbqm" path="res://Scripts/Level/Level.gd" id="1_ftl6b"] +[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/Level/Troop.gd" id="3_ub8wd"] [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"] script = ExtResource("3_ub8wd") enemy = ExtResource("4_ujs1b") number_to_spawn = 1 -spawn_delay = 10.0 +spawn_delay = 5.0 metadata/_custom_type_script = "uid://blxx3vs2wnfet" [sub_resource type="Resource" id="Resource_457yt"] script = ExtResource("2_457yt") -troops = Array[ExtResource("3_ub8wd")]([SubResource("Resource_1mxdl"), SubResource("Resource_87wss")]) -wait_for_enemy_kills = true +troops = Array[ExtResource("3_ub8wd")]([SubResource("Resource_87wss")]) 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"] script = ExtResource("3_ub8wd") enemy = ExtResource("4_ujs1b") number_to_spawn = 1 -spawn_delay = 10.0 -metadata/_custom_type_script = "uid://blxx3vs2wnfet" +spawn_delay = 5.0 -[sub_resource type="Resource" id="Resource_m6gub"] +[sub_resource type="Resource" id="Resource_qeljc"] script = ExtResource("2_457yt") -troops = Array[ExtResource("3_ub8wd")]([SubResource("Resource_ps5n4"), SubResource("Resource_qfjse")]) -wait_for_enemy_kills = true -metadata/_custom_type_script = "uid://chu8s12rtdeqx" +troops = Array[ExtResource("3_ub8wd")]([SubResource("Resource_qfjse")]) [resource] 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 allowedTowers = Array[int]([1, 2]) metadata/_custom_type_script = "uid://cuhq6u67cbbqm" diff --git a/Levels/level_2.tres b/Levels/level_2.tres deleted file mode 100644 index 465522d..0000000 --- a/Levels/level_2.tres +++ /dev/null @@ -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" diff --git a/Scripts/Level.gd b/Scripts/Level/Level.gd similarity index 100% rename from Scripts/Level.gd rename to Scripts/Level/Level.gd diff --git a/Scripts/Level.gd.uid b/Scripts/Level/Level.gd.uid similarity index 100% rename from Scripts/Level.gd.uid rename to Scripts/Level/Level.gd.uid diff --git a/Scripts/Troop.gd b/Scripts/Level/Troop.gd similarity index 100% rename from Scripts/Troop.gd rename to Scripts/Level/Troop.gd diff --git a/Scripts/Troop.gd.uid b/Scripts/Level/Troop.gd.uid similarity index 100% rename from Scripts/Troop.gd.uid rename to Scripts/Level/Troop.gd.uid diff --git a/Scripts/Wave.gd b/Scripts/Level/Wave.gd similarity index 100% rename from Scripts/Wave.gd rename to Scripts/Level/Wave.gd diff --git a/Scripts/Wave.gd.uid b/Scripts/Level/Wave.gd.uid similarity index 100% rename from Scripts/Wave.gd.uid rename to Scripts/Level/Wave.gd.uid diff --git a/Scripts/WaveManager.gd b/Scripts/WaveManager.gd index 11afd4b..0189b15 100644 --- a/Scripts/WaveManager.gd +++ b/Scripts/WaveManager.gd @@ -27,6 +27,7 @@ func _process(delta: float) -> void: func spawn_next_wave() -> void: if level.waves.is_empty(): + queue_free.call_deferred() EventBus.player_has_won.emit() return diff --git a/Towers/Pierre/pierre.tscn b/Towers/Pierre/pierre.tscn index fae25ca..f5c7206 100644 --- a/Towers/Pierre/pierre.tscn +++ b/Towers/Pierre/pierre.tscn @@ -6,7 +6,6 @@ [node name="Pierre" instance=ExtResource("1_7f7qx")] script = ExtResource("1_v16mf") -tower_name = null tower_type = 1 icone = ExtResource("3_odfqx") bio = null diff --git a/addons/LevelEditor/WaveMaker.gd b/addons/LevelEditor/WaveMaker.gd index 845d4e9..943c055 100644 --- a/addons/LevelEditor/WaveMaker.gd +++ b/addons/LevelEditor/WaveMaker.gd @@ -18,7 +18,7 @@ var enemies : Dictionary @onready var autoLaunchLevel := $VBoxContainer2/ButtonContainer2/AutoLaunchLevel @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 var level : Level @@ -26,8 +26,7 @@ var currentWave : int = -1 func _ready() -> void: - enemies = getOptionsFromFile(ENEMY_PATH, ENEMY_REGEX_PATERN) - levelSelect.setOptions(getOptionsFromFile(LEVEL_PATH, LEVEL_REGEX_PATERN)) + resetApp() towerSelector.clear() towerSelector.max_columns = Tower.TYPES.size() @@ -40,9 +39,10 @@ func _input(event: InputEvent) -> void: if event is not InputEventKey || !event.pressed: 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() - elif event.keycode == KEY_LEFT && waveTabContainer.current_tab > 0: + elif event.keycode == KEY_PAGEDOWN: waveTabContainer.select_previous_available() @@ -53,7 +53,9 @@ func buildTree() -> void: manageAllowedTowers() autoLaunchLevel.button_pressed = level.auto_start for i in level.waves.size(): - buildWave(level.waves[i]) + waveTabContainer.add_child(buildWave(level.waves[i])) + + recreateTabBar() func manageAllowedTowers() -> void: @@ -63,14 +65,14 @@ func manageAllowedTowers() -> void: towerSelector.select(towerAllowed - 1, false) -func buildWave(wave : Wave) -> void: +func buildWave(wave : Wave) -> VBoxContainer: var troopContainer := VBoxContainer.new() for i in wave.troops.size(): var troop : Troop = wave.troops[i] - if troop.spawn_delay > 0 || i > 0 \ - && !troopContainer.get_child(troopContainer.get_child_count() - 1).has_meta("troop_group"): + if troop.spawn_delay > 0 || i > 0 && \ + !troopContainer.get_child(troopContainer.get_child_count() - 1).has_meta("troop_group"): troopContainer.add_child(HSeparator.new()) if troop.spawn_delay: @@ -78,7 +80,7 @@ func buildWave(wave : Wave) -> void: func(newValue): troop.spawn_delay = newValue if newValue == 0: - cleanAndBuildMenu(), + refreshWaveNode(level.waves[currentWave], currentWave), troop.spawn_delay, CustomLineEdit.TYPE.FLOAT, "sec." @@ -106,7 +108,7 @@ func buildWave(wave : Wave) -> void: button.pressed.connect( func(): troop.spawn_delay = 1 - cleanAndBuildMenu() + refreshWaveNode(level.waves[currentWave], currentWave), ) ennemyContainer.add_child(button) @@ -117,9 +119,8 @@ func buildWave(wave : Wave) -> void: addTroopBtn.text = "Ajouter une troupe" addTroopBtn.pressed.connect(addTroop.bind(wave)) troopContainer.add_child(addTroopBtn) - waveTabContainer.add_child(troopContainer) - var tabCount : int = waveTabContainer.get_tab_count() - waveTabContainer.set_tab_title(tabCount - 1, "Vague N°" + str(tabCount)) + + return troopContainer @@ -180,17 +181,29 @@ func createSection(sectionName : String, BtnCallback : Callable, settings : Labe func cleanMenu() -> void: for child in waveTabContainer.get_children(): - child.free() + waveTabContainer.remove_child(child) + child.queue_free() func addTroop(toWave : Wave) -> void: toWave.troops.append(Troop.new()) - cleanAndBuildMenu() + refreshWaveNode(toWave, currentWave) func removeTroop(troop : Troop, fromWave : Wave) -> void: 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: @@ -198,16 +211,26 @@ func cleanAndBuildMenu() -> void: buildTree() +func resetApp() -> void: + enemies = getOptionsFromFile(ENEMY_PATH, ENEMY_REGEX_PATERN) + levelSelect.setOptions(getOptionsFromFile(LEVEL_PATH, LEVEL_REGEX_PATERN)) + cleanAndBuildMenu() + + func removeWave() -> void: 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: var wave := Wave.new() level.waves.append(wave) - buildWave(wave) - waveTabContainer.select_next_available() + waveTabContainer.add_child(buildWave(wave)) + recreateTabBar() + waveTabContainer.current_tab = level.waves.size() - 1 func changeWaveOrder(newPos : int) -> void: @@ -267,3 +290,13 @@ func getOptionsFromFile(path : String, regexPattern : String) -> Dictionary : files.set(fileMatch.strings[1], path + "/" + file) 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) diff --git a/addons/LevelEditor/wave_maker.tscn b/addons/LevelEditor/wave_maker.tscn index 236a4fa..2fc7144 100644 --- a/addons/LevelEditor/wave_maker.tscn +++ b/addons/LevelEditor/wave_maker.tscn @@ -30,11 +30,9 @@ layout_mode = 2 layout_mode = 2 selected = 0 allow_reselect = true -item_count = 2 +item_count = 1 popup/item_0/text = "level_1" popup/item_0/id = 0 -popup/item_1/text = "level_2" -popup/item_1/id = 1 script = ExtResource("2_xjxpq") metadata/_custom_type_script = "uid://b47p2u458hsn0" @@ -46,6 +44,10 @@ text = "Nouveau Niveau" layout_mode = 2 text = "Sauvegarder" +[node name="RefreshUI" type="Button" parent="VBoxContainer2/HBoxContainer"] +layout_mode = 2 +text = "Rafraichir" + [node name="ButtonContainer" type="HBoxContainer" parent="VBoxContainer2"] layout_mode = 2 @@ -99,17 +101,16 @@ size_flags_vertical = 3 [node name="WaveContainer" type="TabContainer" parent="VBoxContainer2/ScrollContainer"] layout_mode = 2 size_flags_vertical = 3 -current_tab = 0 clip_tabs = false drag_to_rearrange_enabled = true [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/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/RemoveWave" to="." method="removeWave"] [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="active_tab_rearranged" from="VBoxContainer2/ScrollContainer/WaveContainer" to="." method="changeWaveOrder"] [connection signal="tab_changed" from="VBoxContainer2/ScrollContainer/WaveContainer" to="." method="tabFocusHaschanged"] -[connection signal="tab_hovered" from="VBoxContainer2/ScrollContainer/WaveContainer" to="." method="test"]