public StatsObject(StatsObject baseStats, StatsModifierCollection toApply)
        {
            if (baseStats == null)
            {
                throw new ArgumentNullException(nameof(baseStats));
            }

            if (toApply == null)
            {
                throw new ArgumentNullException(nameof(toApply));
            }

            StatsObject retStats = new StatsObject();
            retStats.Strength = new RestrictedNumber(
                (int)(baseStats.HitPoints.Minimum * (1 + toApply.HitPoints.Percent) + toApply.HitPoints.Value),
                (int)(baseStats.HitPoints.Minimum * (1 + toApply.HitPoints.Percent) + toApply.HitPoints.Value),
                (int)(baseStats.HitPoints.Minimum * (1 + toApply.HitPoints.Percent) + toApply.HitPoints.Value));
        }
        public static StatsObject operator -(StatsObject a, StatsObject b)
        {
            if (a == null)
            {
                throw new ArgumentNullException(nameof(a));
            }

            if (b == null)
            {
                throw new ArgumentNullException(nameof(b));
            }

            StatsObject ret = new StatsObject();

            ret.Strength = a.Strength - b.Strength;
            ret.Dexterity = a.Dexterity - b.Dexterity;
            ret.Intelligence = a.Intelligence - b.Intelligence;
            ret.Constitution = a.Constitution - b.Constitution;
            ret.Wisdom = a.Wisdom - b.Wisdom;
            ret.Agility = a.Agility - b.Agility;
            ret.Luck = a.Luck - b.Luck;
            ret.HitPoints = a.HitPoints - b.HitPoints;
            ret.MagicPoints = a.MagicPoints - b.MagicPoints;
            ret.Level = a.Level - b.Level;
            ret.ExperiencePoints = a.ExperiencePoints - b.ExperiencePoints;
            ret.Gold = a.Gold - b.Gold;

            return ret;
        }