From: Eduardo Date: Wed, 8 May 2024 10:34:03 +0000 (+0200) Subject: bullets now kill enemies X-Git-Url: http://git.edufdez.es/?a=commitdiff_plain;h=4b8186027a17316ce71ba29d7142bae63b354586;p=routes-n-roots.git bullets now kill enemies and they are positioned before other elements (so bullets are under) --- diff --git a/CONSTANTS.gd b/CONSTANTS.gd index 76ef443..f4fdfce 100644 --- a/CONSTANTS.gd +++ b/CONSTANTS.gd @@ -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 = { diff --git a/components/base_bullet/BaseBullet.tscn b/components/base_bullet/BaseBullet.tscn index 0046b4d..ec8907a 100644 --- a/components/base_bullet/BaseBullet.tscn +++ b/components/base_bullet/BaseBullet.tscn @@ -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"] diff --git a/components/base_bullet/base_bullet.gd b/components/base_bullet/base_bullet.gd index 3bf660d..5cfbb64 100644 --- a/components/base_bullet/base_bullet.gd +++ b/components/base_bullet/base_bullet.gd @@ -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() diff --git a/components/base_enemy/base_enemy.gd b/components/base_enemy/base_enemy.gd index c126378..b39fa54 100644 --- a/components/base_enemy/base_enemy.gd +++ b/components/base_enemy/base_enemy.gd @@ -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() diff --git a/components/player/player.gd b/components/player/player.gd index 32a635c..e98e07d 100644 --- a/components/player/player.gd +++ b/components/player/player.gd @@ -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)