public void ModifyActionList(Character character, ConsideredActions alreadyConsidered, IList<string> log) { if (character.GetType() == typeof(Magus)) { Magus mage = (Magus)character; Desire = CalculateDesire(mage); double visNeed = character.SeasonalAge / 20.0; VisCondition visCondition = new VisCondition(_artsRequired, visNeed, Desire, Tier, DueDate == null ? null : DueDate - 1); bool visComplete = visCondition.IsComplete(character); bool labComplete = _hasLabCondition.IsComplete(character); if (!visComplete) { visCondition.ModifyActionList(character, alreadyConsidered, log); } if (!labComplete) { _hasLabCondition.Desire = Desire; _hasLabCondition.ModifyActionList(character, alreadyConsidered, log); } if (visComplete && labComplete) { //effectively, every five points of lab total is worth a decade of effectiveness double dueDateDesire = Desire / (Tier + 1); if (DueDate != null) { if (DueDate == 0) { log.Add("Not enough time to perform longevity ritual"); return; } dueDateDesire /= (double)DueDate; } if (DueDate == null || DueDate < 4) { log.Add("Performing longevity ritual worth " + dueDateDesire.ToString("0.00")); alreadyConsidered.Add(new LongevityRitual(Abilities.MagicTheory, dueDateDesire)); } double labTotalDesire = mage.GetLabTotal(MagicArtPairs.CrVi, Activity.DistillVis) * 8; if (DueDate != null) { labTotalDesire /= (double)DueDate; } // every point of lab total is effectively two years LongevityRitualAbilitiesHelper helper = new LongevityRitualAbilitiesHelper(labTotalDesire, (byte)(Tier + 1), DueDate == null ? null : DueDate - 1); helper.ModifyActionList(character, alreadyConsidered, log); } } }
public IList<BookDesire> GetBookNeeds(Character character) { if(!IsComplete(character)) { List<BookDesire> booksDesired = new List<BookDesire>(); var bookNeeds = _hasLabCondition.GetBookNeeds(character); if (bookNeeds != null) { booksDesired.AddRange(bookNeeds); } double visNeed = character.SeasonalAge / 20.0; VisCondition visCondition = new VisCondition(_artsRequired, visNeed, Desire, Tier, DueDate == null ? null : DueDate - 1); if (!visCondition.IsComplete(character)) { bookNeeds = visCondition.GetBookNeeds(character); if (bookNeeds != null) { booksDesired.AddRange(bookNeeds); } } return booksDesired; } return null; }