Compare commits

...

3 Commits

8 changed files with 37 additions and 8 deletions

View File

@@ -10,6 +10,8 @@ signal sig_debug_enemy_god_mode(value: bool)
signal sig_debug_stats_set(key: String, value: String) signal sig_debug_stats_set(key: String, value: String)
@warning_ignore("unused_signal") @warning_ignore("unused_signal")
signal sig_stop_spawning(value: bool) signal sig_stop_spawning(value: bool)
@warning_ignore("unused_signal")
signal sig_set_spawn_rate(value: float)
const GROUP_ENEMY = "enemy" const GROUP_ENEMY = "enemy"
const GROUP_DAMAGEABLE = "damagable" const GROUP_DAMAGEABLE = "damagable"

View File

@@ -5,7 +5,7 @@ extends CharacterBody2D
@export var max_health: float = 10.0 @export var max_health: float = 10.0
@export var default_contact_damage: float = 0.0 @export var default_contact_damage: float = 0.0
@export var target_distance: float = 6.0 @export var target_distance: float = 6.0
@export var path_update_interval: float = 0.5 @export var path_update_interval: float = 1.5
@onready var target_cast: RayCast2D = $TargetCast @onready var target_cast: RayCast2D = $TargetCast
@onready var animation_player: AnimationPlayer = $AnimationPlayer @onready var animation_player: AnimationPlayer = $AnimationPlayer
@@ -48,14 +48,13 @@ func do_movement(delta: float) -> void:
return return
if global_position.distance_to(target.global_position) < target_distance: if global_position.distance_to(target.global_position) < target_distance:
return return
_path_update_timer -= delta _path_update_timer -= delta + randf()
if _has_direct_path(): if _has_direct_path():
shape_cast_2d.enabled = false shape_cast_2d.enabled = false
_do_simple_movement() _do_simple_movement()
else: else:
_do_nav_agent_movement() _do_nav_agent_movement()
func _has_direct_path(): func _has_direct_path():
target_cast.target_position = to_local(target.global_position) target_cast.target_position = to_local(target.global_position)
target_cast.enabled = true target_cast.enabled = true

View File

@@ -56,7 +56,6 @@ shape = SubResource("CircleShape2D_satqt")
[node name="TargetCast" type="RayCast2D" parent="." groups=["damagable", "enemy"]] [node name="TargetCast" type="RayCast2D" parent="." groups=["damagable", "enemy"]]
enabled = false enabled = false
collision_mask = 3
[node name="AnimationPlayer" type="AnimationPlayer" parent="."] [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = { libraries = {
@@ -71,5 +70,6 @@ wait_time = 0.5
[node name="ShapeCast2D" type="ShapeCast2D" parent="."] [node name="ShapeCast2D" type="ShapeCast2D" parent="."]
shape = SubResource("CircleShape2D_pkqou") shape = SubResource("CircleShape2D_pkqou")
max_results = 2
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"] [connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"]

View File

@@ -14,7 +14,6 @@ func _process(delta: float) -> void:
elapsed_time += delta elapsed_time += delta
main_ui.player_ui.set_elapsed_time(elapsed_time) main_ui.player_ui.set_elapsed_time(elapsed_time)
func _unhandled_input(event: InputEvent) -> void: func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel"): if event.is_action_pressed("ui_cancel"):
main_ui.pause_ui.toggle_pause_ui() main_ui.pause_ui.toggle_pause_ui()

View File

@@ -11,9 +11,10 @@ const ENEMY_RAT = preload("res://scenes/enemies/enemy_rat.tscn")
func _ready() -> void: func _ready() -> void:
timer.wait_time = spawn_rate / 1 timer.wait_time = 1 / spawn_rate
timer.start() timer.start()
GlobalConst.sig_stop_spawning.connect(_on_stop_spawning) GlobalConst.sig_stop_spawning.connect(_on_stop_spawning)
GlobalConst.sig_set_spawn_rate.connect(_on_set_spawn_rate)
func _on_timer_timeout() -> void: func _on_timer_timeout() -> void:
@@ -25,9 +26,11 @@ func _on_timer_timeout() -> void:
new_enemy.target = target new_enemy.target = target
add_child(new_enemy) add_child(new_enemy)
func _on_stop_spawning(val: bool): func _on_stop_spawning(val: bool):
if val: if val:
timer.stop() timer.stop()
elif timer.is_stopped(): elif timer.is_stopped():
timer.start() timer.start()
func _on_set_spawn_rate(val: float):
timer.wait_time = 1 / val

View File

@@ -4,7 +4,7 @@
[node name="EnemyManager" type="Node2D"] [node name="EnemyManager" type="Node2D"]
script = ExtResource("1_tfsap") script = ExtResource("1_tfsap")
max_enemies = 50 max_enemies = 500
spawn_rate = 1.0 spawn_rate = 1.0
[node name="Timer" type="Timer" parent="."] [node name="Timer" type="Timer" parent="."]

View File

@@ -75,3 +75,7 @@ func update_debug_stats() -> void:
func _on_time_scale_slider_value_changed(value: float) -> void: func _on_time_scale_slider_value_changed(value: float) -> void:
Engine.time_scale = value Engine.time_scale = value
func _on_spawn_rate_value_changed(value: float) -> void:
GlobalConst.sig_set_spawn_rate.emit(value)

View File

@@ -154,6 +154,27 @@ max_value = 1.0
step = 0.1 step = 0.1
value = 1.0 value = 1.0
[node name="MarginContainer2" type="MarginContainer" parent="CanvasLayer/DebugUI/PanelContainer/VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/margin_left = 6
theme_override_constants/margin_right = 6
[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/DebugUI/PanelContainer/VBoxContainer/MarginContainer2"]
layout_mode = 2
[node name="Label" type="Label" parent="CanvasLayer/DebugUI/PanelContainer/VBoxContainer/MarginContainer2/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Spawn rate"
[node name="SpawnRate" type="HSlider" parent="CanvasLayer/DebugUI/PanelContainer/VBoxContainer/MarginContainer2/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
max_value = 10.0
step = 0.1
value = 1.0
[node name="StatsContainer" type="PanelContainer" parent="CanvasLayer/DebugUI"] [node name="StatsContainer" type="PanelContainer" parent="CanvasLayer/DebugUI"]
layout_mode = 0 layout_mode = 0
offset_left = 938.0 offset_left = 938.0
@@ -176,3 +197,4 @@ layout_mode = 2
[connection signal="toggled" from="CanvasLayer/DebugUI/PanelContainer/VBoxContainer/EnemyGodModeCheck" to="CanvasLayer/DebugUI" method="_on_enemy_god_mode_check_toggled"] [connection signal="toggled" from="CanvasLayer/DebugUI/PanelContainer/VBoxContainer/EnemyGodModeCheck" to="CanvasLayer/DebugUI" method="_on_enemy_god_mode_check_toggled"]
[connection signal="toggled" from="CanvasLayer/DebugUI/PanelContainer/VBoxContainer/StatsCheck" to="CanvasLayer/DebugUI" method="_on_stats_check_toggled"] [connection signal="toggled" from="CanvasLayer/DebugUI/PanelContainer/VBoxContainer/StatsCheck" to="CanvasLayer/DebugUI" method="_on_stats_check_toggled"]
[connection signal="value_changed" from="CanvasLayer/DebugUI/PanelContainer/VBoxContainer/MarginContainer/HBoxContainer/TimeScaleSlider" to="CanvasLayer/DebugUI" method="_on_time_scale_slider_value_changed"] [connection signal="value_changed" from="CanvasLayer/DebugUI/PanelContainer/VBoxContainer/MarginContainer/HBoxContainer/TimeScaleSlider" to="CanvasLayer/DebugUI" method="_on_time_scale_slider_value_changed"]
[connection signal="value_changed" from="CanvasLayer/DebugUI/PanelContainer/VBoxContainer/MarginContainer2/HBoxContainer/SpawnRate" to="CanvasLayer/DebugUI" method="_on_spawn_rate_value_changed"]