const Settings_path = "res://scenes/settings/Settings.tscn"
const BaseLevel_path = "res://scenes/base_level/BaseLevel.tscn"
const BaseBullet_path = "res://components/base_bullet/BaseBullet.tscn"
+const BaseEnemy_path = "res://components/base_enemy/BaseEnemy.tscn"
# others
const default_changeScene_config = {
color = Color(0.828474, 0.826652, 1.54018e-06, 1)
polygon = PackedVector2Array(2.53263, -1.21713, 2.07215, -1.94741, 1.15119, -2.67769, 0, -2.92112, -1.15119, -2.67769, -2, -2, -2.53263, -1.21713, -2.76287, 0, -2.53263, 1.21713, -2.07215, 1.94741, -1.15119, 2.67769, 0, 2.92112, 1.15119, 2.67769, 2, 2, 2.53263, 1.21713, 2.76287, 0)
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+[node name="Area2D" type="Area2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+light_mask = 2
scale = Vector2(1.00669, 1.00809)
shape = SubResource("CircleShape2D_b7ejx")
+
+[connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"]
func set_target(node: Node2D):
target = node
+
+
+func _on_area_2d_body_entered(body: Node2D):
+ # if it is an enemy do some damage
+ if body.name.to_lower().contains("enemy"):
+ body.take_damage(1)
+
+ # if it is not the player destroy the bullet
+ if !body.name.to_lower().contains("player"):
+ queue_free()
extends CharacterBody2D
-@export var SPEED = 150.0
+@export var SPEED: float = 150.0
@export var player: CharacterBody2D
+@export var health: float = 3.0
+
+signal enemy_died
+
func _physics_process(_delta):
velocity = position.direction_to(player.position) * SPEED
move_and_slide()
+
+
+func take_damage(amount: float):
+ health -= amount
+ if health <= 0:
+ die()
+
+
+func die():
+ # TODO: animation to die
+ emit_signal("enemy_died")
+ queue_free()
for node in get_parent().get_children():
if node is CharacterBody2D:
- if node.name.contains("Enemy"):
+ if node.name.to_lower().contains("enemy"):
if !nearest_node:
nearest_node = node
elif (position.distance_squared_to(node.position)
get_parent().add_child(bullet_instance)
var n2d = Node2D.new()
n2d.position = position
+ bullet_instance.z_index = -1
bullet_instance.set_origin(n2d)
bullet_instance.set_target(nearest_enemy)