Add WeaponStats class and update damage calculations for ranged and melee attacks

This commit is contained in:
2025-07-11 21:58:19 +02:00
parent 19c68fec3e
commit 9261b9f00f
10 changed files with 276 additions and 12 deletions

View File

@@ -13,7 +13,7 @@ namespace Weapons
var projectile = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);
projectile.TryGetComponent<IDamageInflectorSetup>(out var inflector);
inflector?.Setup(character);
inflector?.Setup(character, weaponStats);
}
}
}

View File

@@ -19,7 +19,7 @@ namespace Weapons
hit.TryGetComponent<Health>(out var health);
if (hit.gameObject == character.gameObject) continue;
var damage = character.attributes.Damage * character.attributes.MeleeDamage;
var damage = weaponStats.Damage + character.attributes.Damage * character.attributes.MeleeDamage;
health.TakeDamage(damage);
}
}

View File

@@ -17,9 +17,17 @@ namespace Weapons
public GameObject Owner { get; private set; }
public DamageType Type => DamageType.Ranged;
public void Setup(Character attacker)
public void Setup(Character attacker, WeaponStats weaponStats = null)
{
Damage = attacker.attributes.Damage * attacker.attributes.RangedDamage;
if (weaponStats != null)
{
Damage = weaponStats.Damage + attacker.attributes.Damage * attacker.attributes.RangedDamage;
}
else
{
Damage = attacker.attributes.Damage * attacker.attributes.RangedDamage;
}
Owner = attacker.gameObject;
}

View File

@@ -1,6 +1,8 @@
using System;
using Data;
using Interfaces;
using Sirenix.OdinInspector;
using Sirenix.Serialization;
using UnityEngine;
namespace Weapons
@@ -11,6 +13,7 @@ namespace Weapons
[SerializeField] private float cooldown = 1f;
[SerializeField] protected Character character;
[OdinSerialize, InlineProperty] public WeaponStats weaponStats = new();
private void Update()
{