diff --git a/interfaces/ISpawnable.cs b/interfaces/ISpawnable.cs index f13ca98a..1cd8c0d9 100644 --- a/interfaces/ISpawnable.cs +++ b/interfaces/ISpawnable.cs @@ -3,5 +3,5 @@ using Godot; interface ISpawnable { - void Setup(); + void Initialize(); } \ No newline at end of file diff --git a/maps/GYMs/enemies.tscn b/maps/GYMs/enemies.tscn index 6d910aa9..626d7e07 100644 --- a/maps/GYMs/enemies.tscn +++ b/maps/GYMs/enemies.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=3 uid="uid://q7uc1h2jpbd2"] +[gd_scene load_steps=20 format=3 uid="uid://q7uc1h2jpbd2"] [ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_62kkh"] [ext_resource type="Material" uid="uid://31aulub2nqov" path="res://assets/greybox/m_greybox.tres" id="2_3uydm"] @@ -8,7 +8,7 @@ [ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="5_8fd2t"] [ext_resource type="PackedScene" uid="uid://c305mfrtumcyq" path="res://scenes/spawners/spawner.tscn" id="6_7m3bq"] [ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="7_caohq"] -[ext_resource type="Resource" uid="uid://bohbojc68j7y1" path="res://scenes/enemies/grounded_enemy/grounded_enemy_health.tres" id="8_dmw1t"] +[ext_resource type="Script" uid="uid://baiapod3csndf" path="res://resource_definitions/RHealth.cs" id="9_2e4ci"] [ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/grounded_enemy/grounded_enemy_damage.tres" id="9_dmw1t"] [ext_resource type="Resource" uid="uid://dgo65k2ceqfvy" path="res://scenes/enemies/flying_enemy/flying_enemy_damage.tres" id="9_gp7s3"] [ext_resource type="Resource" uid="uid://bwqjaom4k7rc3" path="res://scenes/enemies/flying_enemy/flying_enemy_movement.tres" id="10_spw1u"] @@ -45,6 +45,11 @@ glow_enabled = true script = ExtResource("5_7m3bq") metadata/_custom_type_script = "uid://b4cwruitopcee" +[sub_resource type="Resource" id="Resource_ybosk"] +script = ExtResource("9_2e4ci") +StartingHealth = 1.0 +metadata/_custom_type_script = "uid://baiapod3csndf" + [node name="Main" type="Node3D"] [node name="Player" parent="." instance=ExtResource("1_62kkh")] @@ -137,7 +142,7 @@ Target = NodePath("../Player") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 2.5, -15) EnemyToSpawn = ExtResource("3_3uydm") MovementInputs = ExtResource("7_caohq") -HealthInputs = ExtResource("8_dmw1t") +HealthInputs = SubResource("Resource_ybosk") DamageInputs = ExtResource("9_dmw1t") Target = NodePath("../Player") diff --git a/scenes/enemies/Enemy.cs b/scenes/enemies/Enemy.cs index 863aff5f..4dedde43 100644 --- a/scenes/enemies/Enemy.cs +++ b/scenes/enemies/Enemy.cs @@ -3,7 +3,7 @@ using Godot; using Movementtests.interfaces; [GlobalClass] -public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealthable, IKillable, IMoveable +public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealthable, IKillable, IMoveable, ISpawnable { public event Action DamageTaken; public event Action HealthChanged; @@ -38,15 +38,14 @@ public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealth public override void _Ready() { - _damageBox = GetNode("DamageBox"); - - _damageBox.BodyEntered += OnDamageBoxTriggered; - if (CDamage is IDamageable damageable) damageable.DamageTaken += ReduceHealth; - if (CHealth is IHealthable healthable) healthable.HealthDepleted += Kill; + Initialize(); + SetupSignals(); } - public void Setup() + public void Initialize() { + _damageBox = GetNode("DamageBox"); + if (CMovement is IMoveable moveable && RMovement != null) moveable.RMovement = RMovement; if (CHealth is IHealthable healthable && RHealth != null) { @@ -54,6 +53,13 @@ public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealth healthable.CurrentHealth = RHealth.StartingHealth; } } + + public void SetupSignals() + { + _damageBox.BodyEntered += OnDamageBoxTriggered; + if (CDamage is IDamageable damageable) damageable.DamageTaken += ReduceHealth; + if (CHealth is IHealthable healthable) healthable.HealthDepleted += Kill; + } public override void _PhysicsProcess(double delta) { diff --git a/scenes/spawners/Spawner.cs b/scenes/spawners/Spawner.cs index eaa3c662..f230d8de 100644 --- a/scenes/spawners/Spawner.cs +++ b/scenes/spawners/Spawner.cs @@ -48,7 +48,7 @@ public partial class Spawner : Node3D spawnedInstance.RMovement = MovementInputs; spawnedInstance.RDamage = DamageInputs; spawnedInstance.RHealth = HealthInputs; - spawnedInstance.Setup(); + spawnedInstance.Initialize(); GetTree().GetCurrentScene().AddChild(spawnedInstance); spawnedInstance.GlobalPosition = GlobalPosition;