More enemy AI added

This commit is contained in:
2025-11-29 16:15:42 +03:00
parent 371ded7d06
commit 16ba892f74
15 changed files with 106 additions and 26 deletions
+62 -4
View File
@@ -11,6 +11,15 @@ const HEAVY_ENEMY = preload("res://game/entities/ships/enemies/heavy/heavy_enemy
const ENEMY_TYPES := [ SMALL_ENEMY, MEDIUM_ENEMY, HEAVY_ENEMY ]
const SHORT_DISTANCE = 75
const MEDIUM_DISTANCE = 150
const LONG_DISTANCE = 300
const INDIRECT_OFFSET = 75
const MIN_POSITION = Vector2(300, 30)
const MAX_POSITION = Vector2(600, 330)
@onready var enemy_update_timer : Timer = $EnemyUpdateTimer
@@ -23,9 +32,7 @@ func create_enemy() -> void:
_update_enemy.call_deferred(enemy)
func _on_enemy_update_timer_timeout() -> void:
enemy_update_timer.start(randi_range(3, 9))
func _on_enemy_update_timer_timeout() -> void:
var enemies := get_tree().get_nodes_in_group("enemies")
if enemies.is_empty(): return
@@ -36,4 +43,55 @@ func _on_enemy_update_timer_timeout() -> void:
func _update_enemy(enemy: AbstractEnemyShip) -> void:
enemy.controller.target_position = Vector2(randi_range(300, 600), randi_range(30, 330))
var players := get_tree().get_nodes_in_group("players")
if players.is_empty():
_random_move_enemy(enemy)
return
var player : Node = players.pick_random()
if not player is PlayerShip:
_random_move_enemy(enemy)
return
_target_enemy_to_player(enemy, player)
func _target_enemy_to_player(enemy: AbstractEnemyShip, player: PlayerShip) -> void:
match enemy.weapon_type:
AbstractWeapon.Type.NONE:
_random_move_enemy(enemy)
AbstractWeapon.Type.SHORT_RANGE:
_update_enemy_target_position(enemy, player, SHORT_DISTANCE)
AbstractWeapon.Type.MEDIUM_RANGE:
_update_enemy_target_position(enemy, player, MEDIUM_DISTANCE)
AbstractWeapon.Type.LONG_RANGE:
_update_enemy_target_position(enemy, player, LONG_DISTANCE)
AbstractWeapon.Type.HOMING:
_update_enemy_target_position(enemy, player, LONG_DISTANCE, INDIRECT_OFFSET)
AbstractWeapon.Type.MINES:
_update_enemy_target_position(enemy, player, SHORT_DISTANCE, INDIRECT_OFFSET)
func _update_enemy_target_position(
enemy: AbstractEnemyShip,
player: PlayerShip,
distance: int,
offset: int = 0
) -> void:
var new_position := player.position
new_position.x += distance
if offset != 0:
if randi_range(0, 1) == 0:
new_position.y += offset
else:
new_position.y -= offset
enemy.controller.target_position = new_position.clamp(MIN_POSITION, MAX_POSITION)
func _random_move_enemy(enemy: AbstractEnemyShip) -> void:
enemy.controller.target_position = Vector2(
randf_range(MIN_POSITION.x, MAX_POSITION.x),
randf_range(MIN_POSITION.y, MAX_POSITION.y)
)
+2 -1
View File
@@ -6,7 +6,8 @@
script = ExtResource("1_ol8cy")
[node name="EnemyUpdateTimer" type="Timer" parent="."]
one_shot = true
process_callback = 0
wait_time = 0.5
autostart = true
[connection signal="timeout" from="EnemyUpdateTimer" to="." method="_on_enemy_update_timer_timeout"]