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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
}
|
||||
|
||||
@@ -6,5 +6,5 @@ public interface ILuckComponent
|
||||
{
|
||||
public IAutoProp<int> Luck { get; }
|
||||
|
||||
public void SetLuck(int value);
|
||||
public void IncreaseLuck(int value);
|
||||
}
|
||||
|
||||
3
Zennysoft.Game.Ma.Implementation/Entity/AttackData.cs
Normal file
3
Zennysoft.Game.Ma.Implementation/Entity/AttackData.cs
Normal file
@@ -0,0 +1,3 @@
|
||||
namespace Zennysoft.Ma.Adapter;
|
||||
|
||||
public record AttackData(int BaseDamage, ElementType ElementType, bool IgnoreDefense = false, bool IgnoreElementalResistance = false);
|
||||
@@ -1,3 +0,0 @@
|
||||
namespace Zennysoft.Ma.Adapter;
|
||||
|
||||
public record Damage(int BaseDamage, ElementType ElementType, bool IsCriticalHit, bool IgnoreDefense, bool IgnoreElementalResistance);
|
||||
@@ -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>
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
@@ -5,5 +5,6 @@ public enum WeaponTag
|
||||
None,
|
||||
SelfDamage,
|
||||
IgnoreAffinity,
|
||||
IgnoreDefense,
|
||||
Knockback,
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -12,5 +12,5 @@ public interface IInventory
|
||||
|
||||
public void Remove(InventoryItem inventoryItem);
|
||||
|
||||
public void Sort();
|
||||
public void Sort(EquipableItem currentWeapon, EquipableItem currentArmor, EquipableItem currentAccessory);
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user