summaryrefslogtreecommitdiff
path: root/Scenes/Entities/Enemies/Components
diff options
context:
space:
mode:
Diffstat (limited to 'Scenes/Entities/Enemies/Components')
-rw-r--r--Scenes/Entities/Enemies/Components/Collision.gd18
-rw-r--r--Scenes/Entities/Enemies/Components/Collision.tscn6
-rw-r--r--Scenes/Entities/Enemies/Components/Movement.gd56
-rw-r--r--Scenes/Entities/Enemies/Components/Movement.tscn6
4 files changed, 86 insertions, 0 deletions
diff --git a/Scenes/Entities/Enemies/Components/Collision.gd b/Scenes/Entities/Enemies/Components/Collision.gd
new file mode 100644
index 0000000..b2e8d9b
--- /dev/null
+++ b/Scenes/Entities/Enemies/Components/Collision.gd
@@ -0,0 +1,18 @@
+extends Node
+
+class_name Component_Collision
+
+
+signal collided
+
+@export_node_path("CharacterBody2D") var entityPath: NodePath
+@onready var entity: CharacterBody2D = get_node(entityPath)
+
+@export_node_path("CollisionShape2D") var collision_shape_path: NodePath
+@onready var collision_shape: CollisionShape2D = get_node(collision_shape_path)
+
+
+func init():
+ var collision_area = Utilities.Collision.Area.new(entity, collision_shape)
+ collision_area.connect("collided", func(area): emit_signal("collided", area))
+ entity.add_child(collision_area)
diff --git a/Scenes/Entities/Enemies/Components/Collision.tscn b/Scenes/Entities/Enemies/Components/Collision.tscn
new file mode 100644
index 0000000..d11f927
--- /dev/null
+++ b/Scenes/Entities/Enemies/Components/Collision.tscn
@@ -0,0 +1,6 @@
+[gd_scene load_steps=2 format=3 uid="uid://ce3vv2pod6auc"]
+
+[ext_resource type="Script" path="res://Scenes/Entities/Enemies/Components/Collision.gd" id="1_j60o5"]
+
+[node name="Collision" type="Node"]
+script = ExtResource("1_j60o5")
diff --git a/Scenes/Entities/Enemies/Components/Movement.gd b/Scenes/Entities/Enemies/Components/Movement.gd
new file mode 100644
index 0000000..0b30820
--- /dev/null
+++ b/Scenes/Entities/Enemies/Components/Movement.gd
@@ -0,0 +1,56 @@
+extends Node
+
+signal direction_changed
+
+@export_node_path("CharacterBody2D") var entityPath: NodePath
+@onready var entity: CharacterBody2D = get_node(entityPath)
+
+@export_node_path("AnimatedSprite2D") var spritePath: NodePath
+@onready var sprite: AnimatedSprite2D = get_node(spritePath)
+
+@export var SPEED: int
+
+const DIRECTIONS = [Vector2.UP, Vector2.RIGHT, Vector2.DOWN, Vector2.LEFT]
+var CURRENT_DIRECTION = Vector2.UP
+
+@onready var MovementTimer: Timer = Timer.new()
+
+
+func _ready():
+ MovementTimer.wait_time = 3.0
+ MovementTimer.autostart = true
+ MovementTimer.connect("timeout", Callable(_on_movement_timer_timeout))
+ add_child(MovementTimer)
+
+
+func physics_process(delta):
+ if CURRENT_DIRECTION == Vector2.UP:
+ entity.velocity.y -= SPEED
+ sprite.play("up")
+ elif CURRENT_DIRECTION == Vector2.DOWN:
+ entity.velocity.y += SPEED
+ sprite.play("down")
+ elif CURRENT_DIRECTION == Vector2.LEFT:
+ entity.velocity.x -= SPEED
+ sprite.play("left")
+ elif CURRENT_DIRECTION == Vector2.RIGHT:
+ entity.velocity.x += SPEED
+ sprite.play("right")
+
+ var collision = entity.move_and_collide(entity.velocity * delta)
+ entity.velocity = entity.velocity.lerp(Vector2(0, 0), 1)
+
+ return collision
+
+
+func _on_movement_timer_timeout():
+ var directions = DIRECTIONS.duplicate()
+
+ directions.remove_at(directions.find(CURRENT_DIRECTION))
+ directions.shuffle()
+
+ CURRENT_DIRECTION = directions[0]
+
+ emit_signal("direction_changed", CURRENT_DIRECTION)
+
+ MovementTimer.start()
diff --git a/Scenes/Entities/Enemies/Components/Movement.tscn b/Scenes/Entities/Enemies/Components/Movement.tscn
new file mode 100644
index 0000000..f3d5909
--- /dev/null
+++ b/Scenes/Entities/Enemies/Components/Movement.tscn
@@ -0,0 +1,6 @@
+[gd_scene load_steps=2 format=3 uid="uid://cq7yj2av01tqd"]
+
+[ext_resource type="Script" path="res://Scenes/Entities/Enemies/Components/Movement.gd" id="1_mtee1"]
+
+[node name="Movement" type="Node"]
+script = ExtResource("1_mtee1")