From fa029b9e5310c6b0e1985822fa9d835f3a8470b6 Mon Sep 17 00:00:00 2001 From: Minimata Date: Wed, 21 Jan 2026 10:13:00 +0100 Subject: [PATCH] fixed resources constructors --- Movement tests.sln.DotSettings.user | 1 + components/damage/RDamage.cs | 10 +-- components/damage/RDamageModifier.cs | 10 +-- components/health/RHealth.cs | 8 +-- components/knockback/RKnockback.cs | 7 +- components/movement/RMovement.cs | 8 +-- maps/GYMs/enemies.tscn | 21 +++++- maps/city.tscn | 12 +++- project.godot | 2 +- scenes/enemies/Enemy.cs | 68 ++++++++++--------- scenes/enemies/flying_enemy/flying_enemy.tscn | 4 +- .../grounded_enemy/grounded_enemy.tscn | 4 +- 12 files changed, 83 insertions(+), 72 deletions(-) diff --git a/Movement tests.sln.DotSettings.user b/Movement tests.sln.DotSettings.user index 7ffbec7a..87f55fae 100644 --- a/Movement tests.sln.DotSettings.user +++ b/Movement tests.sln.DotSettings.user @@ -1,5 +1,6 @@  ForceIncluded + ForceIncluded ForceIncluded ForceIncluded True \ No newline at end of file diff --git a/components/damage/RDamage.cs b/components/damage/RDamage.cs index e9e0d5ef..f617e06a 100644 --- a/components/damage/RDamage.cs +++ b/components/damage/RDamage.cs @@ -6,16 +6,12 @@ using Movementtests.systems.damage; public partial class RDamage : Resource { [Export(PropertyHint.Range, "0,10,0.1,or_greater")] - public float DamageDealt = 1.0f; + public float DamageDealt { get; set;} [Export] - public EDamageTypes DamageType = EDamageTypes.Normal; + public EDamageTypes DamageType { get; set;} - public RDamage() - { - DamageDealt = 1.0f; - DamageType = EDamageTypes.Normal; - } + public RDamage() : this(1.0f, EDamageTypes.Normal) {} public RDamage(float damageDealt, EDamageTypes damageType) { DamageDealt = damageDealt; diff --git a/components/damage/RDamageModifier.cs b/components/damage/RDamageModifier.cs index e51a6b0a..e5aaaf76 100644 --- a/components/damage/RDamageModifier.cs +++ b/components/damage/RDamageModifier.cs @@ -9,15 +9,11 @@ public partial class RDamageModifier : Resource, IDamageable public event Action DamageTaken; [Export] - public EDamageTypes DamageType = EDamageTypes.Normal; + public EDamageTypes DamageType { get; set;} [Export] - public float Modifier = 1.0f; + public float Modifier { get; set;} - public RDamageModifier() - { - Modifier = 1.0f; - DamageType = EDamageTypes.Normal; - } + public RDamageModifier() : this(EDamageTypes.Normal, 1.0f) {} public RDamageModifier(EDamageTypes damageType, float modifier) { Modifier = modifier; diff --git a/components/health/RHealth.cs b/components/health/RHealth.cs index cd78f89d..3392d5bd 100644 --- a/components/health/RHealth.cs +++ b/components/health/RHealth.cs @@ -6,13 +6,9 @@ using Movementtests.interfaces; public partial class RHealth : Resource { [Export] - public float StartingHealth = 100.0f; - - public RHealth() - { - StartingHealth = 100.0f; - } + public float StartingHealth { get; set;} + public RHealth() : this(100.0f) {} public RHealth(float startingHealth) { StartingHealth = startingHealth; diff --git a/components/knockback/RKnockback.cs b/components/knockback/RKnockback.cs index cfcb1108..5906b358 100644 --- a/components/knockback/RKnockback.cs +++ b/components/knockback/RKnockback.cs @@ -6,12 +6,9 @@ using Movementtests.interfaces; public partial class RKnockback : Resource { [Export] - public float Modifier = 1.0f; + public float Modifier { get; set;} - public RKnockback() - { - Modifier = 1.0f; - } + public RKnockback() : this(1.0f) {} public RKnockback(float modifier) { Modifier = modifier; diff --git a/components/movement/RMovement.cs b/components/movement/RMovement.cs index fe3645d2..770ba499 100644 --- a/components/movement/RMovement.cs +++ b/components/movement/RMovement.cs @@ -14,13 +14,7 @@ public partial class RMovement : Resource [Export(PropertyHint.Range, "0,20,1,or_greater")] public float TargetHeight { get; set;} - public RMovement() - { - Speed = 3.0f; - Acceleration = 1.0f; - GravityModifier = 1.0f; - TargetHeight = 10.0f; - } + public RMovement() : this(1.0f, 0.0f, 0.0f, 0.0f) {} public RMovement(float speed, float acceleration, float gravityModifier, float targetHeight) { Speed = speed; diff --git a/maps/GYMs/enemies.tscn b/maps/GYMs/enemies.tscn index e4af7790..9b26b9ec 100644 --- a/maps/GYMs/enemies.tscn +++ b/maps/GYMs/enemies.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=20 format=3 uid="uid://q7uc1h2jpbd2"] +[gd_scene load_steps=24 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"] @@ -7,6 +7,7 @@ [ext_resource type="Script" uid="uid://b4cwruitopcee" path="res://components/health/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="Script" uid="uid://dtpxijlnb2c5" path="res://components/movement/RMovement.cs" id="6_ybosk"] [ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="7_caohq"] [ext_resource type="Script" uid="uid://baiapod3csndf" path="res://components/health/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"] @@ -44,6 +45,19 @@ glow_enabled = true script = ExtResource("5_7m3bq") metadata/_custom_type_script = "uid://b4cwruitopcee" +[sub_resource type="Resource" id="Resource_5fa36"] +script = ExtResource("6_ybosk") +metadata/_custom_type_script = "uid://dtpxijlnb2c5" + +[sub_resource type="Resource" id="Resource_blhrq"] +script = ExtResource("6_ybosk") +metadata/_custom_type_script = "uid://dtpxijlnb2c5" + +[sub_resource type="Resource" id="Resource_1hrkh"] +script = ExtResource("6_ybosk") +TargetHeight = 5.0 +metadata/_custom_type_script = "uid://dtpxijlnb2c5" + [sub_resource type="Resource" id="Resource_ybosk"] script = ExtResource("9_2e4ci") StartingHealth = 1.0 @@ -120,22 +134,27 @@ material = ExtResource("2_3uydm") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -16.83681) Target = NodePath("../Player") DeathEffects = Array[Object]([SubResource("Resource_sysok")]) +RMovement = SubResource("Resource_5fa36") [node name="Enemy2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("3_3uydm")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, -16.83681) Target = NodePath("../Player") +RMovement = SubResource("Resource_blhrq") [node name="Enemy3" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("3_3uydm")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0, -16.83681) Target = NodePath("../Player") +RMovement = SubResource("Resource_5fa36") [node name="FlyingEnemy" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("5_8fd2t")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 7, -16) Target = NodePath("../Player") +RMovement = SubResource("Resource_1hrkh") [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") +RMovement = SubResource("Resource_1hrkh") [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) diff --git a/maps/city.tscn b/maps/city.tscn index 5dcb64cd..2ab0d318 100644 --- a/maps/city.tscn +++ b/maps/city.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=45 format=3 uid="uid://dmkw8cmalm5k"] +[gd_scene load_steps=50 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"] @@ -27,6 +27,11 @@ [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://components/movement/RMovement.cs" id="26_lu3yt"] +[ext_resource type="Resource" uid="uid://dg1xbjhyhgnnk" path="res://scenes/enemies/flying_enemy/flying_enemy_health.tres" id="27_lgco8"] +[ext_resource type="Resource" uid="uid://dgo65k2ceqfvy" path="res://scenes/enemies/flying_enemy/flying_enemy_damage.tres" id="28_51ivn"] +[ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="30_3w3wd"] +[ext_resource type="Resource" uid="uid://bohbojc68j7y1" path="res://scenes/enemies/grounded_enemy/grounded_enemy_health.tres" id="31_5hbxb"] +[ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/grounded_enemy/grounded_enemy_damage.tres" id="32_hmdts"] [sub_resource type="LabelSettings" id="LabelSettings_2k3fr"] font_size = 30 @@ -450,11 +455,16 @@ spot_angle_attenuation = 10.556052 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19, 43, -111.5) EnemyToSpawn = ExtResource("25_x7fl1") MovementInputs = SubResource("Resource_pxspk") +HealthInputs = ExtResource("27_lgco8") +DamageInputs = ExtResource("28_51ivn") 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") +MovementInputs = ExtResource("30_3w3wd") +HealthInputs = ExtResource("31_5hbxb") +DamageInputs = ExtResource("32_hmdts") Target = NodePath("../Player") [connection signal="timeout" from="TutorialController/WaitToShowBlockingTuto" to="TutorialController" method="_show_weapon_tutorial"] diff --git a/project.godot b/project.godot index aebea61e..113e849f 100644 --- a/project.godot +++ b/project.godot @@ -15,7 +15,7 @@ warnings/check_invalid_track_paths=false [application] config/name="Movement tests" -run/main_scene="uid://vm22i5sv3p3s" +run/main_scene="uid://q7uc1h2jpbd2" config/features=PackedStringArray("4.5", "C#", "Forward Plus") config/icon="res://icon.svg" diff --git a/scenes/enemies/Enemy.cs b/scenes/enemies/Enemy.cs index b72e6137..1b2da965 100644 --- a/scenes/enemies/Enemy.cs +++ b/scenes/enemies/Enemy.cs @@ -23,28 +23,24 @@ public partial class Enemy : CharacterBody3D, [ExportGroup("Health")] [Export] - public Node CHealth { get; set; } - [Export] public RHealth RHealth { get; set; } - [Export] public RDeathEffect[] DeathEffects { get; set; } + public IHealthable CHealth { get; set; } [ExportGroup("Damage")] [Export] - public Node CDamage { get; set; } - [Export] public RDamage RDamage { get; set; } - [Export] - public Node CKnockback { get; set; } + public IDamageable CDamageable { get; set; } + [Export] public RKnockback RKnockback { get; set; } + public IKnockbackable CKnockback { get; set; } [ExportGroup("Movement")] [Export] - public Node CMovement { get; set; } - [Export] public RMovement RMovement { get; set; } + public IMoveable CMovement { get; set; } // Public stuff public float CurrentHealth { get; set; } @@ -62,29 +58,35 @@ public partial class Enemy : CharacterBody3D, { _damageBox = GetNode("DamageBox"); - if (CMovement is IMoveable moveable && RMovement != null) moveable.RMovement = RMovement; - if (CHealth is IHealthable healthable && RHealth != null) + CDamageable = GetNode("CDamageable") as IDamageable; + CMovement = GetNode("CMovement") as IMoveable; + CHealth = GetNode("CHealth") as IHealthable; + CKnockback = GetNode("CKnockback") as IKnockbackable; + if (CDamageable is null) GD.PrintErr("This node needs a 'CDamage' child of type IDamageable!"); + if (CMovement is null) GD.PrintErr("This node needs a 'CMovement' child of type IMoveable!"); + if (CHealth is null) GD.PrintErr("This node needs a 'CHealth' child of type IHealthable!"); + if (CKnockback is null) GD.PrintErr("This node needs a 'CKnockback' child of type IKnockbackable!"); + + if (RMovement != null) CMovement!.RMovement = RMovement; + if (RHealth != null) { - healthable.RHealth = RHealth; - healthable.CurrentHealth = RHealth.StartingHealth; + CHealth!.RHealth = RHealth; + CHealth.CurrentHealth = RHealth.StartingHealth; } - if (CKnockback is IKnockbackable knockbackable && RKnockback != null) knockbackable.RKnockback = RKnockback; + if (RKnockback != null) CKnockback!.RKnockback = RKnockback; } public void SetupSignals() { - if (CDamage is IDamageable damageable) - { - damageable.DamageTaken += ReduceHealth; - damageable.DamageTaken += RegisterKnockback; - } - if (CHealth is IHealthable healthable) healthable.HealthDepleted += Kill; + CDamageable.DamageTaken += ReduceHealth; + CDamageable.DamageTaken += RegisterKnockback; + CHealth.HealthDepleted += Kill; } public override void _PhysicsProcess(double delta) { - // Only trigger gameplay related effects 4 times per second - if(Engine.GetPhysicsFrames() % 15 == 0) ProcessGameplay(delta); + // Only trigger gameplay related effects on specific frames + if(Engine.GetPhysicsFrames() % 10 == 0) ProcessGameplay(delta); var targetPlanar = new Vector3(Target.GlobalPosition.X, GlobalPosition.Y, Target.GlobalPosition.Z); LookAt(targetPlanar); @@ -113,25 +115,25 @@ public partial class Enemy : CharacterBody3D, public Vector3 ComputeVelocity(MovementInputs inputs) { - if (CMovement is not IMoveable movement) return Vector3.Zero; - return movement!.ComputeVelocity(inputs); + if (CMovement is null) return Vector3.Zero; + return CMovement.ComputeVelocity(inputs); } public DamageRecord TakeDamage(DamageRecord damageRecord) { - if (CDamage is not IDamageable damageable) + if (CDamageable is null) return damageRecord with { Damage = new RDamage(0, damageRecord.Damage.DamageType) }; - var finalDamage = damageable.TakeDamage(damageRecord); + var finalDamage = CDamageable.TakeDamage(damageRecord); DamageTaken?.Invoke(this, finalDamage); return finalDamage; } public void ReduceHealth(IDamageable source, DamageRecord damageRecord) { - if (CHealth is not IHealthable healthable) return; - healthable.ReduceHealth(source, damageRecord); - HealthChanged?.Invoke(this, healthable.CurrentHealth); + if (CHealth is null) return; + CHealth.ReduceHealth(source, damageRecord); + HealthChanged?.Invoke(this, CHealth.CurrentHealth); } public void Kill(IHealthable source) @@ -145,13 +147,13 @@ public partial class Enemy : CharacterBody3D, public void RegisterKnockback(IDamageable source, DamageRecord damageRecord) { - if (CKnockback is not IKnockbackable knockbackable) return; - knockbackable.RegisterKnockback(source, damageRecord); + if (CKnockback is null) return; + CKnockback.RegisterKnockback(source, damageRecord); } public Vector3 ComputeKnockback() { - if (CKnockback is not IKnockbackable knockbackable) return Vector3.Zero; - return knockbackable.ComputeKnockback(); + if (CKnockback is null) return Vector3.Zero; + return CKnockback.ComputeKnockback(); } } diff --git a/scenes/enemies/flying_enemy/flying_enemy.tscn b/scenes/enemies/flying_enemy/flying_enemy.tscn index b32164b9..9c39874c 100644 --- a/scenes/enemies/flying_enemy/flying_enemy.tscn +++ b/scenes/enemies/flying_enemy/flying_enemy.tscn @@ -54,7 +54,7 @@ CDamage = NodePath("CDamageable") RDamage = ExtResource("2_on7rt") CKnockback = NodePath("CKnockback") RKnockback = ExtResource("11_mpa2u") -CMovement = NodePath("CFlyingMovement") +CMovement = NodePath("CMovement") RMovement = ExtResource("4_dejyg") [node name="CHealth" type="Node" parent="."] @@ -67,7 +67,7 @@ script = ExtResource("8_uotso") DamageModifiers = Array[Object]([SubResource("Resource_jnv07"), SubResource("Resource_53j1c")]) metadata/_custom_type_script = "uid://b0u23nkpaimyc" -[node name="CFlyingMovement" parent="." instance=ExtResource("7_vaeds")] +[node name="CMovement" parent="." instance=ExtResource("7_vaeds")] RMovement = SubResource("Resource_on7rt") TerrainCollision = 256 diff --git a/scenes/enemies/grounded_enemy/grounded_enemy.tscn b/scenes/enemies/grounded_enemy/grounded_enemy.tscn index e99b94ab..b7a0fb0c 100644 --- a/scenes/enemies/grounded_enemy/grounded_enemy.tscn +++ b/scenes/enemies/grounded_enemy/grounded_enemy.tscn @@ -49,7 +49,7 @@ CDamage = NodePath("CDamageable") RDamage = ExtResource("2_bn56u") CKnockback = NodePath("CKnockback") RKnockback = ExtResource("11_8k3xb") -CMovement = NodePath("CGroundedMovement") +CMovement = NodePath("CMovement") RMovement = ExtResource("4_na24f") [node name="CHealth" type="Node" parent="."] @@ -62,7 +62,7 @@ script = ExtResource("7_1tw73") DamageModifiers = Array[Object]([SubResource("Resource_qj0ob")]) metadata/_custom_type_script = "uid://b0u23nkpaimyc" -[node name="CGroundedMovement" parent="." node_paths=PackedStringArray("WallInFrontRayCast") instance=ExtResource("7_qyswd")] +[node name="CMovement" parent="." node_paths=PackedStringArray("WallInFrontRayCast") instance=ExtResource("7_qyswd")] RMovement = SubResource("Resource_6d4gl") WallInFrontRayCast = NodePath("../WallInFrontRayCast")