feat: Add state machine for spawn + fixes
This commit is contained in:
parent
c6cdc15687
commit
4303b430ac
27 changed files with 164 additions and 153 deletions
|
|
@ -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]:
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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 = []
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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")]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 ]
|
||||
|
|
|
|||
12
UI/gui.gd
12
UI/gui.gd
|
|
@ -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)
|
||||
|
|
|
|||
30
UI/gui.tscn
30
UI/gui.tscn
|
|
@ -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"]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue