Exemple #1
0
 public SkillLevel(Skill skill, int level)
 {
     skill.ThrowIfNull(nameof(skill));
     if (level < 0 || level > MAX_LEVEL)
     {
         throw new ArgumentOutOfRangeException("level");
     }
     BaseSkill = skill;
     Level     = level;
 }
Exemple #2
0
 public TrainedSkill(Skill baseSkill, int confirmedLevel, int sp)
 {
     baseSkill.ThrowIfNull(nameof(baseSkill));
     if (sp < 0)
     {
         throw new ArgumentOutOfRangeException("sp");
     }
     BaseSkill          = baseSkill;
     LastConfirmedLevel = new SkillLevel(baseSkill, confirmedLevel);
     SkillPoints        = sp;
 }
Exemple #3
0
        /// <summary>
        /// Calculates the skill level which is effective given the number of skill points
        /// trained in this skill.
        /// </summary>
        /// <param name="skill">The skill which has been trained.</param>
        /// <param name="sp">The number of skill points in this skill.</param>
        /// <returns>The skill level which has been acquired.</returns>
        public static SkillLevel FromSkillPoints(Skill skill, int sp)
        {
            int level = MAX_LEVEL;

            skill.ThrowIfNull(nameof(skill));
            if (sp < 0)
            {
                throw new ArgumentOutOfRangeException("sp");
            }
            double mult = skill.TrainingTimeMultiplier;

            for (int i = 0; i <= MAX_LEVEL; i++)
            {
                int spRequired = (int)Math.Ceiling(mult * BASE_SP[i]);
                if (sp < spRequired)
                {
                    // Skill is not trained to this level
                    level = i;
                    break;
                }
            }
            return(new SkillLevel(skill, level));
        }
Exemple #4
0
        /// <summary>
        /// Returns an operation to set the planned level to the given one, lowering it if it's higher than the targetted one.
        /// The returned object allows an extended control, to automatically remove dependencies and prerequisites.
        /// </summary>
        /// <param name="skill">The skill we want to plan</param>
        /// <param name="level">The level we want to train to</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">skill</exception>
        public IPlanOperation TryPlanTo(Skill skill, long level)
        {
            skill.ThrowIfNull(nameof(skill));

            return(TryPlanTo(skill, level, skill.Name));
        }