Additional refactoring and fixing of equipment data

Add attack data to enemy attacks (might need to rework a little bit for primary/secondary attacks)
This commit is contained in:
2025-10-23 00:05:44 -07:00
parent f0c4e65783
commit bc161a58b3
73 changed files with 641 additions and 641 deletions

View File

@@ -5,15 +5,13 @@ namespace Zennysoft.Ma.Adapter
{
public static class DamageCalculator
{
public static int CalculateDamage(Damage damage, double defense, ElementalResistanceSet elementalResistanceSet)
public static int CalculateDamage(AttackData damage, double defense, ElementalResistanceSet elementalResistanceSet)
{
var calculatedDamage = damage.BaseDamage;
if (!damage.IgnoreDefense)
calculatedDamage = CalculateDefenseResistance(calculatedDamage, defense);
if (!damage.IgnoreElementalResistance)
calculatedDamage = CalculateElementalResistance(calculatedDamage, elementalResistanceSet.ElementalResistance[damage.ElementType]);
if (damage.IsCriticalHit)
calculatedDamage *= 2;
return Mathf.Max(1, calculatedDamage);
}

View File

@@ -1,5 +1,4 @@
using Chickensoft.Collections;
using Zennysoft.Ma.Adapter;
namespace Zennysoft.Ma.Adapter;
public interface IEquipmentComponent
@@ -13,4 +12,17 @@ public interface IEquipmentComponent
public void Equip(EquipableItem equipable);
public void Unequip(EquipableItem equipable);
public bool IsItemEquipped(InventoryItem item);
public int BonusAttack { get; }
public int BonusDefense { get; }
public int BonusHP { get; }
public int BonusVT { get; }
public int BonusLuck { get; }
}

View File

@@ -6,5 +6,5 @@ public interface ILuckComponent
{
public IAutoProp<int> Luck { get; }
public void SetLuck(int value);
public void IncreaseLuck(int value);
}

View File

@@ -0,0 +1,3 @@
namespace Zennysoft.Ma.Adapter;
public record AttackData(int BaseDamage, ElementType ElementType, bool IgnoreDefense = false, bool IgnoreElementalResistance = false);

View File

@@ -1,3 +0,0 @@
namespace Zennysoft.Ma.Adapter;
public record Damage(int BaseDamage, ElementType ElementType, bool IsCriticalHit, bool IgnoreDefense, bool IgnoreElementalResistance);

View File

@@ -4,6 +4,8 @@
{
public Dictionary<ElementType, double> ElementalResistance { get; }
public static ElementalResistanceSet None => new ElementalResistanceSet(0, 0, 0, 0, 0);
public ElementalResistanceSet(double aeolicResistance, double hydricResistance, double igneousResistance, double ferrumResistance, double telluricResistance)
{
ElementalResistance = new Dictionary<ElementType, double>

View File

@@ -1,11 +1,17 @@
using Chickensoft.Introspection;
using Chickensoft.Serialization;
namespace Zennysoft.Ma.Adapter;
[Meta, Id("equipable_item")]
public abstract partial class EquipableItem : InventoryItem
{
[Save("equipable_item_is_equipped")]
public bool IsEquipped { get; set; }
public virtual int BonusAttack { get; }
public virtual int BonusDefense { get; }
public virtual int BonusHP { get; }
public virtual int BonusVT { get; }
public virtual int BonusLuck { get; }
}

View File

@@ -5,5 +5,6 @@ public enum WeaponTag
None,
SelfDamage,
IgnoreAffinity,
IgnoreDefense,
Knockback,
}

View File

@@ -53,8 +53,6 @@ public interface IGameRepo : IDisposable
public void OnPlayerAttackedWall();
public void OnPlayerAttackedEnemy();
public void OnRestorativePickedUp(IHealthPack restorative);
public void CloseInventory();
@@ -147,11 +145,6 @@ public class GameRepo : IGameRepo
PlayerAttackedWall?.Invoke();
}
public void OnPlayerAttackedEnemy()
{
PlayerAttackedEnemy?.Invoke();
}
public void OnRestorativePickedUp(IHealthPack restorative)
{
RestorativePickedUp?.Invoke(restorative);

View File

@@ -12,5 +12,5 @@ public interface IInventory
public void Remove(InventoryItem inventoryItem);
public void Sort();
public void Sort(EquipableItem currentWeapon, EquipableItem currentArmor, EquipableItem currentAccessory);
}

View File

@@ -1,15 +1,16 @@
using Godot;
using Chickensoft.GodotNodeInterfaces;
using Godot;
using Zennysoft.Game.Abstractions;
namespace Zennysoft.Ma.Adapter;
public interface IPlayer : IKillable
public interface IPlayer : IKillable, ICharacterBody3D
{
public void Activate();
public void Deactivate();
public void TakeDamage(Damage damage);
public void TakeDamage(AttackData damage);
public void Knockback(float impulse);
@@ -19,10 +20,6 @@ public interface IPlayer : IKillable
public IInventory Inventory { get; }
public Vector3 CurrentPosition { get; }
public Basis CurrentBasis { get; }
public IHealthComponent HealthComponent { get; }
public IVTComponent VTComponent { get; }