chore: UX + many minor fixes
This commit is contained in:
parent
4643f1de55
commit
fffb13a27f
9 changed files with 82 additions and 47 deletions
|
|
@ -19,8 +19,6 @@ var health : int = 0 :
|
||||||
|
|
||||||
@onready var path : PathFollow3D = get_parent()
|
@onready var path : PathFollow3D = get_parent()
|
||||||
@onready var healthBar : ProgressBar = $HealthBar3D/SubViewport/HealthBar2D
|
@onready var healthBar : ProgressBar = $HealthBar3D/SubViewport/HealthBar2D
|
||||||
@onready var progress : float :
|
|
||||||
get(): return $"..".progress
|
|
||||||
|
|
||||||
var attack_target : Node3D
|
var attack_target : Node3D
|
||||||
var is_alive : bool = true
|
var is_alive : bool = true
|
||||||
|
|
@ -51,6 +49,8 @@ func attack():
|
||||||
if $AttackCooldown.is_stopped():
|
if $AttackCooldown.is_stopped():
|
||||||
$AttackCooldown.start()
|
$AttackCooldown.start()
|
||||||
attack_target.take_damage(base_attack_damage)
|
attack_target.take_damage(base_attack_damage)
|
||||||
|
attack_target = null
|
||||||
|
path.progress = 0
|
||||||
|
|
||||||
|
|
||||||
func death() -> void:
|
func death() -> void:
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ func win():
|
||||||
|
|
||||||
|
|
||||||
func spendMoney(amount : int) -> bool:
|
func spendMoney(amount : int) -> bool:
|
||||||
if money > amount:
|
if money >= amount:
|
||||||
money -= amount
|
money -= amount
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,9 @@ func _input(event: InputEvent) -> void:
|
||||||
|
|
||||||
var newPosition : float = position.y
|
var newPosition : float = position.y
|
||||||
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
|
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
|
||||||
newPosition = clampf(newPosition - .2, curve.min_value, curve.max_value)
|
newPosition = clampf(newPosition - .2, curve.min_domain, curve.max_domain)
|
||||||
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
|
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
|
||||||
newPosition = clampf(newPosition + .2, curve.min_value, curve.max_value)
|
newPosition = clampf(newPosition + .2, curve.min_domain, curve.max_domain)
|
||||||
|
|
||||||
rotation.x = deg_to_rad(curve.sample(newPosition))
|
rotation.x = deg_to_rad(curve.sample(newPosition))
|
||||||
position.y = newPosition
|
position.y = newPosition
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
@tool
|
|
||||||
extends StaticBody3D
|
extends StaticBody3D
|
||||||
class_name Tower
|
class_name Tower
|
||||||
|
|
||||||
|
|
@ -39,7 +38,7 @@ var projectileScene : PackedScene = preload("res://Towers/Projectiles/projectile
|
||||||
@onready var energyRecoveryCooldown : Timer = $EnergyRecoveryCooldown
|
@onready var energyRecoveryCooldown : Timer = $EnergyRecoveryCooldown
|
||||||
|
|
||||||
|
|
||||||
var energy : float = max_energy:
|
var energy : float :
|
||||||
set(value):
|
set(value):
|
||||||
energyBar.value = value
|
energyBar.value = value
|
||||||
energy = clampf(value, 0.0, max_energy)
|
energy = clampf(value, 0.0, max_energy)
|
||||||
|
|
@ -63,6 +62,7 @@ var builded : bool = false
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
EventBus.tower_upgraded.connect(apply_upgrade)
|
EventBus.tower_upgraded.connect(apply_upgrade)
|
||||||
energyRecoveryCooldown.timeout.connect(func(): energy += energy_regen)
|
energyRecoveryCooldown.timeout.connect(func(): energy += energy_regen)
|
||||||
|
energy = max_energy
|
||||||
# WARNING : Prevent .tscn file to be modified by the load of the scene in editor
|
# WARNING : Prevent .tscn file to be modified by the load of the scene in editor
|
||||||
if not Engine.is_editor_hint():
|
if not Engine.is_editor_hint():
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
|
|
@ -99,6 +99,7 @@ func resting() -> void:
|
||||||
collision_mask = 0
|
collision_mask = 0
|
||||||
|
|
||||||
if builded:
|
if builded:
|
||||||
|
toggleConnection(false)
|
||||||
energyRecoveryCooldown.start()
|
energyRecoveryCooldown.start()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -106,6 +107,7 @@ func in_action() -> void:
|
||||||
visible = true
|
visible = true
|
||||||
|
|
||||||
if builded:
|
if builded:
|
||||||
|
toggleConnection(true)
|
||||||
collision_layer = 0b100
|
collision_layer = 0b100
|
||||||
collision_mask = 0b100
|
collision_mask = 0b100
|
||||||
energyRecoveryCooldown.stop()
|
energyRecoveryCooldown.stop()
|
||||||
|
|
@ -114,7 +116,7 @@ func in_action() -> void:
|
||||||
func choose_target() -> void:
|
func choose_target() -> void:
|
||||||
target = null
|
target = null
|
||||||
for enemy in availableTargets:
|
for enemy in availableTargets:
|
||||||
if not target || enemy.progress > target.progress:
|
if not target || enemy.path.progress > target.path.progress:
|
||||||
target = enemy
|
target = enemy
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -137,13 +139,24 @@ func towerChange() -> void:
|
||||||
EventBus.tower_changed.emit(self)
|
EventBus.tower_changed.emit(self)
|
||||||
|
|
||||||
|
|
||||||
func _on_range_body_entered(body: Node3D) -> void:
|
func onBodyEntered(body: Node3D) -> void:
|
||||||
if body is Enemy:
|
if body is Enemy:
|
||||||
availableTargets.append(body)
|
availableTargets.append(body)
|
||||||
choose_target()
|
choose_target()
|
||||||
|
|
||||||
|
|
||||||
func _on_range_body_exited(body: Node3D) -> void:
|
func onBodyExited(body: Node3D) -> void:
|
||||||
if body is Enemy:
|
if body is Enemy:
|
||||||
availableTargets.erase(body)
|
availableTargets.erase(body)
|
||||||
choose_target()
|
choose_target()
|
||||||
|
|
||||||
|
|
||||||
|
func toggleConnection(activate : bool) -> void:
|
||||||
|
if activate:
|
||||||
|
$Range.body_entered.connect(onBodyEntered)
|
||||||
|
$Range.body_exited.connect(onBodyExited)
|
||||||
|
else:
|
||||||
|
$Range.body_entered.disconnect(onBodyEntered)
|
||||||
|
$Range.body_exited.disconnect(onBodyExited)
|
||||||
|
availableTargets.clear()
|
||||||
|
target = null
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ var buildedTower : int = 0
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
EventBus.tower_selected.connect(selectTower)
|
EventBus.tower_selected.connect(onTowerSelect)
|
||||||
#$AnimationPlayer.play("arrow_bobbing")
|
#$AnimationPlayer.play("arrow_bobbing")
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -30,8 +30,8 @@ func _process(_delta: float) -> void:
|
||||||
|
|
||||||
if isTileFree(collider):
|
if isTileFree(collider):
|
||||||
placeTower()
|
placeTower()
|
||||||
elif tower && (not selected_tower || selected_tower.builded):
|
elif tower:
|
||||||
EventBus.tower_selected.emit(tower.type)
|
selectTower(tower.type)
|
||||||
|
|
||||||
if Input.is_action_just_pressed("rest"):
|
if Input.is_action_just_pressed("rest"):
|
||||||
if tower:
|
if tower:
|
||||||
|
|
@ -40,6 +40,11 @@ func _process(_delta: float) -> void:
|
||||||
EventBus.tower_selected.emit(Tower.TYPE.NONE)
|
EventBus.tower_selected.emit(Tower.TYPE.NONE)
|
||||||
|
|
||||||
|
|
||||||
|
func _input(event: InputEvent) -> void:
|
||||||
|
if event is InputEventKey:
|
||||||
|
handleTowerShortCuts(event)
|
||||||
|
|
||||||
|
|
||||||
func handle_player_controls() -> Node3D:
|
func handle_player_controls() -> Node3D:
|
||||||
var space_state : PhysicsDirectSpaceState3D = get_world_3d().direct_space_state
|
var space_state : PhysicsDirectSpaceState3D = get_world_3d().direct_space_state
|
||||||
var mouse_pos : Vector2 = get_viewport().get_mouse_position()
|
var mouse_pos : Vector2 = get_viewport().get_mouse_position()
|
||||||
|
|
@ -104,7 +109,7 @@ func moveTower(tower: Tower, toPosition: Vector3) -> void:
|
||||||
EventBus.team_in_rest_changed.emit(buildedTower - inAction)
|
EventBus.team_in_rest_changed.emit(buildedTower - inAction)
|
||||||
|
|
||||||
|
|
||||||
func selectTower(towerType: Tower.TYPE):
|
func onTowerSelect(towerType: Tower.TYPE):
|
||||||
# Hide current not builded tower
|
# Hide current not builded tower
|
||||||
if selected_tower && not selected_tower.builded:
|
if selected_tower && not selected_tower.builded:
|
||||||
selected_tower.visible = false
|
selected_tower.visible = false
|
||||||
|
|
@ -118,3 +123,27 @@ func selectTower(towerType: Tower.TYPE):
|
||||||
else:
|
else:
|
||||||
selected_tower = Game.initTower(towerType)
|
selected_tower = Game.initTower(towerType)
|
||||||
add_child(selected_tower)
|
add_child(selected_tower)
|
||||||
|
|
||||||
|
|
||||||
|
func selectTower(towerType: Tower.TYPE, force : bool = false) -> void:
|
||||||
|
if towerType && (force || not selected_tower || selected_tower.builded):
|
||||||
|
EventBus.tower_selected.emit(towerType)
|
||||||
|
|
||||||
|
|
||||||
|
func handleTowerShortCuts(event: InputEventKey) -> void:
|
||||||
|
if event.pressed:
|
||||||
|
return
|
||||||
|
|
||||||
|
var towerType : Tower.TYPE = Tower.TYPE.NONE
|
||||||
|
match event.physical_keycode:
|
||||||
|
KEY_Q: towerType = Tower.TYPE.PIERRE
|
||||||
|
KEY_W: towerType = Tower.TYPE.ALINE
|
||||||
|
KEY_E: towerType = Tower.TYPE.MAXENCE
|
||||||
|
KEY_R: towerType = Tower.TYPE.VICTORIA
|
||||||
|
KEY_A: towerType = Tower.TYPE.EVAN
|
||||||
|
KEY_S: towerType = Tower.TYPE.ALEX
|
||||||
|
KEY_D: towerType = Tower.TYPE.GERALDINE
|
||||||
|
#KEY_F: towerType = Tower.TYPE
|
||||||
|
|
||||||
|
if Game.allowedTowers.has(towerType):
|
||||||
|
selectTower(towerType, true)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ func _ready() -> void:
|
||||||
Game.allowed_tower_has_change.connect(addTowerButtonNodes)
|
Game.allowed_tower_has_change.connect(addTowerButtonNodes)
|
||||||
Game.cube_integrity_changed.connect(func(): cubeIntegrity.value = Game.healthPercentage)
|
Game.cube_integrity_changed.connect(func(): cubeIntegrity.value = Game.healthPercentage)
|
||||||
Game.money_changed.connect(func(): %LabelMoney.text = "%d €" % Game.money)
|
Game.money_changed.connect(func(): %LabelMoney.text = "%d €" % Game.money)
|
||||||
|
EventBus.wave_has_change.connect(func(wave): %WaveNumber.text = "Wave N°%d" % wave)
|
||||||
%NextWaveBtn.pressed.connect(EventBus.lauch_next_wave.emit)
|
%NextWaveBtn.pressed.connect(EventBus.lauch_next_wave.emit)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
17
UI/gui.tscn
17
UI/gui.tscn
|
|
@ -95,6 +95,16 @@ theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
|
||||||
text = "0"
|
text = "0"
|
||||||
horizontal_alignment = 2
|
horizontal_alignment = 2
|
||||||
|
|
||||||
|
[node name="WaveNumber" type="Label" parent="HBoxContainer/InfoPanel/MarginContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
|
||||||
|
|
||||||
|
[node name="WaveCooldown" type="Label" parent="HBoxContainer/InfoPanel/MarginContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
|
||||||
|
|
||||||
[node name="CubeIntegrity" type="ProgressBar" parent="HBoxContainer"]
|
[node name="CubeIntegrity" type="ProgressBar" parent="HBoxContainer"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
custom_minimum_size = Vector2(10, 5)
|
custom_minimum_size = Vector2(10, 5)
|
||||||
|
|
@ -253,10 +263,3 @@ size_flags_vertical = 0
|
||||||
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/QuitLevelBtn" to="." method="quitLevel"]
|
[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="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/TowerButton" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/TowerButton" method="buttonToggled"]
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25818" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25818" method="buttonToggled"]
|
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25819" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25819" method="buttonToggled"]
|
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25820" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25820" method="buttonToggled"]
|
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25821" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25821" method="buttonToggled"]
|
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25822" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25822" method="buttonToggled"]
|
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25823" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25823" method="buttonToggled"]
|
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25824" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@25824" method="buttonToggled"]
|
|
||||||
|
|
|
||||||
|
|
@ -3,42 +3,31 @@ extends Button
|
||||||
class_name GuiButton
|
class_name GuiButton
|
||||||
|
|
||||||
|
|
||||||
enum TYPE { BASIC, TOWER, UPGRADE }
|
var towerPrice : int
|
||||||
|
var towerType : Tower.TYPE = Tower.TYPE.NONE
|
||||||
|
|
||||||
var type : TYPE = TYPE.BASIC
|
|
||||||
|
|
||||||
|
|
||||||
var towerType : Tower.TYPE :
|
|
||||||
set(value):
|
|
||||||
towerType = value
|
|
||||||
if towerType != Tower.TYPE.NONE:
|
|
||||||
type = TYPE.TOWER
|
|
||||||
toggle_mode = true
|
|
||||||
add_theme_stylebox_override("pressed", GameStyleBoxFlat.createWithColor(GameColor.COLOR.SELECTED))
|
|
||||||
EventBus.tower_changed.connect(towerChanged)
|
|
||||||
EventBus.tower_selected.connect(func(_type): set_pressed_no_signal(_type == towerType))
|
|
||||||
if type == TYPE.UPGRADE:
|
|
||||||
EventBus.tower_upgraded.connect(upgradeTower)
|
|
||||||
|
|
||||||
|
|
||||||
func upgradeTower(_towerType : Tower.TYPE, upgrade : TowerUpgrade) -> void:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
@export var texture : Texture2D :
|
@export var texture : Texture2D :
|
||||||
set(value):
|
set(value):
|
||||||
texture = value
|
texture = value
|
||||||
$TextureRect.texture = texture
|
$TextureRect.texture = texture
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if towerType == Tower.TYPE.NONE:
|
||||||
|
return
|
||||||
|
|
||||||
|
toggle_mode = true
|
||||||
|
add_theme_stylebox_override("pressed", GameStyleBoxFlat.createWithColor(GameColor.COLOR.SELECTED))
|
||||||
|
EventBus.tower_changed.connect(towerChanged)
|
||||||
|
EventBus.tower_selected.connect(func(_type): set_pressed_no_signal(_type == towerType))
|
||||||
|
|
||||||
|
|
||||||
func buttonToggled(state : bool) -> void:
|
func buttonToggled(state : bool) -> void:
|
||||||
if type == TYPE.TOWER:
|
if towerType != Tower.TYPE.NONE:
|
||||||
EventBus.tower_selected.emit(towerType if state else Tower.TYPE.NONE)
|
EventBus.tower_selected.emit(towerType if state else Tower.TYPE.NONE)
|
||||||
|
|
||||||
|
|
||||||
func towerChanged(tower : Tower) -> void :
|
func towerChanged(tower : Tower) -> void :
|
||||||
if tower.type == towerType:
|
if tower.type == towerType && tower.builded:
|
||||||
$EnergyBar.value = tower.energy
|
$EnergyBar.value = tower.energy
|
||||||
$EnergyBar.max_value = tower.max_energy
|
$EnergyBar.max_value = tower.max_energy
|
||||||
$EnergyBar.visible = tower.builded
|
$EnergyBar.visible = tower.builded
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ func upgradeUpgrade() -> void:
|
||||||
|
|
||||||
|
|
||||||
func canUpgrade():
|
func canUpgrade():
|
||||||
return not isLevelMax && Game.money > cost
|
return not isLevelMax && Game.money >= cost
|
||||||
|
|
||||||
|
|
||||||
func getNextValue(oldValue):
|
func getNextValue(oldValue):
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue