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 healthBar : ProgressBar = $HealthBar3D/SubViewport/HealthBar2D
|
||||
@onready var progress : float :
|
||||
get(): return $"..".progress
|
||||
|
||||
var attack_target : Node3D
|
||||
var is_alive : bool = true
|
||||
|
|
@ -51,6 +49,8 @@ func attack():
|
|||
if $AttackCooldown.is_stopped():
|
||||
$AttackCooldown.start()
|
||||
attack_target.take_damage(base_attack_damage)
|
||||
attack_target = null
|
||||
path.progress = 0
|
||||
|
||||
|
||||
func death() -> void:
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ func win():
|
|||
|
||||
|
||||
func spendMoney(amount : int) -> bool:
|
||||
if money > amount:
|
||||
if money >= amount:
|
||||
money -= amount
|
||||
return true
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -31,9 +31,9 @@ func _input(event: InputEvent) -> void:
|
|||
|
||||
var newPosition : float = position.y
|
||||
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:
|
||||
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))
|
||||
position.y = newPosition
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
@tool
|
||||
extends StaticBody3D
|
||||
class_name Tower
|
||||
|
||||
|
|
@ -39,7 +38,7 @@ var projectileScene : PackedScene = preload("res://Towers/Projectiles/projectile
|
|||
@onready var energyRecoveryCooldown : Timer = $EnergyRecoveryCooldown
|
||||
|
||||
|
||||
var energy : float = max_energy:
|
||||
var energy : float :
|
||||
set(value):
|
||||
energyBar.value = value
|
||||
energy = clampf(value, 0.0, max_energy)
|
||||
|
|
@ -63,6 +62,7 @@ var builded : bool = false
|
|||
func _ready() -> void:
|
||||
EventBus.tower_upgraded.connect(apply_upgrade)
|
||||
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
|
||||
if not Engine.is_editor_hint():
|
||||
collision_layer = 0
|
||||
|
|
@ -99,6 +99,7 @@ func resting() -> void:
|
|||
collision_mask = 0
|
||||
|
||||
if builded:
|
||||
toggleConnection(false)
|
||||
energyRecoveryCooldown.start()
|
||||
|
||||
|
||||
|
|
@ -106,6 +107,7 @@ func in_action() -> void:
|
|||
visible = true
|
||||
|
||||
if builded:
|
||||
toggleConnection(true)
|
||||
collision_layer = 0b100
|
||||
collision_mask = 0b100
|
||||
energyRecoveryCooldown.stop()
|
||||
|
|
@ -114,7 +116,7 @@ func in_action() -> void:
|
|||
func choose_target() -> void:
|
||||
target = null
|
||||
for enemy in availableTargets:
|
||||
if not target || enemy.progress > target.progress:
|
||||
if not target || enemy.path.progress > target.path.progress:
|
||||
target = enemy
|
||||
|
||||
|
||||
|
|
@ -137,13 +139,24 @@ func towerChange() -> void:
|
|||
EventBus.tower_changed.emit(self)
|
||||
|
||||
|
||||
func _on_range_body_entered(body: Node3D) -> void:
|
||||
func onBodyEntered(body: Node3D) -> void:
|
||||
if body is Enemy:
|
||||
availableTargets.append(body)
|
||||
choose_target()
|
||||
|
||||
|
||||
func _on_range_body_exited(body: Node3D) -> void:
|
||||
func onBodyExited(body: Node3D) -> void:
|
||||
if body is Enemy:
|
||||
availableTargets.erase(body)
|
||||
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:
|
||||
EventBus.tower_selected.connect(selectTower)
|
||||
EventBus.tower_selected.connect(onTowerSelect)
|
||||
#$AnimationPlayer.play("arrow_bobbing")
|
||||
|
||||
|
||||
|
|
@ -30,8 +30,8 @@ func _process(_delta: float) -> void:
|
|||
|
||||
if isTileFree(collider):
|
||||
placeTower()
|
||||
elif tower && (not selected_tower || selected_tower.builded):
|
||||
EventBus.tower_selected.emit(tower.type)
|
||||
elif tower:
|
||||
selectTower(tower.type)
|
||||
|
||||
if Input.is_action_just_pressed("rest"):
|
||||
if tower:
|
||||
|
|
@ -40,6 +40,11 @@ func _process(_delta: float) -> void:
|
|||
EventBus.tower_selected.emit(Tower.TYPE.NONE)
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventKey:
|
||||
handleTowerShortCuts(event)
|
||||
|
||||
|
||||
func handle_player_controls() -> Node3D:
|
||||
var space_state : PhysicsDirectSpaceState3D = get_world_3d().direct_space_state
|
||||
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)
|
||||
|
||||
|
||||
func selectTower(towerType: Tower.TYPE):
|
||||
func onTowerSelect(towerType: Tower.TYPE):
|
||||
# Hide current not builded tower
|
||||
if selected_tower && not selected_tower.builded:
|
||||
selected_tower.visible = false
|
||||
|
|
@ -118,3 +123,27 @@ func selectTower(towerType: Tower.TYPE):
|
|||
else:
|
||||
selected_tower = Game.initTower(towerType)
|
||||
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.cube_integrity_changed.connect(func(): cubeIntegrity.value = Game.healthPercentage)
|
||||
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)
|
||||
|
||||
|
||||
|
|
|
|||
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"
|
||||
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"]
|
||||
unique_name_in_owner = true
|
||||
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/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@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
|
||||
|
||||
|
||||
enum TYPE { BASIC, TOWER, UPGRADE }
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
var towerPrice : int
|
||||
var towerType : Tower.TYPE = Tower.TYPE.NONE
|
||||
@export var texture : Texture2D :
|
||||
set(value):
|
||||
texture = value
|
||||
$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:
|
||||
if type == TYPE.TOWER:
|
||||
if towerType != Tower.TYPE.NONE:
|
||||
EventBus.tower_selected.emit(towerType if state else Tower.TYPE.NONE)
|
||||
|
||||
|
||||
func towerChanged(tower : Tower) -> void :
|
||||
if tower.type == towerType:
|
||||
if tower.type == towerType && tower.builded:
|
||||
$EnergyBar.value = tower.energy
|
||||
$EnergyBar.max_value = tower.max_energy
|
||||
$EnergyBar.visible = tower.builded
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ func upgradeUpgrade() -> void:
|
|||
|
||||
|
||||
func canUpgrade():
|
||||
return not isLevelMax && Game.money > cost
|
||||
return not isLevelMax && Game.money >= cost
|
||||
|
||||
|
||||
func getNextValue(oldValue):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue