public void UpdatePrestige(Settlement.Settlement settlement) { foreach (var settler in Settlers) { settler.UpdatePrestige(settlement); } }
public void GoThroughMessages(Settlement.Settlement settlement) { foreach (var msg in TodaysMessages.Where(msg => Filter(msg))) { msg.Display(); } }
public Temperature GetIndoorTemperature(Settlement.Settlement settlement) { var raisedTempVal = settlement.TodaysWeather.Temperature.Value + Insulation(settlement); var warm = Temperature.Warm.Value; return(Temperature.Temperatures[Math.Min(raisedTempVal, warm)]); }
public void Die(Settlement.Settlement settlement, CauseOfDeath causeOfDeath) { Relationships.ForEach(rel => rel.Other(this).NotifyDeath(rel)); settlement.SettlerManager.Settlers.Remove(this); settlement.SettlerManager.Graveyard.Add(this); settlement.AddMessage(new SettlerDeathMessage(this, causeOfDeath)); }
public void Discover(Tech tech, Settlement.Settlement settlement) { settlement.AddMessage(new TechDiscoveredMessage(tech)); //Add all blueprints tech.Blueprints.ForEach(blueprint => settlement.Blueprints.Add(blueprint)); Discovered.Add(tech); }
private int GetHarvest(Settlement.Settlement settlement, Resource.Resource resource, double rate, Settler.Settler worker) { var efficiency = BuildingEfficiency(settlement, resource, worker) * WorkerEfficiency(worker); var guaranteedHarvest = (int)(rate * efficiency); var uncertainHarvest = guaranteedHarvest - rate * efficiency; return(guaranteedHarvest + (new Random().NextDouble() < uncertainHarvest ? 1 : 0)); }
public void Execute(Settlement.Settlement settlement) { PreExecute(settlement); CustomConsole.TitleLine(); CustomConsole.WriteLine($"{Name.ToUpper()}:"); CustomConsole.WriteLine($"{Description}"); IOManager.ChooseItemFromList(Options.Where(op => op.IsAvailable(settlement)), op => op.Description).Execute(settlement); PostExecute(settlement); }
public void ExecuteTodaysEvents(Settlement.Settlement settlement) { var list = TodaysEvents(settlement); if (list.Count > 0) { TodaysEvents(settlement).ForEach(ev => ev?.Execute(settlement)); settlement.StopDayPass = true; } }
//Lazy evaluation of prestige: it is only recalculated after important changes public void UpdatePrestige(Settlement.Settlement settlement) { var oldLevel = PrestigeLevel; PrestigeAmount = settlement.Culture.PrestigeSystem.CalculatePrestige(this); if (oldLevel != PrestigeLevel) { settlement.AddMessage(new SettlerPrestigeChangeMessage(this, oldLevel)); } }
public override void Relax(Settlement.Settlement settlement) { if (HealthLevel > HealthLevel.BadlyWounded) { Heal(1); // Healing } else if (HealthLevel == HealthLevel.Dying) { Harm(1, settlement, CauseOfDeath.Starvation); // Dying } }
public List <Event> TodaysEvents(Settlement.Settlement settlement) { var today = settlement.TodaysDate.DaysSinceSettlement; PurgeYesterday(today); //Generate a new event if there isn't one if (!EventCalendar.ContainsKey(today)) { Generate(settlement); } return(EventCalendar[today]); }
public void MakeProgress(Settlement.Settlement settlement) { if (CurrentResearch != null) { CurrentResearch.Progress += settlement.ResearchRate; if (CurrentResearch.Progress >= CurrentResearch.Cost) { Discover(CurrentResearch, settlement); CurrentResearch = null; } } }
private RandomEvent Generate(Settlement.Settlement settlement) { var today = settlement.TodaysDate.DaysSinceSettlement; var rarity = RandomUtil.WeightedPercentGet(EventRarity.Rarities, null, eventRarity => eventRarity.PercentChance); var ev = !(rarity == null) ? RandomUtil.Get(RandomEventArrays[rarity].Where(ev => ev.IsAvailable(settlement)).ToList()) : null; //Add Today's Event to Calendar if not null EventCalendar.Add(today, ev != null ? new List <Event> { ev } : new List <Event>()); return(ev); }
public void Harm(int amount, Settlement.Settlement settlement, CauseOfDeath causeOfDeath) { if (amount < 0) { throw new ArgumentException("Harm only takes positive integers!"); } Health -= amount; if (Health < 0) { Health = 0; Die(settlement, causeOfDeath); } }
public void GainXp(Settlement.Settlement settlement, Model.Settler.Skill.Skill skill, int amount) { var before = SkillLevel(skill); if (Experience.ContainsKey(skill)) { Experience[skill] += amount; } else { Experience.Add(skill, amount); } if (before < SkillLevel(skill)) { settlement.MessageManager.TodaysMessages.Add(new SkillIncreasedMessage(this, skill, SkillLevel(skill))); } }
public override bool GoEat(Settlement.Settlement settlement) { var food = settlement.Stockpile.GetHighestOfType(ResourceType.Food); if (food == null) { settlement.AddMessage(new SettlerStarvedMessage(this)); return(false); } else { var meal = new Bundle(food, 1); settlement.Stockpile.Remove(meal); settlement.AddMessage(new SettlerAteMessage(this, meal)); return(true); } }
public override void HostWork(Settler.Settler worker, Settlement.Settlement settlement) { var harvest = new Bundle(); foreach (var(resource, rate) in BaseRates) { var amount = GetHarvest(settlement, resource, rate, worker); if (amount > 0) { harvest.Contents.Add(resource, amount); } } //TODO Transactions settlement.Stockpile.Add(harvest); worker.GainXp(settlement, Skill, 1); }
public virtual void DoWork(Settlement.Settlement settlement) { //Can't work if (Workplace == null) { return; } var discipline = Traits[Trait.Discipline]; if (discipline == TraitLevel.BelowAverage && RandomUtil.Chance(1, 40) || discipline == TraitLevel.Low && RandomUtil.Chance(1, 20) || discipline == TraitLevel.VeryLow && RandomUtil.Chance(1, 10)) { //skipped work settlement.AddMessage(new SettlerSkippedWorkMessage(this)); } else { Workplace.HostWork(this, settlement); } }
public virtual void PostExecute(Settlement.Settlement settlement) { }
public List <Tech> GetAvailableTech(Settlement.Settlement settlement) { return(Tree.Technologies.Where(tech => !Discovered.Contains(tech) && tech.IsAvailable(settlement)).ToList()); }
public bool IsAvailable(Settlement.Settlement settlement) { return((RankRequirement == null || settlement.Rank >= RankRequirement) && (TechRequirements == null || TechRequirements.TrueForAll(tech => settlement.TechManager.Discovered.Contains(tech)))); }
public override bool IsAvailable(Settlement.Settlement settlement) { return(settlement.SettlerManager.Relationships.Any(IsPossibleRelationship) && settlement.Rank >= MinRank && settlement.Rank <= MaxRank); }
public abstract int Insulation(Settlement.Settlement settlement);
public override void PreExecute(Settlement.Settlement settlement) { FindRelationship(settlement); }
private void FindRelationship(Settlement.Settlement settlement) { Relationship = RandomUtil.Get(settlement.SettlerManager.Relationships.Where(IsPossibleRelationship).ToArray()); }
public virtual bool IsAvailable(Settlement.Settlement settlement) => true;
public override int Insulation(Settlement.Settlement settlement) { return(1); }
public override bool IsAvailable(Settlement.Settlement settlement) { return(_isAvailable(settlement)); }
public virtual double BuildingEfficiency(Settlement.Settlement settlement, Resource.Resource resource, Settler.Settler worker) { return(1.0); }
public static int AgeInDays(IDated dated, Settlement.Settlement settlement) { return(settlement.TodaysDate.DaysSinceSettlement - dated.Birthday.DaysSinceSettlement); }