Added enemy movement randomization
This commit is contained in:
@@ -0,0 +1,39 @@
|
|||||||
|
class_name EnemySwampController
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
@export var passage : Passage
|
||||||
|
|
||||||
|
|
||||||
|
const SMALL_ENEMY = preload("res://game/entities/ships/enemies/small/small_enemy_ship.tscn")
|
||||||
|
const MEDIUM_ENEMY = preload("res://game/entities/ships/enemies/medium/medium_enemy_ship.tscn")
|
||||||
|
const HEAVY_ENEMY = preload("res://game/entities/ships/enemies/heavy/heavy_enemy_ship.tscn")
|
||||||
|
|
||||||
|
const ENEMY_TYPES := [ SMALL_ENEMY, MEDIUM_ENEMY, HEAVY_ENEMY ]
|
||||||
|
|
||||||
|
|
||||||
|
@onready var enemy_update_timer : Timer = $EnemyUpdateTimer
|
||||||
|
|
||||||
|
|
||||||
|
func create_enemy() -> void:
|
||||||
|
var enemy : AbstractEnemyShip = ENEMY_TYPES.pick_random().instantiate()
|
||||||
|
enemy.position = Vector2(750, randi_range(0, 360))
|
||||||
|
passage.add_child(enemy)
|
||||||
|
|
||||||
|
_update_enemy.call_deferred(enemy)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_enemy_update_timer_timeout() -> void:
|
||||||
|
enemy_update_timer.start(randi_range(3, 9))
|
||||||
|
|
||||||
|
var enemies := get_tree().get_nodes_in_group("enemies")
|
||||||
|
if enemies.is_empty(): return
|
||||||
|
|
||||||
|
var enemy : Node = enemies.pick_random()
|
||||||
|
if not enemy is AbstractEnemyShip: return
|
||||||
|
|
||||||
|
_update_enemy(enemy)
|
||||||
|
|
||||||
|
|
||||||
|
func _update_enemy(enemy: AbstractEnemyShip) -> void:
|
||||||
|
enemy.controller.target_position = Vector2(randi_range(300, 600), randi_range(30, 330))
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://drxv4egqcamtw
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://cpn5x0ijgl7ei"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://drxv4egqcamtw" path="res://game/controllers/enemy_swamp_controller.gd" id="1_ol8cy"]
|
||||||
|
|
||||||
|
[node name="EnemySwampController" type="Node"]
|
||||||
|
script = ExtResource("1_ol8cy")
|
||||||
|
|
||||||
|
[node name="EnemyUpdateTimer" type="Timer" parent="."]
|
||||||
|
one_shot = true
|
||||||
|
autostart = true
|
||||||
|
|
||||||
|
[connection signal="timeout" from="EnemyUpdateTimer" to="." method="_on_enemy_update_timer_timeout"]
|
||||||
+8
-12
@@ -1,16 +1,16 @@
|
|||||||
|
class_name Passage
|
||||||
extends Node2D
|
extends Node2D
|
||||||
|
|
||||||
|
|
||||||
const SMALL_ENEMY = preload("res://game/entities/ships/enemies/small/small_enemy_ship.tscn")
|
|
||||||
const MEDIUM_ENEMY = preload("res://game/entities/ships/enemies/medium/medium_enemy_ship.tscn")
|
|
||||||
const HEAVY_ENEMY = preload("res://game/entities/ships/enemies/heavy/heavy_enemy_ship.tscn")
|
|
||||||
|
|
||||||
const PLAYER := preload("res://game/entities/ships/player/player_ship.tscn")
|
const PLAYER := preload("res://game/entities/ships/player/player_ship.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
@onready var enemy_swamp_controller : EnemySwampController = $EnemySwampController
|
||||||
|
@onready var enemy_timer : Timer = $EnemyTimer
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
_create_player()
|
_create_player()
|
||||||
_create_random_enemy()
|
|
||||||
|
|
||||||
|
|
||||||
func _create_player() -> void:
|
func _create_player() -> void:
|
||||||
@@ -20,11 +20,7 @@ func _create_player() -> void:
|
|||||||
add_child(player)
|
add_child(player)
|
||||||
|
|
||||||
|
|
||||||
func _create_random_enemy() -> void:
|
func _on_enemy_timer_timeout() -> void:
|
||||||
const ENEMIES := [ SMALL_ENEMY, MEDIUM_ENEMY, HEAVY_ENEMY ]
|
enemy_swamp_controller.create_enemy()
|
||||||
|
|
||||||
var enemy : AbstractEnemyShip = ENEMIES.pick_random().instantiate()
|
enemy_timer.start(randi_range(3, 9))
|
||||||
enemy.position = Vector2(750, randi_range(0, 360))
|
|
||||||
enemy.destroyed.connect(_create_random_enemy, CONNECT_DEFERRED)
|
|
||||||
add_child(enemy)
|
|
||||||
enemy.controller.target_position = Vector2(550, 180)
|
|
||||||
|
|||||||
+12
-1
@@ -1,6 +1,7 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://dgc0087kvarx6"]
|
[gd_scene load_steps=4 format=3 uid="uid://dgc0087kvarx6"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://c6gpm3edyr4nu" path="res://game/passage.gd" id="1_ltkyg"]
|
[ext_resource type="Script" uid="uid://c6gpm3edyr4nu" path="res://game/passage.gd" id="1_ltkyg"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cpn5x0ijgl7ei" path="res://game/controllers/enemy_swamp_controller.tscn" id="2_72vqi"]
|
||||||
|
|
||||||
[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_ltkyg"]
|
[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_ltkyg"]
|
||||||
|
|
||||||
@@ -32,3 +33,13 @@ position = Vector2(640, 180)
|
|||||||
rotation = -1.5707964
|
rotation = -1.5707964
|
||||||
shape = SubResource("WorldBoundaryShape2D_ltkyg")
|
shape = SubResource("WorldBoundaryShape2D_ltkyg")
|
||||||
one_way_collision = true
|
one_way_collision = true
|
||||||
|
|
||||||
|
[node name="EnemySwampController" parent="." node_paths=PackedStringArray("passage") instance=ExtResource("2_72vqi")]
|
||||||
|
passage = NodePath("..")
|
||||||
|
|
||||||
|
[node name="EnemyTimer" type="Timer" parent="."]
|
||||||
|
wait_time = 10.0
|
||||||
|
one_shot = true
|
||||||
|
autostart = true
|
||||||
|
|
||||||
|
[connection signal="timeout" from="EnemyTimer" to="." method="_on_enemy_timer_timeout"]
|
||||||
|
|||||||
Reference in New Issue
Block a user