knockback component

This commit is contained in:
2026-01-18 12:39:01 +01:00
parent 9690280cd7
commit 35b9ea383c
21 changed files with 180 additions and 49 deletions

View File

@@ -6,7 +6,7 @@ using Movementtests.systems.damage;
[GlobalClass]
public partial class RDamageModifier : Resource, IDamageable
{
public event Action<IDamageable, float> DamageTaken;
public event Action<IDamageable, DamageRecord> DamageTaken;
[Export]
public EDamageTypes DamageType = EDamageTypes.Normal;
@@ -24,11 +24,14 @@ public partial class RDamageModifier : Resource, IDamageable
DamageType = damageType;
}
public float TakeDamage(RDamage damage)
public DamageRecord TakeDamage(DamageRecord damageRecord)
{
if (damage.DamageType != DamageType) return 0;
var finalDamage = damage.DamageDealt * Modifier;
DamageTaken?.Invoke(this, finalDamage);
return finalDamage;
if (damageRecord.Damage.DamageType != DamageType)
return damageRecord with { Damage = new RDamage(0, damageRecord.Damage.DamageType) };
var finalDamage = damageRecord.Damage.DamageDealt * Modifier;
var finalDamageRecord = damageRecord with { Damage = new RDamage(finalDamage, damageRecord.Damage.DamageType) };
DamageTaken?.Invoke(this, finalDamageRecord);
return finalDamageRecord;
}
}

View File

@@ -0,0 +1,19 @@
using Godot;
using System;
using Movementtests.interfaces;
[GlobalClass]
public partial class RKnockback : Resource
{
[Export]
public float Modifier = 1.0f;
public RKnockback()
{
Modifier = 1.0f;
}
public RKnockback(float modifier)
{
Modifier = modifier;
}
}

View File

@@ -0,0 +1 @@
uid://b44cse62qru7j

View File

@@ -6,6 +6,8 @@ public partial class RMovement : Resource
{
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float Speed;
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float Acceleration;
[Export(PropertyHint.Range, "0,20,1,or_greater")]
public float TargetHeight;
@@ -13,11 +15,13 @@ public partial class RMovement : Resource
public RMovement()
{
Speed = 3.0f;
Acceleration = 1.0f;
TargetHeight = 10.0f;
}
public RMovement(float speed, float targetHeight)
public RMovement(float speed, float acceleration, float targetHeight)
{
Speed = speed;
Acceleration = acceleration;
TargetHeight = targetHeight;
}
}