using System;

namespace pdinklag.CPW.Common
{
    /// <summary>
    /// Wraps a damage value (before modifiers) with a damage type.
    ///
    /// A damage value of 1.0 corresponds to a weak strike.
    /// </summary>
    [Serializable]
    public struct Damage
    {
        public static Damage operator *(Damage d, float multiplier) => new Damage(d.BaseAmount * multiplier, d.DamageType);
        public static Damage operator *(float multiplier, Damage d) => new Damage(d.BaseAmount * multiplier, d.DamageType);

        public static readonly Damage None = new(0);

        public float BaseAmount;
        public AssetAddress DamageType;

        /// <summary>
        /// Constructs a damage value.
        /// </summary>
        /// <param name="baseAmount">the damage base amount before modifiers</param>
        public Damage(float baseAmount)
        {
            BaseAmount = baseAmount;
            DamageType = AssetAddress.None;
        }

        /// <summary>
        /// Constructs a damage value.
        /// </summary>
        /// <param name="baseAmount">the damage base amount before modifiers</param>
        /// <param name="damageType">the asset ID for the damage type</param>
        public Damage(float baseAmount, AssetAddress damageType)
        {
            BaseAmount = baseAmount;
            DamageType = damageType;
        }
    }
}
