55 lines
2.1 KiB
C#
55 lines
2.1 KiB
C#
using Sirenix.OdinInspector;
|
|
using UnityEngine;
|
|
using VOID.Generic.Dict;
|
|
using VOID.ScriptableObjects.Abilities;
|
|
|
|
namespace VOID.Generic.Objects.Weapon
|
|
{
|
|
[System.Serializable]
|
|
public class WeaponObjectData : ObjectComponent<WeaponObject>
|
|
{
|
|
#region Initialize
|
|
|
|
protected override void SelfInitialize()
|
|
{
|
|
if (handPoint)
|
|
{
|
|
// Calculate and cache - unit will hold weapon by this position and rotation - Transform defined in prefab
|
|
handRotationOffset = Quaternion.Inverse(handPoint.transform.localRotation);
|
|
handPositionOffset = handRotationOffset * handPoint.transform.localPosition * - 1;
|
|
}
|
|
|
|
if (secondHandPoint)
|
|
{
|
|
// Calculate and cache - mainly for two-handed weapons - it IK point for second hand
|
|
secondHandPositionOffset = handRotationOffset * secondHandPoint.transform.localPosition * - 1;
|
|
secondHandPositionOffset = handPositionOffset - secondHandPositionOffset;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
[Title("Visuals")]
|
|
[Required, ChildGameObjectsOnly] public GameObject model;
|
|
|
|
[Title("IK targets")]
|
|
[Required, ChildGameObjectsOnly] public GameObject handPoint;
|
|
public Quaternion handRotationOffset { get; private set; }
|
|
public Vector3 handPositionOffset { get; private set; }
|
|
[ChildGameObjectsOnly, ShowIf(nameof(weaponCarryType), WeaponCarryType.TwoHand)] public GameObject secondHandPoint;
|
|
public Vector3 secondHandPositionOffset { get; private set; }
|
|
|
|
[Title("Weapon attributes")]
|
|
public WeaponType weaponType;
|
|
public WeaponCarryType weaponCarryType;
|
|
public DamageType damageType;
|
|
[MinValue(0)] public int damageMin;
|
|
[MinValue(nameof(damageMin))] public int damageMax;
|
|
[MinValue(0)] public float criticalDamageChange;
|
|
[MinValue(1)] public float criticalDamageMultiplier;
|
|
|
|
[Title("Default Attack Ability")]
|
|
[Required] public BasicAttackAbility attackAbility;
|
|
}
|
|
}
|