bullets now kill enemies
authorEduardo <[email protected]>
Wed, 8 May 2024 10:34:03 +0000 (12:34 +0200)
committerEduardo <[email protected]>
Wed, 8 May 2024 10:34:03 +0000 (12:34 +0200)
and they are positioned before other elements (so bullets are under)

CONSTANTS.gd
components/base_bullet/BaseBullet.tscn
components/base_bullet/base_bullet.gd
components/base_enemy/base_enemy.gd
components/player/player.gd

index 76ef443e7d3cc0c828aa981f3c93cb7f25c15ae3..f4fdfce32b5b325fde34d21343dfa0b190d341ac 100644 (file)
@@ -6,6 +6,7 @@ const MainMenu_path = "res://scenes/main_menu/MainMenu.tscn"
 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 = { 
index 0046b4d27c292132a130e51c2883efdd9d417141..ec8907a0a5680439ba07ae865e80222efd52c56f 100644 (file)
@@ -13,6 +13,11 @@ scale = Vector2(1.79425, 1.69033)
 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"]
index 3bf660dd24c90b61d985f10a595144b754aa4795..5cfbb64fb0339dc9caf94f89564bc8be4a5dd383 100644 (file)
@@ -23,3 +23,13 @@ func set_origin(node: Node2D):
 
 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()
index c1263787ef1a6ad931661c6c9d74f6d75f0e83a6..b39fa54f1e21cbee30fa8da3ef1a114a3d97178c 100644 (file)
@@ -1,8 +1,24 @@
 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()
index 32a635cb25521a291c0dff630ea3a3510dff4384..e98e07d403d872dc8b04bfba8b2fbc2e379db3da 100644 (file)
@@ -19,7 +19,7 @@ func _process(delta):
 
        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) 
@@ -51,6 +51,7 @@ func on_fire_timer_timeout():
                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)