feat: Add state machine for spawn + fixes

This commit is contained in:
Varylios 2025-09-05 04:07:17 +02:00
parent c6cdc15687
commit 4303b430ac
27 changed files with 164 additions and 153 deletions

View file

@ -1,7 +1,7 @@
extends Resource
class_name EnhancedResource
func arrayValueChanged(value : Array[Variant], resourceToCreate : Callable) -> Array[Variant]:
static func arrayValueChanged(value : Array[Variant], resourceToCreate : Callable) -> Array[Variant]:
if Engine.is_editor_hint():
for i in value.size():
if !value[i]:

View file

@ -39,11 +39,16 @@ signal projectile_shooted(projectile: Projectile, startPosition: Vector3)
## [b]Emitter[/b] : [WorldManager][br]
## [b]Subscriber[/b] : [Game]
signal player_has_won()
signal player_has_won
## [b]Emitter[/b] : [WorldManager][br]
## [b]Subscriber[/b] : [code]null[/code]
signal waveHasChange(waveNumber : int)
signal wave_has_change(waveNumber : int)
## [b]Emitter[/b] : [gui.gd][br]
## [b]Subscriber[/b] : [WorldManager]
signal lauch_next_wave
@warning_ignore_restore("unused_signal")

View file

@ -49,7 +49,6 @@ func initTower(towerType: Tower.TYPE) -> Tower:
func resetGame() -> void:
towers.values().map(queue_free)
towers.clear()
# DANGER Don't use [method clear] or you will clear the level datas
allowedTowers = []

View file

@ -16,7 +16,7 @@ enum RESOURCE_TYPE { TOWER, ENEMY, LEVEL }
## [color=crimson][b]WARNING :[/b] Work only with the [enum RESOURCE_TYPE] [param TOWER][/color]
static func preloadSceneInGlobal(property: Dictionary, type: RESOURCE_TYPE) -> void:
assert(type == RESOURCE_TYPE.TOWER)
assert(type == RESOURCE_TYPE.TOWER, "[color=crimson][b]WARNING :[/b] Work only with the [enum RESOURCE_TYPE] [param TOWER][/color]")
var files : Array[String] = getPackedScenesPaths(type)

View file

@ -9,7 +9,7 @@ script = ExtResource("3_ub8wd")
enemy = "res://Enemies/Scenes/enemy-a.tscn"
number_to_spawn = 1
lane_to_spawn = 0
spawn_delay = 4.0
spawn_delay = 2.0
metadata/_custom_type_script = "uid://blxx3vs2wnfet"
[sub_resource type="Resource" id="Resource_e6yyc"]
@ -36,7 +36,7 @@ script = ExtResource("3_ub8wd")
enemy = "res://Enemies/Scenes/enemy-a.tscn"
number_to_spawn = 3
lane_to_spawn = 0
spawn_delay = 5.0
spawn_delay = 2.0
[sub_resource type="Resource" id="Resource_ftl6b"]
script = ExtResource("3_ub8wd")
@ -52,6 +52,7 @@ troops = Array[ExtResource("3_ub8wd")]([SubResource("Resource_qfjse"), SubResour
[resource]
script = ExtResource("1_ftl6b")
auto_start = false
auto_launch_wave = false
allowedTowers = Array[int]([1, 2, 3, 4])
laneCount = 1
startingMoney = 999

View file

@ -13,7 +13,7 @@
[sub_resource type="Curve3D" id="Curve3D_okc5w"]
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 9.5, 0, -5.5, 0, 0, 0, 0, 0, 0, 0.5, 0, -5.5, 0, 0, 0, 0, 0, 0, 0.5, 0, 0.5, 0, 0, 0, 0, 0, 0, 9, 0, 0.5),
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 9.5, 0, -5.5, 0, 0, 0, 0, 0, 0, 0.5, 0, -5.5, 0, 0, 0, 0, 0, 0, 0.5, 0, 0.5, 0, 0, 0, 0, 0, 0, 9.5, 0, 0.5),
"tilts": PackedFloat32Array(0, 0, 0, 0)
}
point_count = 4

View file

@ -4,6 +4,7 @@ class_name Level
@export var auto_start : bool = false
@export var auto_launch_wave : bool = false
@export var allowedTowers : Array[Tower.TYPE]
@export var laneCount : int = 1
@export var startingMoney : int = 0

View file

@ -1,23 +1,28 @@
extends Node3D
class_name WorldManager
enum STATE { INIT, IDLE, SPAWN, SPAWNING, FIGHT, WAVE_END, LEVEL_END }
const PACK_DELAY : float = .15
var level : Level
var paths : Array[Node]
var state : STATE = STATE.INIT
var wave : int = 0
var currentTroopIdx : int = 0
var currentTroop : Troop :
get():
return level.waves[wave - 1].troops[currentTroopIdx]
get(): return level.waves[wave - 1].troops[currentTroopIdx]
var currentTroopIdx : int = 0
var enemiesAlive : int = 0
@onready var troopTimer : Timer = $TroopTimer
func _ready() -> void:
EventBus.projectile_shooted.connect(onProjectileShooted)
Game.loose.connect(queue_free)
EventBus.lauch_next_wave.connect(changeState.bind(STATE.SPAWN))
troopTimer.timeout.connect(spawnTroop)
func onProjectileShooted(projectile: Projectile, startPosition: Vector3) -> void:
@ -25,20 +30,47 @@ func onProjectileShooted(projectile: Projectile, startPosition: Vector3) -> void
projectile.global_position = startPosition
func changeState(newState: STATE) -> void:
match newState:
STATE.SPAWN when [STATE.IDLE, STATE.WAVE_END].has(state):
state = newState
func _process(_delta: float) -> void:
if wave > 0 || level && level.auto_start:
spawnManager()
if state == STATE.INIT:
return
match state:
STATE.SPAWN:
spawnNextWave()
state = STATE.SPAWNING
STATE.SPAWNING when troopTimer.is_stopped():
state = STATE.FIGHT
STATE.FIGHT when enemiesAlive == 0:
state = STATE.WAVE_END
STATE.WAVE_END when wave == level.waves.size():
EventBus.player_has_won.emit()
state = STATE.LEVEL_END
STATE.WAVE_END when level.auto_launch_wave:
state = STATE.SPAWN
func spawnNextWave() -> void:
if wave == level.waves.size() && currentTroopIdx == level.waves[wave - 1].troops.size():
EventBus.player_has_won.emit()
queue_free.call_deferred()
return
currentTroopIdx = 0
wave += 1
EventBus.waveHasChange.emit(wave)
EventBus.wave_has_change.emit(wave)
spawnNextTroop()
func spawnNextTroop() -> void:
# Wave spawning is finished
if currentTroopIdx == level.waves[wave - 1].troops.size():
return
if currentTroop.spawn_delay == 0:
spawnTroop()
else:
troopTimer.start(currentTroop.spawn_delay)
func spawnTroop() -> void:
@ -49,6 +81,7 @@ func spawnTroop() -> void:
totalDelay += PACK_DELAY
currentTroopIdx += 1
spawnNextTroop()
func spawnEnemy(enemyScene: PackedScene, laneToSpawn: int, delay: float) -> void:
@ -76,22 +109,6 @@ func createEnemy(enemyScene: PackedScene) -> PathFollow3D :
return PF3D
func spawnManager() -> void:
if not troopTimer.is_stopped():
return
var current_wave : Wave = level.waves[wave - 1]
if current_wave.troops.size() < currentTroopIdx + 1:
if enemiesAlive == 0:
spawnNextWave()
return
if currentTroop.spawn_delay == 0:
spawnTroop()
else:
troopTimer.start(currentTroop.spawn_delay)
func createTimer(delay: float) -> Timer :
var timer : Timer = Timer.new()
timer.wait_time = delay
@ -108,4 +125,4 @@ func addMap(mapScene : PackedScene) -> void:
paths = map.paths.get_children()
Game.money = level.startingMoney
Game.allowedTowers = level.allowedTowers
spawnNextWave()
state = STATE.SPAWN if level.auto_start else STATE.IDLE

View file

@ -98,5 +98,3 @@ light_energy = 0.0
[node name="TroopTimer" type="Timer" parent="."]
one_shot = true
[connection signal="timeout" from="TroopTimer" to="." method="spawnTroop"]

View file

@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://trg7ag3dqr2l" path="res://Towers/tower.tscn" id="1_gvvig"]
[ext_resource type="Texture2D" uid="uid://cob1lydkirn20" path="res://Assets/Icones/raccoon-head.svg" id="3_6h033"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/Tower/TowerUpgrade.gd" id="3_p2nb1"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/TowerUpgrade.gd" id="3_p2nb1"]
[ext_resource type="Script" uid="uid://ddgbr0n8kic3y" path="res://Towers/Projectiles/ProjectileResource.gd" id="4_ck6a3"]
[ext_resource type="Texture2D" uid="uid://315k07rsgf6t" path="res://Assets/Characters/Female1.png" id="5_l514g"]
[ext_resource type="Texture2D" uid="uid://dqyhhvxpwtpsy" path="res://Assets/Emotes/emote_star.png" id="5_lhd8w"]

View file

@ -3,7 +3,7 @@
[ext_resource type="PackedScene" uid="uid://trg7ag3dqr2l" path="res://Towers/tower.tscn" id="1_yctfx"]
[ext_resource type="Texture2D" uid="uid://dwwgho6f8f4kj" path="res://Assets/Icones/penguin.svg" id="2_5uh04"]
[ext_resource type="Script" uid="uid://ddgbr0n8kic3y" path="res://Towers/Projectiles/ProjectileResource.gd" id="3_gr7yf"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/Tower/TowerUpgrade.gd" id="4_v32j5"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/TowerUpgrade.gd" id="4_v32j5"]
[sub_resource type="Resource" id="Resource_mf185"]
script = ExtResource("3_gr7yf")

View file

@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://trg7ag3dqr2l" path="res://Towers/tower.tscn" id="1_bw8ui"]
[ext_resource type="Texture2D" uid="uid://d4pdmbhhlphc" path="res://Assets/Icones/seated-mouse.svg" id="2_1pop4"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/Tower/TowerUpgrade.gd" id="4_nxn76"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/TowerUpgrade.gd" id="4_nxn76"]
[ext_resource type="Texture2D" uid="uid://315k07rsgf6t" path="res://Assets/Characters/Female1.png" id="5_kbhva"]
[node name="Geraldine" instance=ExtResource("1_bw8ui")]

View file

@ -3,7 +3,7 @@
[ext_resource type="PackedScene" uid="uid://trg7ag3dqr2l" path="res://Towers/tower.tscn" id="1_laam8"]
[ext_resource type="Script" uid="uid://ddgbr0n8kic3y" path="res://Towers/Projectiles/ProjectileResource.gd" id="2_7fox5"]
[ext_resource type="Texture2D" uid="uid://boxdrq4nrq7hv" path="res://Assets/Icones/flamingo.svg" id="2_sciv6"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/Tower/TowerUpgrade.gd" id="4_l8w4i"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/TowerUpgrade.gd" id="4_l8w4i"]
[sub_resource type="SphereShape3D" id="SphereShape3D_sciv6"]
radius = 0.2

View file

@ -1,9 +1,11 @@
[gd_scene load_steps=8 format=3 uid="uid://bj6srer7ghf7p"]
[gd_scene load_steps=14 format=3 uid="uid://bj6srer7ghf7p"]
[ext_resource type="PackedScene" uid="uid://trg7ag3dqr2l" path="res://Towers/tower.tscn" id="1_s6dfo"]
[ext_resource type="Texture2D" uid="uid://bb4wihq1n1wm7" path="res://Assets/Icones/labrador-head.svg" id="2_lcjqw"]
[ext_resource type="Script" uid="uid://ddgbr0n8kic3y" path="res://Towers/Projectiles/ProjectileResource.gd" id="3_5tgsk"]
[ext_resource type="Texture2D" uid="uid://dqyhhvxpwtpsy" path="res://Assets/Emotes/emote_star.png" id="4_r52mr"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/TowerUpgrade.gd" id="5_wvh05"]
[ext_resource type="Texture2D" uid="uid://dqvou7t7o1t5d" path="res://Assets/Icones/medal2.png" id="6_wnw3f"]
[sub_resource type="Resource" id="Resource_r52mr"]
script = ExtResource("3_5tgsk")
@ -18,6 +20,60 @@ metadata/_custom_type_script = "uid://ddgbr0n8kic3y"
[sub_resource type="SphereShape3D" id="SphereShape3D_c55ds"]
radius = 5.0
[sub_resource type="Resource" id="Resource_yyqap"]
script = ExtResource("5_wvh05")
type = 0
icon = ExtResource("6_wnw3f")
text = "Upgrade"
baseCost = 50
value = 50.0
maxLevel = -1
upgradeDirection = 1
upgradeScaleType = 0
costScaleType = 0
costModificator = 0.0
metadata/_custom_type_script = "uid://bg0x4egeu17qb"
[sub_resource type="Resource" id="Resource_556ww"]
script = ExtResource("5_wvh05")
type = 1
icon = ExtResource("6_wnw3f")
text = "Upgrade"
baseCost = 50
value = 10.0
maxLevel = 5
upgradeDirection = 1
upgradeScaleType = 0
costScaleType = 0
costModificator = 0.0
metadata/_custom_type_script = "uid://bg0x4egeu17qb"
[sub_resource type="Resource" id="Resource_wvh05"]
script = ExtResource("5_wvh05")
type = 3
icon = ExtResource("6_wnw3f")
text = "Upgrade"
baseCost = 50
value = 1.0
maxLevel = -1
upgradeDirection = 1
upgradeScaleType = 0
costScaleType = 0
costModificator = 0.0
[sub_resource type="Resource" id="Resource_wnw3f"]
script = ExtResource("5_wvh05")
type = 5
icon = ExtResource("6_wnw3f")
text = "Upgrade"
baseCost = 2000
value = 0.2
maxLevel = 2
upgradeDirection = 1
upgradeScaleType = 0
costScaleType = 0
costModificator = 0.0
[sub_resource type="ViewportTexture" id="ViewportTexture_r52mr"]
viewport_path = NodePath("EnergyBar3D/SubViewport")
@ -31,6 +87,10 @@ action_cooldown = 1.0
max_energy = 50.0
energy_regen = 5.0
energy_cost = 2.0
upgrades = Array[ExtResource("5_wvh05")]([SubResource("Resource_yyqap"), SubResource("Resource_556ww"), SubResource("Resource_wvh05"), SubResource("Resource_wnw3f")])
[node name="EnergyBar3D" parent="." index="6"]
texture = SubResource("ViewportTexture_r52mr")
[node name="EnergyBar2D" parent="EnergyBar3D/SubViewport" index="0"]
max_value = 50.0

View file

@ -3,7 +3,7 @@
[ext_resource type="PackedScene" uid="uid://trg7ag3dqr2l" path="res://Towers/tower.tscn" id="1_ki73m"]
[ext_resource type="Texture2D" uid="uid://m6jwakrus50v" path="res://Assets/Icones/sea-star.svg" id="2_n34tq"]
[ext_resource type="Script" uid="uid://ddgbr0n8kic3y" path="res://Towers/Projectiles/ProjectileResource.gd" id="3_sf52i"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/Tower/TowerUpgrade.gd" id="4_uso5g"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/TowerUpgrade.gd" id="4_uso5g"]
[ext_resource type="Texture2D" uid="uid://315k07rsgf6t" path="res://Assets/Characters/Female1.png" id="5_2rqsg"]
[sub_resource type="SphereShape3D" id="SphereShape3D_rbuca"]

View file

@ -55,7 +55,9 @@ var builded : bool = false
@export_category("Upgrades")
@export var upgrades : Array[TowerUpgrade]
@export var upgrades : Array[TowerUpgrade] :
set(value):
upgrades = EnhancedResource.arrayValueChanged(value, TowerUpgrade.new)
func _ready() -> void:

View file

@ -9,6 +9,7 @@ class_name TowerManager
var usedLocations : Dictionary
var selectedTile : Vector3
var selected_tower : Tower
var buildedTower : int = 0
func _ready() -> void:
@ -29,7 +30,7 @@ func _process(_delta: float) -> void:
if isTileFree(collider):
placeTower()
elif tower && selected_tower && selected_tower.builded:
elif tower && (not selected_tower || not selected_tower.builded):
EventBus.tower_selected.emit(tower.type)
if Input.is_action_just_pressed("rest"):
@ -74,6 +75,8 @@ func placeTower() -> void:
if not selected_tower.builded:
if not selected_tower.build():
return
buildedTower += 1
EventBus.tower_count_changed.emit(buildedTower)
remove_child(selected_tower)
$"../Towers".add_child(selected_tower)
@ -96,7 +99,9 @@ func moveTower(tower: Tower, toPosition: Vector3) -> void:
tower.global_position = toPosition
tower.in_action()
emitTeamChanges()
var inAction : int = usedLocations.size()
EventBus.team_in_action_changed.emit(inAction)
EventBus.team_in_rest_changed.emit(buildedTower - inAction)
func selectTower(towerType: Tower.TYPE):
@ -113,18 +118,3 @@ func selectTower(towerType: Tower.TYPE):
else:
selected_tower = Game.initTower(towerType)
add_child(selected_tower)
func emitTeamChanges() -> void:
var team_in_rest : int = 0
var tower_count : int = 0
for towerType in Game.towers:
var tower : Tower = Game.towers[towerType]
if tower.builded:
tower_count += 1
if tower.is_rest:
team_in_rest += 1
EventBus.team_in_action_changed.emit(usedLocations.size())
EventBus.team_in_rest_changed.emit(team_in_rest)
EventBus.tower_count_changed.emit(tower_count)

View file

@ -14,18 +14,18 @@ func onTowerSelected(towerType : Tower.TYPE) -> void:
visible = false
tower = null
return
return
tower = Game.getTower(towerType)
tower = Game.towers.get(towerType)
%TowerIcon.texture = tower.icone
%TowerName.text = tower.tower_name
%TowerDamage.text = str(tower.projectileRessource.damage)
%TowerCooldown.text = str(tower.action_cooldown)
%TowerBio.text = tower.bio
%TowerDamage.text = "Dmg : %d" % tower.projectileRessource.damage
%TowerCooldown.text = "cooldown : %.1f" % tower.action_cooldown
# TODO Check for better UI to display it
#%TowerBio.text = tower.bio
onEnergyChanged(tower)
visible = true
func onEnergyChanged(_tower : Tower) -> void:
if _tower == tower:
%TowerEnergy.text = "%d/%d" % [ str(tower.energy), str(tower.max_energy) ]
%TowerEnergy.text = "%d/%d" % [ tower.energy, tower.max_energy ]

View file

@ -6,20 +6,17 @@ const BUTTON_QTY = 4
const guiButton : PackedScene = preload("res://UI/gui_button.tscn")
@onready var buttonContainer = %ButtonContainer
@onready var moneyLabel = %LabelMoney
@onready var towerInCubeLabel = %LabelTowerInCube
@onready var towerOnTerrainLabel = %LabelTowerOnTerrain
@onready var cubeIntegrity = %CubeIntegrity
func _ready() -> void:
addTowerButtonNodes()
EventBus.team_in_rest_changed.connect(func(count): towerInCubeLabel.text = str(count) + " x Zzz")
EventBus.team_in_action_changed.connect(func(count): towerOnTerrainLabel.text = str(count) + " in action")
EventBus.team_in_rest_changed.connect(func(count): %LabelTowerInCube.text = "Zzz : %d" % count)
EventBus.team_in_action_changed.connect(func(count): %LabelTowerOnTerrain.text = " In action : %d" % count)
Game.allowed_tower_has_change.connect(addTowerButtonNodes)
Game.cube_integrity_changed.connect(func(): cubeIntegrity.value = Game.healthPercentage)
Game.money_changed.connect(func(): moneyLabel.text = str(Game.money) + "")
cubeIntegrity.max_value = Game.max_health
Game.money_changed.connect(func(): %LabelMoney.text = "%d" % Game.money)
%NextWaveBtn.pressed.connect(EventBus.lauch_next_wave.emit)
func _on_button_cube_pressed() -> void:
@ -39,7 +36,6 @@ func addTowerButtonNodes() -> void:
if node.has_meta("dynamicButton"):
node.queue_free()
var additionalPlaceholder : int = 0
for towerType : int in Tower.TYPE.values() :
if towerType && (Engine.is_editor_hint() || Game.allowedTowers.has(towerType)):
createTowerButton(towerType)

View file

@ -8,9 +8,9 @@
[ext_resource type="Texture2D" uid="uid://dfnf26suc8yb6" path="res://Assets/Icones/sideswipe.svg" id="8_ay13l"]
[ext_resource type="Texture2D" uid="uid://dootdihg7gkoj" path="res://Assets/Icones/exit-door.svg" id="8_decjp"]
[ext_resource type="Script" uid="uid://s4t3oa4v87xe" path="res://UI/TowerPanel.gd" id="9_3lugd"]
[ext_resource type="Script" uid="uid://dyhtr6g7kd1g2" path="res://UI/gui_button.gd" id="9_h4fn5"]
[ext_resource type="Texture2D" uid="uid://b4m5ejfdrm8s0" path="res://Assets/Icones/power-button.svg" id="9_reygo"]
[ext_resource type="Texture2D" uid="uid://uptdcefxlv4c" path="res://Assets/Icones/ppdf_bio_image_placeholder_2.png" id="10_parkk"]
[ext_resource type="Script" uid="uid://bjetiiimo62du" path="res://UI/UpgradeButton.gd" id="11_parkk"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_h4fn5"]
bg_color = Color(0.933333, 0.933333, 0.933333, 1)
@ -104,8 +104,7 @@ size_flags_vertical = 1
tooltip_text = "Les points d'intégrités du Cube. S'ils arrivent à 0, fin de la partie."
theme_override_styles/background = SubResource("StyleBoxFlat_nxmp4")
theme_override_styles/fill = SubResource("StyleBoxFlat_epgl5")
max_value = 50.0
value = 50.0
value = 100.0
fill_mode = 3
show_percentage = false
@ -141,12 +140,12 @@ texture = ExtResource("8_decjp")
layout_mode = 2
texture = ExtResource("9_reygo")
[node name="ReturnBtn" parent="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer" instance=ExtResource("7_parkk")]
[node name="NextWaveBtn" parent="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer" instance=ExtResource("7_parkk")]
unique_name_in_owner = true
layout_mode = 2
texture = ExtResource("8_ay13l")
[node name="TowerInfoPanel" type="HBoxContainer" parent="."]
visible = false
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
@ -202,6 +201,7 @@ horizontal_alignment = 2
[node name="TowerIcon" type="TextureRect" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
theme = ExtResource("5_wpcnu")
texture = ExtResource("10_parkk")
expand_mode = 3
@ -225,11 +225,12 @@ horizontal_alignment = 2
[node name="TowerBio" type="Label" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
size_flags_horizontal = 0
tooltip_text = "Le nombre de héros en action sur le terrain !"
mouse_filter = 1
theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
text = "0"
horizontal_alignment = 2
[node name="UpgradeContainer" type="PanelContainer" parent="TowerInfoPanel"]
@ -253,17 +254,16 @@ columns = 4
layout_mode = 2
theme_override_font_sizes/font_size = 20
text = "Améliorer"
script = ExtResource("9_h4fn5")
metadata/_custom_type_script = "uid://dyhtr6g7kd1g2"
script = ExtResource("11_parkk")
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/CubeBtn" to="." method="_on_button_cube_pressed"]
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/QuitLevelBtn" to="." method="quitLevel"]
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/QuitGameBtn" to="." method="quitGame"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/TowerButton" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/TowerButton" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32868" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32868" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32869" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32869" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32870" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32870" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32871" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32871" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32872" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32872" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32873" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32873" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32874" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32874" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71848" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71848" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71849" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71849" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71850" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71850" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71851" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71851" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71852" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71852" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71853" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71853" method="buttonToggled"]
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71854" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@71854" method="buttonToggled"]

View file

@ -22,7 +22,7 @@ var towerType : Tower.TYPE :
EventBus.tower_upgraded.connect(upgradeTower)
func upgradeTower(towerType : Tower.TYPE, upgrade : TowerUpgrade) -> void:
func upgradeTower(_towerType : Tower.TYPE, upgrade : TowerUpgrade) -> void:
pass

View file

@ -1,21 +0,0 @@
[gd_resource type="Resource" script_class="TowerUpgrade" load_steps=3 format=3 uid="uid://cfyahlbi4apsj"]
[ext_resource type="Texture2D" uid="uid://dqvou7t7o1t5d" path="res://Assets/Icones/medal2.png" id="1_b7fga"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/Tower/TowerUpgrade.gd" id="2_55ej0"]
[resource]
script = ExtResource("2_55ej0")
type = 6
max_energy_increase = 5
action_cooldown_decrease = 0.3
energy_regen_increase = 5
icon = ExtResource("1_b7fga")
text = "Upgrade Cooldown"
baseCost = 50
value = 0.3
maxLevel = 5
upgradeDirection = 0
upgradeScaleType = 0
costScaleType = 0
modificator = 0.0
metadata/_custom_type_script = "uid://c12qiuxn5uw2n"

View file

@ -1,20 +0,0 @@
[gd_resource type="Resource" script_class="TowerUpgrade" load_steps=3 format=3 uid="uid://b50h2sx6xhdb2"]
[ext_resource type="Texture2D" uid="uid://dqvou7t7o1t5d" path="res://Assets/Icones/medal2.png" id="1_gcuvb"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/Tower/TowerUpgrade.gd" id="2_pn0j6"]
[resource]
script = ExtResource("2_pn0j6")
type = 1
max_energy_increase = 5
action_cooldown_decrease = 0.3
energy_regen_increase = 5
icon = ExtResource("1_gcuvb")
text = "Upgrade energy regen"
baseCost = 50
value = 5.0
maxLevel = -1
upgradeDirection = 0
upgradeScaleType = 0
costScaleType = 0
modificator = 0.0

View file

@ -1,17 +0,0 @@
[gd_resource type="Resource" script_class="TowerUpgrade" load_steps=3 format=3 uid="uid://c6844q5o2gjhd"]
[ext_resource type="Texture2D" uid="uid://dqvou7t7o1t5d" path="res://Assets/Icones/medal2.png" id="1_7aeby"]
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/Tower/TowerUpgrade.gd" id="2_7dqep"]
[resource]
script = ExtResource("2_7dqep")
type = 0
icon = ExtResource("1_7aeby")
text = "Upgrade"
baseCost = 50
value = 5.0
maxLevel = -1
upgradeDirection = 0
upgradeScaleType = 0
costScaleType = 0
costModificator = 0.0

View file

@ -9,7 +9,7 @@ enum UPGRADE_DIRECTION { INCREASE = 1, DECREASE = -1 }
@export var icon : Texture2D = preload("res://Assets/Icones/medal2.png")
@export var text : String = "Upgrade"
@export var baseCost : int = 50
@export_range(1, INF, 1, "hide_slider") var value : float
@export_range(0.001, 999, 0.001, "hide_slider") var value : float
@export_range(-1, 100, 1, "hide_slider") var maxLevel : int = -1 ##[param -1] for infinite leveling
@export_group("Upgrade Scaling")