2025-03-12 22:01:45 +01:00
|
|
|
|
using System;
|
|
|
|
|
|
using Cirno.Scripts.Enums;
|
|
|
|
|
|
using Godot;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Cirno.Scripts.Resources;
|
|
|
|
|
|
|
|
|
|
|
|
[GlobalClass]
|
2025-04-28 10:52:50 +02:00
|
|
|
|
[Tool]
|
2025-03-12 22:01:45 +01:00
|
|
|
|
public partial class DamageResistance : Resource
|
|
|
|
|
|
{
|
|
|
|
|
|
[Export]
|
|
|
|
|
|
public DamageType DamageType { get; set; } = DamageType.Neutral;
|
|
|
|
|
|
|
|
|
|
|
|
[Export]
|
|
|
|
|
|
public DamageAttribute Attribute { get; set; } = DamageAttribute.Neutral;
|
|
|
|
|
|
|
|
|
|
|
|
public float CalculateDamage(float damage, DamageType incomingDamageType)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (DamageType != incomingDamageType) return 1;
|
|
|
|
|
|
|
|
|
|
|
|
switch (Attribute)
|
|
|
|
|
|
{
|
|
|
|
|
|
case DamageAttribute.Neutral:
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case DamageAttribute.Resist:
|
|
|
|
|
|
return 0.5f;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case DamageAttribute.Weak:
|
|
|
|
|
|
return 2;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case DamageAttribute.Immune:
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
break;
|
2025-03-18 14:36:28 +01:00
|
|
|
|
case DamageAttribute.Skip:
|
|
|
|
|
|
return 0;
|
2025-03-12 22:01:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|