diff --git a/Code/Factories/EffectFactory.cs b/Code/Factories/EffectFactory.cs index 8442458..e890301 100644 --- a/Code/Factories/EffectFactory.cs +++ b/Code/Factories/EffectFactory.cs @@ -18,6 +18,7 @@ public class EffectFactory DamageEffectResource damage => new DamageEffect(damage.Amount), HitscanEffectResource hitscan => new HitscanEffect(hitscan.Range), ConsumeAmmoCostResource consumeAmmo => new ConsumeAmmoCost(consumeAmmo.AmmoId, consumeAmmo.Amount), + HealEffectResource heal => new HealEffect(heal.Amount), _ => throw new ArgumentOutOfRangeException(nameof(resource), $"Effect type {resource.GetType().Name} not recognized") }; diff --git a/Code/Presenters/GamePresenter.cs b/Code/Presenters/GamePresenter.cs index 2671d94..3e06c40 100644 --- a/Code/Presenters/GamePresenter.cs +++ b/Code/Presenters/GamePresenter.cs @@ -83,7 +83,8 @@ public partial class GamePresenter : Node _world.RegisterSystem(new WeaponSystem()); _world.RegisterSystem(new ProjectileSystem()); _world.RegisterSystem(new ProjectileInitializationSystem(_world)); - + + _world.RegisterSystem(new HealingSystem(_world)); _world.RegisterSystem(new DamageSystem(_world)); _world.RegisterSystem(new ProjectileCleanupSystem()); _world.RegisterSystem(new DestructionSystem()); diff --git a/Code/Resources/HealEffectResource.cs b/Code/Resources/HealEffectResource.cs new file mode 100644 index 0000000..e0514a8 --- /dev/null +++ b/Code/Resources/HealEffectResource.cs @@ -0,0 +1,9 @@ +using Godot; + +namespace CryptonymThunder.Code.Resources; + +[GlobalClass] +public partial class HealEffectResource : EffectResource +{ + [Export(PropertyHint.Range, "1,1000,1")] public float Amount { get; set; } = 10f; +} \ No newline at end of file diff --git a/Code/Resources/HealEffectResource.cs.uid b/Code/Resources/HealEffectResource.cs.uid new file mode 100644 index 0000000..e70a82f --- /dev/null +++ b/Code/Resources/HealEffectResource.cs.uid @@ -0,0 +1 @@ +uid://dh30an2xwhfgu diff --git a/Code/Services/GodotWorldQuery.cs b/Code/Services/GodotWorldQuery.cs index 9ea285a..ae5541a 100644 --- a/Code/Services/GodotWorldQuery.cs +++ b/Code/Services/GodotWorldQuery.cs @@ -42,7 +42,9 @@ public class GodotWorldQuery(GamePresenter ownerNode) : IWorldQuery return new HitResult { DidHit = true, - HitEntity = hitEntity + HitEntity = hitEntity, + Position = result["position"].AsVector3().ToGameCore(), + Normal = result["normal"].AsVector3().ToGameCore() }; } } diff --git a/Resources/Pickups/health_pack_data.tres b/Resources/Pickups/health_pack_data.tres index 2d3e8a4..b2ce2ea 100644 --- a/Resources/Pickups/health_pack_data.tres +++ b/Resources/Pickups/health_pack_data.tres @@ -1,12 +1,11 @@ [gd_resource type="Resource" script_class="PickupComponentResource" load_steps=4 format=3 uid="uid://cpw3nyfu40vyo"] [ext_resource type="Script" uid="uid://cg8upylcrj8le" path="res://Code/Resources/PickupComponentResource.cs" id="1_2ktm0"] -[ext_resource type="Script" uid="uid://btv24gsw1p850" path="res://Code/Resources/Effects/DamageEffectResource.cs" id="1_3n6l8"] +[ext_resource type="Script" uid="uid://dh30an2xwhfgu" path="res://Code/Resources/HealEffectResource.cs" id="1_3n6l8"] [sub_resource type="Resource" id="Resource_qa1ki"] script = ExtResource("1_3n6l8") -Amount = -25.0 -metadata/_custom_type_script = "uid://btv24gsw1p850" +metadata/_custom_type_script = "uid://dh30an2xwhfgu" [resource] script = ExtResource("1_2ktm0")