From 81e3f67ff2829c8af7ee761ea468b802db612c5d Mon Sep 17 00:00:00 2001 From: termite Date: Sat, 26 Apr 2025 18:11:40 -0700 Subject: [PATCH] Added enemy health and damage --- project.godot | 4 ++++ scenes/bullet/bullet.gd | 9 +++++++++ scenes/bullet/bullet.tscn | 4 +++- scenes/enemies/enemy.gd | 19 ++++++++++++++++++- scenes/enemies/grunt/grunt.tscn | 22 ++++++++++++++++++++-- scenes/world/world.tscn | 6 +++--- 6 files changed, 57 insertions(+), 7 deletions(-) diff --git a/project.godot b/project.godot index 256d401..a4164ea 100644 --- a/project.godot +++ b/project.godot @@ -21,6 +21,10 @@ window/size/viewport_width=384 window/size/viewport_height=256 window/stretch/mode="viewport" +[global_group] + +damageable="" + [input] left={ diff --git a/scenes/bullet/bullet.gd b/scenes/bullet/bullet.gd index 7697f0f..75592f0 100644 --- a/scenes/bullet/bullet.gd +++ b/scenes/bullet/bullet.gd @@ -7,8 +7,17 @@ var direction = 0 var damage var hostile = false +@onready var polygon = $Polygon2D + func _physics_process(delta: float) -> void: position += speed*delta*base_speed*direction if position.x < 0 or position.x > 256 or position.y < 0 or position.y > 256: queue_free() + + +func _on_body_entered(body: Node2D) -> void: + if body.is_in_group("damageable"): + damage = body.damage(damage) + if damage <= 0: + queue_free() diff --git a/scenes/bullet/bullet.tscn b/scenes/bullet/bullet.tscn index 635ff74..2bada38 100644 --- a/scenes/bullet/bullet.tscn +++ b/scenes/bullet/bullet.tscn @@ -13,5 +13,7 @@ position = Vector2(0.5, 0.5) shape = SubResource("RectangleShape2D_83itf") [node name="Polygon2D" type="Polygon2D" parent="."] -color = Color(0.772549, 0.411765, 0.505882, 1) +color = Color(0.329412, 0.360784, 0.494118, 1) polygon = PackedVector2Array(1, 0, 0, 0, 0, 1, 1, 1) + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scenes/enemies/enemy.gd b/scenes/enemies/enemy.gd index 67fb443..64a249d 100644 --- a/scenes/enemies/enemy.gd +++ b/scenes/enemies/enemy.gd @@ -2,10 +2,27 @@ extends Node2D var speed = 10 +var health = 30 +var total_health = 30 + +var dead = false + @export var player : CharacterBody2D @onready var navigation : NavigationAgent2D = $NavigationAgent2D +@onready var health_bar : ProgressBar = $HealthBar func _physics_process(delta: float) -> void: - navigation.target_position = player.positiond + health_bar.value = (float(health)/total_health)*100 + navigation.target_position = player.position position = position.move_toward(navigation.get_next_path_position(), delta*speed) + if dead: + queue_free() + +func damage(damage : int): + health -= damage + if health <= 0: + dead = true + return -health + + return 0 diff --git a/scenes/enemies/grunt/grunt.tscn b/scenes/enemies/grunt/grunt.tscn index a3d1237..5cd6e4e 100644 --- a/scenes/enemies/grunt/grunt.tscn +++ b/scenes/enemies/grunt/grunt.tscn @@ -1,11 +1,20 @@ -[gd_scene load_steps=4 format=3 uid="uid://bnufqnypubedj"] +[gd_scene load_steps=7 format=3 uid="uid://bnufqnypubedj"] [ext_resource type="Script" uid="uid://do2o6v238umse" path="res://scenes/enemies/enemy.gd" id="1_y73h6"] [ext_resource type="Texture2D" uid="uid://nj5tjjv0a6v8" path="res://scenes/enemies/grunt/grunt.png" id="2_668pk"] [sub_resource type="CircleShape2D" id="CircleShape2D_cahuy"] -[node name="Grunt" type="Area2D"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_y73h6"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_668pk"] +bg_color = Color(0.772549, 0.411765, 0.505882, 1) + +[sub_resource type="Theme" id="Theme_cahuy"] +ProgressBar/styles/background = SubResource("StyleBoxFlat_y73h6") +ProgressBar/styles/fill = SubResource("StyleBoxFlat_668pk") + +[node name="Grunt" type="AnimatableBody2D" groups=["damageable"]] script = ExtResource("1_y73h6") [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."] @@ -21,3 +30,12 @@ shape = SubResource("CircleShape2D_cahuy") [node name="NavigationObstacle2D" type="NavigationObstacle2D" parent="."] radius = 10.0 avoidance_enabled = false + +[node name="HealthBar" type="ProgressBar" parent="."] +offset_left = -10.0 +offset_top = -17.0 +offset_right = 11.0 +offset_bottom = -15.0 +theme = SubResource("Theme_cahuy") +value = 100.0 +show_percentage = false diff --git a/scenes/world/world.tscn b/scenes/world/world.tscn index d04acba..fd6e79b 100644 --- a/scenes/world/world.tscn +++ b/scenes/world/world.tscn @@ -5,9 +5,9 @@ [ext_resource type="PackedScene" uid="uid://bnufqnypubedj" path="res://scenes/enemies/grunt/grunt.tscn" id="3_1fp7r"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_6m72w"] -vertices = PackedVector2Array(230, 25.5312, 230, 244.82, 19.25, 241.148, 1.75781, 20.2891, 50.1172, 17.0078) -polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3, 4)]) -outlines = Array[PackedVector2Array]([PackedVector2Array(50, 7, 240, 16, 240, 255, 10, 251, -9, 11)]) +vertices = PackedVector2Array(248, 10.9219, 248, 246.031, 8.07031, 246.961, 9.92188, 9.07031) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(258, 1, 258, 256, -2, 257, 0, -1)]) [node name="World" type="Node2D"]