/// <summary> /// Constructor from an <see cref="ISkillLevel"/> object. /// </summary> /// <param name="obj"></param> /// <exception cref="System.ArgumentNullException">obj</exception> public StaticSkillLevel(ISkillLevel obj) { obj.ThrowIfNull(nameof(obj)); Skill = obj.Skill; Level = obj.Level; }
/// <summary> /// Gets true if a matching item is already contained. /// </summary> /// <remarks>The comparison is only based on skill array index and level, the two objects may be actually different references</remarks> /// <param name="item"></param> /// <returns></returns> public bool Contains(ISkillLevel item) { if (item.Skill.ArrayIndex > m_items.Length) { return(true); } T result = this[item.Skill.ArrayIndex, item.Level]; return(result != null && result.Skill != null); }
/// <summary> /// Recursive method to generate treenodes for tvSkillList. /// </summary> /// <param name="prereq">The prereq.</param> /// <param name="allSkillsKnown">if set to <c>true</c> [all skills known].</param> /// <param name="skillsUnplanned">if set to <c>true</c> [skills unplanned].</param> /// <returns></returns> private TreeNode GetSkillNode(ISkillLevel prereq, ref bool allSkillsKnown, ref bool skillsUnplanned) { if (prereq.Skill == null) { return(new TreeNode()); } Character character = (Character)m_plan.Character; Skill skill = character.Skills[prereq.Skill.ID]; TreeNode node = new TreeNode(prereq.ToString()) { Tag = new SkillLevel(skill, prereq.Level) }; // Skill requirement met if (skill.Level >= prereq.Level) { node.ImageIndex = 1; node.SelectedImageIndex = 1; } // Requirement not met, but planned else if (m_plan.IsPlanned(skill, prereq.Level)) { node.ImageIndex = 2; node.SelectedImageIndex = 2; allSkillsKnown = false; } // Requirement not met, but trainable else if (skill.Level < prereq.Level && skill.IsKnown) { node.ImageIndex = 3; node.SelectedImageIndex = 3; allSkillsKnown = false; skillsUnplanned = true; } // Requirement not met else { node.ImageIndex = 0; node.SelectedImageIndex = 0; allSkillsKnown = false; skillsUnplanned = true; } // Generate child nodes if required foreach (StaticSkillLevel childPrereq in skill.StaticData.Prerequisites.Where(childPrereq => childPrereq != prereq)) { node.Nodes.Add(GetSkillNode(childPrereq, ref allSkillsKnown, ref skillsUnplanned)); } return(node); }
/// <summary> /// Gets true if this skill level is, in any way, dependent of the provided skill level. Checks prerequisites but also same skill's lower levels. /// </summary> /// <param name="level"></param> /// <returns>True if the given item's skill is a prerequisite of this one or if it is a lower level of the same skill.</returns> public bool IsDependentOf(ISkillLevel level) { // Same skill, lower level ? if (this.Skill == level.Skill) { return(this.Level > level.Level); } // Prerequisite int neededLevel; this.Skill.HasAsPrerequisite(level.Skill, out neededLevel); return(level.Level <= neededLevel); }
/// <summary> /// Gets true if this skill level is, in any way, dependent of the provided skill level. Checks prerequisites but also same skill's lower levels. /// </summary> /// <param name="skillLevel"><see cref="ISkillLevel">ISkillLevel</see> to check if current skill is a dependant of the SkillLevel pass</param> /// <returns>True if the given item's skill is a prerequisite of this one or if it is a lower level of the same skill.</returns> /// <exception cref="System.ArgumentNullException">skillLevel</exception> public bool IsDependentOf(ISkillLevel skillLevel) { skillLevel.ThrowIfNull(nameof(skillLevel)); // Same skill, lower level ? if (Skill == skillLevel.Skill) { return(Level > skillLevel.Level); } // Prerequisite long neededLevel; Skill.HasAsPrerequisite(skillLevel.Skill, out neededLevel); return(skillLevel.Level <= neededLevel); }
/// <summary> /// Adds the name. /// </summary> /// <param name="settings">The settings.</param> /// <param name="entry">The entry.</param> /// <param name="builder">The builder.</param> private static void AddName(PlanExportSettings settings, ISkillLevel entry, StringBuilder builder) { if (settings.Markup == MarkupType.Html) { builder.Append("<a href=\"\" onclick=\"CCPEVE.show" + $"{(!settings.ShoppingList ? "Info" : "MarketDetails")}({entry.Skill.ID})\">"); } builder.Append(entry.Skill.Name); if (settings.Markup == MarkupType.Html) { builder.Append("</a>"); } if (!settings.ShoppingList) { builder.Append($" {Skill.GetRomanFromInt(entry.Level)}"); } }
/// <summary> /// Gets true if this skill level is, in any way, dependent of the provided skill level. Checks prerequisites but also same skill's lower levels. /// </summary> /// <param name="level"><see cref="ISkillLevel">ISkillLevel</see> to check if current skill is a dependant of the SkillLevel pass</param> /// <returns>True if the given item's skill is a prerequisite of this one or if it is a lower level of the same skill.</returns> public bool IsDependentOf(ISkillLevel skillLevel) { // Same skill, lower level ? if (this.Skill == skillLevel.Skill) { return this.Level > skillLevel.Level; } // Prerequisite int neededLevel; this.Skill.HasAsPrerequisite(skillLevel.Skill, out neededLevel); return skillLevel.Level <= neededLevel; }
/// <summary> /// Computes the training time for the given skill /// </summary> /// <param name="level"></param> /// <returns></returns> public TimeSpan GetTrainingTime(ISkillLevel level) { return(GetTrainingTime(level.Skill, level.Level, TrainingOrigin.FromCurrent)); }
/// <summary> /// Computes the number of SP to train /// </summary> /// <param name="level"></param> /// <returns></returns> public int GetSPToTrain(ISkillLevel level) { return(GetSPToTrain(level.Skill, level.Level, TrainingOrigin.FromCurrent)); }
/// <summary> /// Gets true if this skill level is, in any way, dependent of the provided skill level. Checks prerequisites but also same skill's lower levels. /// </summary> /// <param name="level"></param> /// <returns>True if the given item's skill is a prerequisite of this one or if it is a lower level of the same skill.</returns> public bool IsDependentOf(ISkillLevel level) => new StaticSkillLevel(this).IsDependentOf(level);
/// <summary> /// Adds the name. /// </summary> /// <param name="settings">The settings.</param> /// <param name="entry">The entry.</param> /// <param name="builder">The builder.</param> private static void AddName(PlanExportSettings settings, ISkillLevel entry, StringBuilder builder) { if (settings.Markup == MarkupType.Html) { builder.Append("<a href=\"\" onclick=\"CCPEVE.show" + $"{(!settings.ShoppingList ? "Info" : "MarketDetails")}({entry.Skill.ID})\">"); } builder.Append(entry.Skill.Name); if (settings.Markup == MarkupType.Html) builder.Append("</a>"); if (!settings.ShoppingList) builder.Append($" {Skill.GetRomanFromInt(entry.Level)}"); }
/// <summary> /// Gets true if this skill level is, in any way, dependent of the provided skill level. Checks prerequisites but also same skill's lower levels. /// </summary> /// <param name="skillLevel"><see cref="ISkillLevel">ISkillLevel</see> to check if current skill is a dependant of the SkillLevel pass</param> /// <returns>True if the given item's skill is a prerequisite of this one or if it is a lower level of the same skill.</returns> /// <exception cref="System.ArgumentNullException">skillLevel</exception> public bool IsDependentOf(ISkillLevel skillLevel) { skillLevel.ThrowIfNull(nameof(skillLevel)); // Same skill, lower level ? if (Skill == skillLevel.Skill) return Level > skillLevel.Level; // Prerequisite Int64 neededLevel; Skill.HasAsPrerequisite(skillLevel.Skill, out neededLevel); return skillLevel.Level <= neededLevel; }
/// <summary> /// Recursive method to generate treenodes for tvSkillList. /// </summary> /// <param name="prereq">The prereq.</param> /// <param name="allSkillsKnown">if set to <c>true</c> [all skills known].</param> /// <param name="skillsUnplanned">if set to <c>true</c> [skills unplanned].</param> /// <returns></returns> private TreeNode GetSkillNode(ISkillLevel prereq, ref bool allSkillsKnown, ref bool skillsUnplanned) { if (prereq.Skill == null) return new TreeNode(); Character character = (Character)m_plan.Character; Skill skill = character.Skills[prereq.Skill.ID]; TreeNode node = new TreeNode(prereq.ToString()) { Tag = new SkillLevel(skill, prereq.Level) }; // Skill requirement met if (skill.Level >= prereq.Level) { node.ImageIndex = 1; node.SelectedImageIndex = 1; } // Requirement not met, but planned else if (m_plan.IsPlanned(skill, prereq.Level)) { node.ImageIndex = 2; node.SelectedImageIndex = 2; allSkillsKnown = false; } // Requirement not met, but trainable else if (skill.Level < prereq.Level && skill.IsKnown) { node.ImageIndex = 3; node.SelectedImageIndex = 3; allSkillsKnown = false; skillsUnplanned = true; } // Requirement not met else { node.ImageIndex = 0; node.SelectedImageIndex = 0; allSkillsKnown = false; skillsUnplanned = true; } // Generate child nodes if required foreach (StaticSkillLevel childPrereq in skill.StaticData.Prerequisites.Where(childPrereq => childPrereq != prereq)) { node.Nodes.Add(GetSkillNode(childPrereq, ref allSkillsKnown, ref skillsUnplanned)); } return node; }
/// <summary>Provides the observer with new data.</summary> /// <param name="value">The current notification information.</param> public void OnNext(ISkillLevel value) { this.Value = this.UpdateFunction.Invoke(); }
/// <summary> /// Computes the training time for the given skill. /// </summary> /// <param name="skillLevel">The skill level.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">skillLevel</exception> public TimeSpan GetTrainingTime(ISkillLevel skillLevel) { skillLevel.ThrowIfNull(nameof(skillLevel)); return(GetTrainingTime(skillLevel.Skill, skillLevel.Level)); }
/// <summary> /// Peforms the given training. Same as <see cref="SetSkillLevel"/> but only applied when the given level is greater than the current one. /// </summary> /// <param name="training"></param> public void Train(ISkillLevel training) { Train(training.Skill, training.Level); }
/// <summary> /// Constructor from an <see cref="ISkillLevel"/> object. /// </summary> /// <param name="level"></param> public StaticSkillLevel(ISkillLevel level) : this() { this.Skill = level.Skill; this.Level = level.Level; }
/// <summary> /// Gets true if this skill level is, in any way, dependent of the provided skill level. Checks prerequisites but also same skill's lower levels. /// </summary> /// <param name="level"></param> /// <returns>True if the given item's skill is a prerequisite of this one or if it is a lower level of the same skill.</returns> public bool IsDependentOf(ISkillLevel level) { return (new StaticSkillLevel(this)).IsDependentOf(level); }
/// <summary> /// Gets true if this skill level is, in any way, dependent of the provided skill level. Checks prerequisites but also same skill's lower levels. /// </summary> /// <param name="level"></param> /// <returns>True if the given item's skill is a prerequisite of this one or if it is a lower level of the same skill.</returns> public bool IsDependentOf(ISkillLevel level) { return(((StaticSkillLevel)this).IsDependentOf(level)); }
/// <summary> /// Gets true if a matching item is already contained. /// </summary> /// <remarks>The comparison is only based on skill array index and level, the two objects may be actually different references</remarks> /// <param name="item"></param> /// <returns></returns> public bool Contains(ISkillLevel item) { var result = this[item.Skill.ArrayIndex, item.Level]; return(result != null && result.Skill != null); }
/// <summary> /// Performs the given training. /// Same as <see cref="SetSkillLevel"/> but only applied when the given level is greater than the current one. /// </summary> /// <param name="training"></param> /// <exception cref="System.ArgumentNullException">training</exception> public void Train(ISkillLevel training) { training.ThrowIfNull(nameof(training)); Train(training.Skill, training.Level); }
/// <summary> /// Remove the matching item /// </summary> /// <remarks>The comparison is only based on skill array index and level, the two objects may be actually different references</remarks> /// <param name="item"></param> /// <returns></returns> public void Remove(ISkillLevel item) { this[item.Skill.ArrayIndex, item.Level] = default(T); }
/// <summary> /// Computes the number of SP to train. /// </summary> /// <param name="skillLevel">The skill level.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">skillLevel</exception> public long GetSPToTrain(ISkillLevel skillLevel) { skillLevel.ThrowIfNull(nameof(skillLevel)); return(GetSPToTrain(skillLevel.Skill, skillLevel.Level)); }
/// <summary> /// Gets true if this skill level is, in any way, dependent of the provided skill /// level. Checks prerequisites but also same skill's lower levels. /// </summary> /// <param name="level"></param> /// <returns>True if the given item's skill is a prerequisite of this one or if it is a /// lower level of the same skill.</returns> public bool IsDependentOf(ISkillLevel level) => ssl.IsDependentOf(level);
/// <summary> /// From an entry of the display plan, retrieve the entry of the base plan. /// </summary> /// <param name="displayEntry"></param> /// <returns></returns> private PlanEntry GetOriginalEntry(ISkillLevel displayEntry) => m_plan.GetEntry(displayEntry.Skill, displayEntry.Level);
/// <summary> /// Gets true if this skill level is, in any way, dependent of the provided skill level. /// Checks prerequisites but also same skill's lower levels. /// </summary> /// <param name="level"></param> /// <returns>True if the given item's skill is a prerequisite of this one or if it is a lower level of the same skill.</returns> public bool IsDependentOf(ISkillLevel level) => ((StaticSkillLevel)this).IsDependentOf(level);
/// <summary> /// Gets true if this skill level is, in any way, dependent of the provided skill level. Checks prerequisites but also same skill's lower levels. /// </summary> /// <param name="level"></param> /// <returns>True if the given item's skill is a prerequisite of this one or if it is a lower level of the same skill.</returns> public bool IsDependentOf(ISkillLevel level) { return((new StaticSkillLevel(this)).IsDependentOf(level)); }