From 65538495c4839ce68428bf6f1a1e9be77b924458 Mon Sep 17 00:00:00 2001 From: Minimata Date: Sat, 17 Jan 2026 23:18:06 +0100 Subject: [PATCH] spawning --- interfaces/IDamageMaker.cs | 2 +- interfaces/IHealthable.cs | 5 +++ interfaces/IMoveable.cs | 1 + interfaces/ISpawnable.cs | 2 +- maps/GYMs/enemies.tscn | 31 ++++++++++++-- maps/city.tscn | 23 +++++++++- player_controller/PlayerController.tscn | 10 +---- player_controller/Scripts/PlayerController.cs | 4 +- scenes/enemies/Enemy.cs | 42 ++++++++++++++----- scenes/enemies/flying_enemy/flying_enemy.tscn | 14 +++---- .../flying_enemy/flying_enemy_movement.tres | 9 ++++ .../grounded_enemy.tscn} | 17 ++++---- .../grounded_enemy_damage.tres} | 0 .../grounded_enemy_health.tres} | 0 .../grounded_enemy_movement.tres | 8 ++++ scenes/health/CHealth.cs | 5 ++- scenes/movement/CFlyingMovement.cs | 5 +-- scenes/movement/CGroundedMovement.cs | 2 +- scenes/spawners/Spawner.cs | 24 +++++++---- scenes/spawners/spawner.tscn | 2 +- 20 files changed, 146 insertions(+), 60 deletions(-) create mode 100644 scenes/enemies/flying_enemy/flying_enemy_movement.tres rename scenes/enemies/{first_enemy/first_enemy.tscn => grounded_enemy/grounded_enemy.tscn} (85%) rename scenes/enemies/{first_enemy/first_enemy_damage.tres => grounded_enemy/grounded_enemy_damage.tres} (100%) rename scenes/enemies/{first_enemy/first_enemy_health.tres => grounded_enemy/grounded_enemy_health.tres} (100%) create mode 100644 scenes/enemies/grounded_enemy/grounded_enemy_movement.tres diff --git a/interfaces/IDamageMaker.cs b/interfaces/IDamageMaker.cs index cc49d17e..2ff503e1 100644 --- a/interfaces/IDamageMaker.cs +++ b/interfaces/IDamageMaker.cs @@ -5,5 +5,5 @@ namespace Movementtests.interfaces; public interface IDamageMaker { [Export] - RDamage GetDamageDealt { get; set; } + RDamage RDamage { get; set; } } \ No newline at end of file diff --git a/interfaces/IHealthable.cs b/interfaces/IHealthable.cs index 93915252..8ce69037 100644 --- a/interfaces/IHealthable.cs +++ b/interfaces/IHealthable.cs @@ -1,4 +1,5 @@ using System; +using Godot; namespace Movementtests.interfaces; @@ -7,5 +8,9 @@ public interface IHealthable event Action HealthChanged; event Action HealthDepleted; + [Export] RHealth RHealth { get; set; } + + float CurrentHealth { get; set; } + void ReduceHealth(IDamageable source, float amount); } \ No newline at end of file diff --git a/interfaces/IMoveable.cs b/interfaces/IMoveable.cs index 6e3d9a6a..fd505a28 100644 --- a/interfaces/IMoveable.cs +++ b/interfaces/IMoveable.cs @@ -11,5 +11,6 @@ public record MovementInputs( public interface IMoveable { + [Export] RMovement RMovement { get; set; } Vector3 ComputeVelocity(MovementInputs inputs); } \ No newline at end of file diff --git a/interfaces/ISpawnable.cs b/interfaces/ISpawnable.cs index e5edbf18..f13ca98a 100644 --- a/interfaces/ISpawnable.cs +++ b/interfaces/ISpawnable.cs @@ -3,5 +3,5 @@ using Godot; interface ISpawnable { - void TestMethod(); + void Setup(); } \ No newline at end of file diff --git a/maps/GYMs/enemies.tscn b/maps/GYMs/enemies.tscn index 850b8f46..6d910aa9 100644 --- a/maps/GYMs/enemies.tscn +++ b/maps/GYMs/enemies.tscn @@ -1,13 +1,20 @@ -[gd_scene load_steps=12 format=3 uid="uid://q7uc1h2jpbd2"] +[gd_scene load_steps=19 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"] [ext_resource type="Script" uid="uid://jitubgv6judn" path="res://resource_definitions/RDamage.cs" id="2_sysok"] -[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/first_enemy/first_enemy.tscn" id="3_3uydm"] +[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="3_3uydm"] [ext_resource type="Script" uid="uid://b4cwruitopcee" path="res://resource_definitions/RDeathEffect.cs" id="5_7m3bq"] [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="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"] +[ext_resource type="Resource" uid="uid://dg1xbjhyhgnnk" path="res://scenes/enemies/flying_enemy/flying_enemy_health.tres" id="11_2e4ci"] -[sub_resource type="Resource" id="Resource_gp7s3"] +[sub_resource type="Resource" id="Resource_2e4ci"] script = ExtResource("2_sysok") DamageDealt = 10.0 metadata/_custom_type_script = "uid://jitubgv6judn" @@ -43,7 +50,7 @@ metadata/_custom_type_script = "uid://b4cwruitopcee" [node name="Player" parent="." instance=ExtResource("1_62kkh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 7.5) TutorialDone = true -GetDamageDealt = SubResource("Resource_gp7s3") +RDamage = SubResource("Resource_2e4ci") [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_1bvp3") @@ -125,3 +132,19 @@ Target = NodePath("../Player") [node name="FlyingEnemy2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("5_8fd2t")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 7, -16) Target = NodePath("../Player") + +[node name="GroundedSpawner" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("6_7m3bq")] +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") +DamageInputs = ExtResource("9_dmw1t") +Target = NodePath("../Player") + +[node name="FlyingSpawner" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("6_7m3bq")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18, 11, -14) +EnemyToSpawn = ExtResource("5_8fd2t") +MovementInputs = ExtResource("10_spw1u") +HealthInputs = ExtResource("11_2e4ci") +DamageInputs = ExtResource("9_gp7s3") +Target = NodePath("../Player") diff --git a/maps/city.tscn b/maps/city.tscn index ad494f58..49f5279c 100644 --- a/maps/city.tscn +++ b/maps/city.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=40 format=3 uid="uid://dmkw8cmalm5k"] +[gd_scene load_steps=45 format=3 uid="uid://dmkw8cmalm5k"] [ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_2vsi6"] [ext_resource type="Script" uid="uid://blenis2y55fmg" path="res://tools/city_helpers.gd" id="1_qwuk2"] @@ -23,6 +23,10 @@ [ext_resource type="Texture2D" uid="uid://cjh5cnvdbq5ku" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_button_b_outline.svg" id="19_efsse"] [ext_resource type="Texture2D" uid="uid://nrhxjdpuje3f" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lt_outline.svg" id="20_crf87"] [ext_resource type="Texture2D" uid="uid://dyjvbsvbriii4" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_rb_outline.svg" id="23_p287n"] +[ext_resource type="PackedScene" uid="uid://c305mfrtumcyq" path="res://scenes/spawners/spawner.tscn" id="24_qwuk2"] +[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="25_nrosh"] +[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="25_x7fl1"] +[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="26_lu3yt"] [sub_resource type="LabelSettings" id="LabelSettings_2k3fr"] font_size = 30 @@ -89,6 +93,12 @@ adjustment_enabled = true [sub_resource type="BoxMesh" id="BoxMesh_p287n"] +[sub_resource type="Resource" id="Resource_pxspk"] +script = ExtResource("26_lu3yt") +Speed = 7.0 +TargetHeight = 15.0 +metadata/_custom_type_script = "uid://dtpxijlnb2c5" + [node name="Main" type="Node3D"] script = ExtResource("1_qwuk2") @@ -436,6 +446,17 @@ spot_range = 47.233 spot_angle = 18.85 spot_angle_attenuation = 10.556052 +[node name="Spawner" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("24_qwuk2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19, 43, -111.5) +EnemyToSpawn = ExtResource("25_x7fl1") +MovementInputs = SubResource("Resource_pxspk") +Target = NodePath("../Player") + +[node name="Spawner2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("24_qwuk2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 31, 7.5, -88) +EnemyToSpawn = ExtResource("25_nrosh") +Target = NodePath("../Player") + [connection signal="timeout" from="TutorialController/WaitToShowBlockingTuto" to="TutorialController" method="_show_weapon_tutorial"] [connection signal="body_exited" from="TutoTriggers/TriggerTutoMove" to="TutorialController" method="hide_tutorials"] [connection signal="body_entered" from="TutoTriggers/TriggerTutoMantle" to="TutorialController" method="_on_tuto_mantle_body_entered"] diff --git a/player_controller/PlayerController.tscn b/player_controller/PlayerController.tscn index 5cc56119..f1a7b1a1 100644 --- a/player_controller/PlayerController.tscn +++ b/player_controller/PlayerController.tscn @@ -1,8 +1,7 @@ -[gd_scene load_steps=56 format=3 uid="uid://bei4nhkf8lwdo"] +[gd_scene load_steps=54 format=3 uid="uid://bei4nhkf8lwdo"] [ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://player_controller/Scripts/PlayerController.cs" id="1_poq2x"] [ext_resource type="PackedScene" uid="uid://cf3rrgr1imvv4" path="res://scenes/path/path.tscn" id="2_6lejt"] -[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://resource_definitions/RDamage.cs" id="2_q14ux"] [ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/base_mode/base_mode.tres" id="3_cresl"] [ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="4_q7bng"] [ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/base_mode/rotate_y.tres" id="4_rxwoh"] @@ -46,11 +45,6 @@ [ext_resource type="Texture2D" uid="uid://chvt6g0xn5c2m" path="res://systems/dash/light-ring.jpg" id="32_lgpc8"] [ext_resource type="Script" uid="uid://b4dwolbvt8our" path="res://addons/godot_state_charts/history_state.gd" id="41_ruloh"] -[sub_resource type="Resource" id="Resource_m8gvy"] -script = ExtResource("2_q14ux") -DamageDealt = 3.0 -metadata/_custom_type_script = "uid://jitubgv6judn" - [sub_resource type="Resource" id="Resource_jb43f"] script = ExtResource("5_q7bng") Modifier = 3.0 @@ -88,7 +82,6 @@ blend_mode = 1 [node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("CDamage")] collision_mask = 272 script = ExtResource("1_poq2x") -GetDamageDealt = SubResource("Resource_m8gvy") CDamage = NodePath("CDamageable") WalkSpeed = 7.5 AccelerationFloor = 4.0 @@ -335,6 +328,7 @@ offset_left = 1524.0 offset_top = 1.0 offset_right = -8.0 offset_bottom = 1.0 +enabled = false initial_node_to_watch = NodePath("../StateChart") [node name="UI" type="Control" parent="."] diff --git a/player_controller/Scripts/PlayerController.cs b/player_controller/Scripts/PlayerController.cs index da7a1bd0..483e834a 100644 --- a/player_controller/Scripts/PlayerController.cs +++ b/player_controller/Scripts/PlayerController.cs @@ -68,7 +68,7 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback [ExportCategory("Combat")] [ExportGroup("Damage")] [Export] - public RDamage GetDamageDealt { get; set; } + public RDamage RDamage { get; set; } [Export] public CDamageable CDamage { get; set; } @@ -1757,7 +1757,7 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback foreach (var body in bodies) { if(body is IDamageable spawnable) - spawnable.TakeDamage(GetDamageDealt); + spawnable.TakeDamage(RDamage); } } } diff --git a/scenes/enemies/Enemy.cs b/scenes/enemies/Enemy.cs index 74d3576b..863aff5f 100644 --- a/scenes/enemies/Enemy.cs +++ b/scenes/enemies/Enemy.cs @@ -3,28 +3,34 @@ using Godot; using Movementtests.interfaces; [GlobalClass] -public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealthable, IKillable +public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealthable, IKillable, IMoveable { public event Action DamageTaken; - public event Action HealthChanged; public event Action HealthDepleted; - - [Export] - public Node3D Target { get; set; } [Export] - public RDamage GetDamageDealt { get; set; } + public Node3D Target { get; set; } [Export] public Node CHealth { get; set; } + [Export] + public RHealth RHealth { get; set; } + + public float CurrentHealth { get; set; } [Export] public Node CDamage { get; set; } + + [Export] + public RDamage RDamage { get; set; } [Export] public Node CMovement { get; set; } - + [Export] + public RMovement RMovement { get; set; } + + [Export] public RDeathEffect[] DeathEffects { get; set; } @@ -38,13 +44,21 @@ public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealth if (CDamage is IDamageable damageable) damageable.DamageTaken += ReduceHealth; if (CHealth is IHealthable healthable) healthable.HealthDepleted += Kill; } + + public void Setup() + { + if (CMovement is IMoveable moveable && RMovement != null) moveable.RMovement = RMovement; + if (CHealth is IHealthable healthable && RHealth != null) + { + healthable.RHealth = RHealth; + healthable.CurrentHealth = RHealth.StartingHealth; + } + } public override void _PhysicsProcess(double delta) { var targetPlanar = new Vector3(Target.GlobalPosition.X, GlobalPosition.Y, Target.GlobalPosition.Z); LookAt(targetPlanar); - - if (CMovement is not IMoveable movement) return; var inputs = new MovementInputs( Velocity: Velocity, @@ -53,15 +67,21 @@ public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealth gravity: GetGravity(), delta: delta ); - Velocity = movement!.ComputeVelocity(inputs); + Velocity = ComputeVelocity(inputs); MoveAndSlide(); } + + public Vector3 ComputeVelocity(MovementInputs inputs) + { + if (CMovement is not IMoveable movement) return Vector3.Zero; + return movement!.ComputeVelocity(inputs); + } public void OnDamageBoxTriggered(Node3D body) { GD.Print("Take this!"); if (body is not IDamageable damageable) return; - damageable.TakeDamage(GetDamageDealt); + damageable.TakeDamage(RDamage); } public float TakeDamage(RDamage damage) diff --git a/scenes/enemies/flying_enemy/flying_enemy.tscn b/scenes/enemies/flying_enemy/flying_enemy.tscn index 4b4952e7..84efdaa8 100644 --- a/scenes/enemies/flying_enemy/flying_enemy.tscn +++ b/scenes/enemies/flying_enemy/flying_enemy.tscn @@ -2,18 +2,14 @@ [ext_resource type="Script" uid="uid://bn7sc6id7n166" path="res://scenes/enemies/Enemy.cs" id="1_q8l7o"] [ext_resource type="Script" uid="uid://b6y3ugfydvch0" path="res://resource_definitions/RDamageModifier.cs" id="2_1bsgx"] +[ext_resource type="Resource" uid="uid://dg1xbjhyhgnnk" path="res://scenes/enemies/flying_enemy/flying_enemy_health.tres" id="2_ma2bq"] [ext_resource type="Resource" uid="uid://dgo65k2ceqfvy" path="res://scenes/enemies/flying_enemy/flying_enemy_damage.tres" id="2_on7rt"] +[ext_resource type="Resource" uid="uid://bwqjaom4k7rc3" path="res://scenes/enemies/flying_enemy/flying_enemy_movement.tres" id="4_dejyg"] [ext_resource type="Script" uid="uid://bjwrpv3jpsc1e" path="res://scenes/health/CHealth.cs" id="4_ys4jv"] -[ext_resource type="Script" uid="uid://baiapod3csndf" path="res://resource_definitions/RHealth.cs" id="5_irbqc"] [ext_resource type="PackedScene" uid="uid://dmw5ibwrb483f" path="res://scenes/movement/CFlyingMovement.tscn" id="7_vaeds"] [ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="8_on7rt"] [ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="8_uotso"] -[sub_resource type="Resource" id="Resource_aarbi"] -script = ExtResource("5_irbqc") -StartingHealth = 50.0 -metadata/_custom_type_script = "uid://baiapod3csndf" - [sub_resource type="Resource" id="Resource_jnv07"] script = ExtResource("2_1bsgx") metadata/_custom_type_script = "uid://b6y3ugfydvch0" @@ -50,15 +46,17 @@ collision_layer = 16 collision_mask = 273 motion_mode = 1 script = ExtResource("1_q8l7o") -GetDamageDealt = ExtResource("2_on7rt") CHealth = NodePath("CHealth") +RHealth = ExtResource("2_ma2bq") CDamage = NodePath("CDamageable") +RDamage = ExtResource("2_on7rt") CMovement = NodePath("CFlyingMovement") +RMovement = ExtResource("4_dejyg") DeathEffects = Array[Object]([]) [node name="CHealth" type="Node" parent="."] script = ExtResource("4_ys4jv") -HealthResource = SubResource("Resource_aarbi") +RHealth = ExtResource("2_ma2bq") metadata/_custom_type_script = "uid://bjwrpv3jpsc1e" [node name="CDamageable" type="Node" parent="."] diff --git a/scenes/enemies/flying_enemy/flying_enemy_movement.tres b/scenes/enemies/flying_enemy/flying_enemy_movement.tres new file mode 100644 index 00000000..590d2836 --- /dev/null +++ b/scenes/enemies/flying_enemy/flying_enemy_movement.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="RMovement" load_steps=2 format=3 uid="uid://bwqjaom4k7rc3"] + +[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="1_3yq0a"] + +[resource] +script = ExtResource("1_3yq0a") +Speed = 3.0 +TargetHeight = 10.0 +metadata/_custom_type_script = "uid://dtpxijlnb2c5" diff --git a/scenes/enemies/first_enemy/first_enemy.tscn b/scenes/enemies/grounded_enemy/grounded_enemy.tscn similarity index 85% rename from scenes/enemies/first_enemy/first_enemy.tscn rename to scenes/enemies/grounded_enemy/grounded_enemy.tscn index 4c08a751..1544064a 100644 --- a/scenes/enemies/first_enemy/first_enemy.tscn +++ b/scenes/enemies/grounded_enemy/grounded_enemy.tscn @@ -1,18 +1,15 @@ [gd_scene load_steps=17 format=3 uid="uid://dxt0e2ugmttqq"] [ext_resource type="Script" uid="uid://bn7sc6id7n166" path="res://scenes/enemies/Enemy.cs" id="1_r6506"] -[ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/first_enemy/first_enemy_damage.tres" id="2_6d4gl"] +[ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/grounded_enemy/grounded_enemy_damage.tres" id="2_bn56u"] [ext_resource type="Script" uid="uid://bjwrpv3jpsc1e" path="res://scenes/health/CHealth.cs" id="2_gsmti"] [ext_resource type="Script" uid="uid://b6y3ugfydvch0" path="res://resource_definitions/RDamageModifier.cs" id="2_r3cnf"] -[ext_resource type="Script" uid="uid://baiapod3csndf" path="res://resource_definitions/RHealth.cs" id="3_pvbr4"] +[ext_resource type="Resource" uid="uid://bohbojc68j7y1" path="res://scenes/enemies/grounded_enemy/grounded_enemy_health.tres" id="2_w4lm8"] +[ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="4_na24f"] [ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="7_1tw73"] [ext_resource type="PackedScene" uid="uid://dbr7ioio158ew" path="res://scenes/movement/CGroundedMovement.tscn" id="7_qyswd"] [ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="8_6d4gl"] -[sub_resource type="Resource" id="Resource_r3cnf"] -script = ExtResource("3_pvbr4") -metadata/_custom_type_script = "uid://baiapod3csndf" - [sub_resource type="Resource" id="Resource_qj0ob"] script = ExtResource("2_r3cnf") metadata/_custom_type_script = "uid://b6y3ugfydvch0" @@ -38,19 +35,21 @@ albedo_color = Color(0.06469653, 0.06469653, 0.06469653, 1) [sub_resource type="BoxShape3D" id="BoxShape3D_4yfjf"] size = Vector3(1, 2, 2) -[node name="FirstEnemy" type="CharacterBody3D" node_paths=PackedStringArray("CHealth", "CDamage", "CMovement")] +[node name="GroundedEnemy" type="CharacterBody3D" node_paths=PackedStringArray("CHealth", "CDamage", "CMovement")] collision_layer = 16 collision_mask = 273 script = ExtResource("1_r6506") -GetDamageDealt = ExtResource("2_6d4gl") CHealth = NodePath("CHealth") +RHealth = ExtResource("2_w4lm8") CDamage = NodePath("CDamageable") +RDamage = ExtResource("2_bn56u") CMovement = NodePath("CGroundedMovement") +RMovement = ExtResource("4_na24f") DeathEffects = Array[Object]([]) [node name="CHealth" type="Node" parent="."] script = ExtResource("2_gsmti") -HealthResource = SubResource("Resource_r3cnf") +RHealth = ExtResource("2_w4lm8") metadata/_custom_type_script = "uid://bjwrpv3jpsc1e" [node name="CDamageable" type="Node" parent="."] diff --git a/scenes/enemies/first_enemy/first_enemy_damage.tres b/scenes/enemies/grounded_enemy/grounded_enemy_damage.tres similarity index 100% rename from scenes/enemies/first_enemy/first_enemy_damage.tres rename to scenes/enemies/grounded_enemy/grounded_enemy_damage.tres diff --git a/scenes/enemies/first_enemy/first_enemy_health.tres b/scenes/enemies/grounded_enemy/grounded_enemy_health.tres similarity index 100% rename from scenes/enemies/first_enemy/first_enemy_health.tres rename to scenes/enemies/grounded_enemy/grounded_enemy_health.tres diff --git a/scenes/enemies/grounded_enemy/grounded_enemy_movement.tres b/scenes/enemies/grounded_enemy/grounded_enemy_movement.tres new file mode 100644 index 00000000..5e9d721e --- /dev/null +++ b/scenes/enemies/grounded_enemy/grounded_enemy_movement.tres @@ -0,0 +1,8 @@ +[gd_resource type="Resource" script_class="RMovement" load_steps=2 format=3 uid="uid://bqq6uukbdfysr"] + +[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="1_hsy8g"] + +[resource] +script = ExtResource("1_hsy8g") +Speed = 5.0 +metadata/_custom_type_script = "uid://dtpxijlnb2c5" diff --git a/scenes/health/CHealth.cs b/scenes/health/CHealth.cs index 4d56fdb3..70445167 100644 --- a/scenes/health/CHealth.cs +++ b/scenes/health/CHealth.cs @@ -9,17 +9,18 @@ public partial class CHealth : Node, IHealthable public event Action HealthDepleted; [Export] - public RHealth HealthResource; + public RHealth RHealth { get; set; } public float CurrentHealth { get; set; } public override void _Ready() { - CurrentHealth = HealthResource.StartingHealth; + CurrentHealth = RHealth.StartingHealth; } public void ReduceHealth(IDamageable source, float amount) { + GD.Print(CurrentHealth); CurrentHealth -= amount; HealthChanged?.Invoke(this, CurrentHealth); diff --git a/scenes/movement/CFlyingMovement.cs b/scenes/movement/CFlyingMovement.cs index d9000104..f6648e96 100644 --- a/scenes/movement/CFlyingMovement.cs +++ b/scenes/movement/CFlyingMovement.cs @@ -5,7 +5,7 @@ namespace Movementtests.scenes.movement; public partial class CFlyingMovement : Node3D, IMoveable { - [Export] public RMovement RMovement; + [Export] public RMovement RMovement { get; set; } [Export(PropertyHint.Layers3DPhysics)] public uint TerrainCollision { get; set; } = 1; @@ -15,10 +15,9 @@ public partial class CFlyingMovement : Node3D, IMoveable public override void _Ready() { - _randomDirection = new Vector3(GD.RandRange(-1, 1), 1, GD.RandRange(-1, 1)).Normalized(); } - + public Vector3 ComputeVelocity(MovementInputs inputs) { var velocity = inputs.Velocity; diff --git a/scenes/movement/CGroundedMovement.cs b/scenes/movement/CGroundedMovement.cs index 8554fa13..63712b2c 100644 --- a/scenes/movement/CGroundedMovement.cs +++ b/scenes/movement/CGroundedMovement.cs @@ -5,7 +5,7 @@ namespace Movementtests.scenes.movement; public partial class CGroundedMovement : Node3D, IMoveable { - [Export] public RMovement RMovement; + [Export] public RMovement RMovement { get; set; } [Export] public RayCast3D WallInFrontRayCast { get; set; } diff --git a/scenes/spawners/Spawner.cs b/scenes/spawners/Spawner.cs index e504441c..eaa3c662 100644 --- a/scenes/spawners/Spawner.cs +++ b/scenes/spawners/Spawner.cs @@ -4,10 +4,15 @@ using System; public partial class Spawner : Node3D { [Export(PropertyHint.NodeType)] - public PackedScene SceneToSpawn { get; set; } + public PackedScene EnemyToSpawn { get; set; } [Export] - public Resource Inputs; + public RMovement MovementInputs { get; set; } + [Export] + public RHealth HealthInputs { get; set; } + [Export] + public RDamage DamageInputs { get; set; } + [Export] public Node3D Target { get; set; } @@ -35,13 +40,16 @@ public partial class Spawner : Node3D public void Spawn() { - if (SceneToSpawn == null || !SceneToSpawn.CanInstantiate()) return; - - var spawnedInstance = SceneToSpawn.Instantiate() as Enemy; - if (spawnedInstance == null) return; - - // spawnedInstance.Inputs = Inputs as EnemyInitInputs; + if (EnemyToSpawn == null || !EnemyToSpawn.CanInstantiate()) return; + + if (EnemyToSpawn.Instantiate() is not Enemy spawnedInstance) return; + spawnedInstance.Target = Target; + spawnedInstance.RMovement = MovementInputs; + spawnedInstance.RDamage = DamageInputs; + spawnedInstance.RHealth = HealthInputs; + spawnedInstance.Setup(); + GetTree().GetCurrentScene().AddChild(spawnedInstance); spawnedInstance.GlobalPosition = GlobalPosition; diff --git a/scenes/spawners/spawner.tscn b/scenes/spawners/spawner.tscn index fef8b3eb..38c46caf 100644 --- a/scenes/spawners/spawner.tscn +++ b/scenes/spawners/spawner.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://c305mfrtumcyq"] [ext_resource type="Script" uid="uid://djyspwixi01j5" path="res://scenes/spawners/Spawner.cs" id="1_2otbo"] -[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/first_enemy/first_enemy.tscn" id="2_2otbo"] +[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="2_2otbo"] [node name="Spawner" type="Node3D"] script = ExtResource("1_2otbo")