public void WriteLine(Person player, string text) { throw new NotImplementedException (); /*if (player.Id == Settings.PlayerId) { Console.WriteText (text); }*/ }
public void CommitVitalsChanges(Person person) { // TODO: Merge this with the commit function from BaseActivity. Both commit vitals changes if (Settings.IsVerbose) { Console.WriteDebugLine (" Committing vitals changes"); } foreach (var vital in VitalsChange.Keys) { var changeValue = VitalsChange [vital]; var previousValue = person.Vitals [vital]; var newValue = previousValue + changeValue; newValue = PercentageValidator.Validate (newValue); if (Settings.IsVerbose) { Console.WriteDebugLine (" " + vital); Console.WriteDebugLine (" Previous: " + previousValue); Console.WriteDebugLine (" Change: " + changeValue); Console.WriteDebugLine (" New value: " + newValue); } person.Vitals [vital] = newValue; } VitalsChange.Clear (); }
public bool FellTreeCycle(Person person, Plant plant) { Status = "Chopping down tree " + (int)plant.PercentHarvested + "%"; if (Settings.IsVerbose) Console.WriteDebugLine (" Felling tree"); plant.PercentHarvested += Settings.FellingRate; TotalWoodFelled += Settings.FellingRate; // TODO: Should this be set here or once the tree is finished? if (plant.PercentHarvested > 100) plant.PercentHarvested = 100; if (Settings.OutputType == ConsoleOutputType.Debug) { Console.WriteDebugLine (" " + plant.PercentHarvested + "% felled"); } if (plant.PercentHarvested > 100) { plant.PercentHarvested = 100; } if (plant.PercentHarvested == 100 && Settings.IsVerbose) { Console.WriteDebugLine (" Finished felling tree."); } return plant.PercentHarvested == 100; }
public void Test_CollectWater_WaterAvailable() { Console.WriteLine (""); Console.WriteLine ("Preparing test"); Console.WriteLine (""); var context = MockEngineContext.New (EngineSettings.DefaultVerbose); context.World.Logic.AddActivity (typeof(CollectWaterActivity)); var settings = context.Settings; var tile = context.World.Tiles [0]; tile.Inventory [ItemType.Water] = 100; var person = new Person (settings); person.Tile = tile; var needEntry = new NeedEntry (ActivityVerb.Gather, ItemType.Water, PersonVitalType.Thirst, settings.DefaultDrinkAmount, settings.DefaultItemPriorities[ItemType.Water]); var activity = new CollectWaterActivity (person, needEntry, settings, new ConsoleHelper(settings)); Console.WriteLine (""); Console.WriteLine ("Executing test"); Console.WriteLine (""); activity.Act (person); Console.WriteLine (""); Console.WriteLine ("Analysing test"); Console.WriteLine (""); Assert.AreEqual(10, person.Inventory.Items[ItemType.Water]); }
public override void Execute(Person person) { Status = "Eating food"; if (Settings.IsVerbose) { Console.WriteDebugLine ("Eating food"); Console.WriteDebugLine (" Current hunger: " + person.Vitals[PersonVitalType.Hunger]); } var amount = Settings.DefaultEatAmount; if (amount > person.Inventory [ItemType.Food]) amount = person.Inventory [ItemType.Food]; if (Settings.IsVerbose) Console.WriteDebugLine (" Amount: " + amount); ItemsConsumed[ItemType.Food] += amount; var hungerDecrease = amount * Settings.FoodForHungerRatio; if (Settings.IsVerbose) Console.WriteDebugLine (" Decreased hunger by: " + hungerDecrease); VitalsChange.Add (PersonVitalType.Hunger, -hungerDecrease); TotalfoodConsumed += amount; }
public BaseActivity ChooseActivityBasedOnNeeds(Person person) { if (Context.Settings.IsVerbose) Context.Console.WriteDebugLine (" Choosing activity based on needs"); var entries = GetHighestPriorities (person); var noEntriesFound = (entries.Length == 0); if (noEntriesFound) { if (Context.Settings.IsVerbose) Context.Console.WriteDebugLine (" No needs found. Doing nothing."); //person.ClearActivity(); // TODO: Should a random activity be chosen? return null; } else { var index = RandomlySelectEntryIndex (entries.Length); var activity = ChooseActivityBasedOnNeed (person, entries [index]); return activity; } }
public void ConvertWoodToTimber(Person actor, decimal amountOfTimber) { Status = "Milling wood into timber " + (int)TotalTimberMilled; if (Settings.IsVerbose) Console.WriteDebugLine (" Converting wood to timber"); var woodNeeded = CalculateAmountOfWoodNeeded(amountOfTimber); // TODO: Is there a cleaner way to do this? if (actor.Inventory.Items [ItemType.Wood] >= woodNeeded) { TotalTimberMilled += amountOfTimber; if (Settings.IsVerbose) { Console.WriteDebugLine (" Wood: " + woodNeeded); Console.WriteDebugLine (" Timber: " + amountOfTimber); Console.WriteDebugLine (" Total timber: " + TotalTimberMilled); } ItemsConsumed[ItemType.Wood] += woodNeeded; ItemsProduced[ItemType.Timber] += amountOfTimber; } else { if (Settings.IsVerbose) { Console.WriteDebugLine (" Not enough wood: " + woodNeeded); } } // TODO: Remove or reimplement /*if (Settings.PlayerId == Person.Id && Settings.OutputType == ConsoleOutputType.General) { PlayerLog.WriteLine (EngineHolder.Id, "The player has started milling timber."); PlayerLog.WriteLine (EngineHolder.Id, TotalTimberMilled + " timber"); }*/ }
public void Test_Build_CompleteConstruction() { Console.WriteLine (""); Console.WriteLine ("Preparing test"); Console.WriteLine (""); var settings = EngineSettings.DefaultVerbose; settings.ConstructionRate = 10; var person = new Person (settings); person.Home = new Building (BuildingType.Shelter, settings); person.Home.Inventory.Items [ItemType.Timber] = settings.ShelterTimberCost; person.Home.PercentComplete = 99; var needEntry = new NeedEntry (ActivityVerb.Build, ItemType.Shelter, PersonVitalType.NotSet, 1, 100); person.AddNeed (needEntry); var activity = new BuildShelterActivity (person, needEntry, settings, new ConsoleHelper(settings)); activity.Shelter = person.Home; activity.Act (person); Assert.AreEqual (100, person.Home.PercentComplete); Assert.IsTrue (person.Home.IsCompleted); Assert.AreEqual (0, person.Needs.Count); }
public void Test_EatFood_FoodAvailable() { Console.WriteLine (""); Console.WriteLine ("Preparing test"); Console.WriteLine (""); var context = MockEngineContext.New (); var settings = context.Settings; var person = new Person (settings); person.Inventory [ItemType.Food] = 100; person.Vitals[PersonVitalType.Hunger] = 80; var needEntry = new NeedEntry (ActivityVerb.Eat, ItemType.Food, PersonVitalType.NotSet, settings.DefaultEatAmount, settings.DefaultItemPriorities[ItemType.Food]); var activity = new EatFoodActivity (person, needEntry, settings, context.Console); Console.WriteLine (""); Console.WriteLine ("Executing test"); Console.WriteLine (""); activity.Act (person); Console.WriteLine (""); Console.WriteLine ("Analysing test"); Console.WriteLine (""); Assert.AreEqual(75, person.Vitals[PersonVitalType.Hunger]); }
public override void Execute(Person person) { Status = "Drinking water"; if (Settings.IsVerbose) { Console.WriteDebugLine ("Drinking water"); Console.WriteDebugLine (" Current thirst: " + person.Vitals[PersonVitalType.Thirst]); } var amount = Settings.DefaultDrinkAmount; if (amount > person.Inventory [ItemType.Water]) amount = person.Inventory [ItemType.Water]; if (Settings.IsVerbose) Console.WriteDebugLine (" Amount: " + amount); ItemsConsumed[ItemType.Water] += amount; var thirstDecrease = amount * Settings.WaterForThirstRatio; if (Settings.IsVerbose) Console.WriteDebugLine (" Decreased thirst by: " + thirstDecrease); VitalsChange.Add (PersonVitalType.Thirst, -thirstDecrease); TotalWaterConsumed += amount; }
public void Test_Sleep_ShelterAvailable() { Console.WriteLine (""); Console.WriteLine ("Preparing test"); Console.WriteLine (""); var context = MockEngineContext.New (); context.World.Logic.AddActivity (typeof(DrinkWaterActivity)); var settings = context.Settings; var person = new Person (settings); person.Vitals[PersonVitalType.Energy] = 0; person.Home = new Building (BuildingType.Shelter, settings); person.Home.PercentComplete = 100; var needEntry = new NeedEntry (ActivityVerb.Sleep, ItemType.NotSet, PersonVitalType.Energy, 100, settings.DefaultVitalPriorities[PersonVitalType.Energy]); var activity = new SleepActivity (person, needEntry, settings, new ConsoleHelper(settings)); Console.WriteLine (""); Console.WriteLine ("Executing test"); Console.WriteLine (""); activity.Act (person); Console.WriteLine (""); Console.WriteLine ("Analysing test"); Console.WriteLine (""); Assert.AreEqual(settings.EnergyFromSleepRate, person.Vitals[PersonVitalType.Energy]); }
public BuildShelterActivity(Person actor, NeedEntry needEntry, EngineSettings settings, ConsoleHelper console) : base(actor, needEntry, settings, console) { // TODO //WoodFelling = new FellWoodActivity (); //TimberMilling = new MillTimberActivity (); }
public BaseActivity ChooseActivityBasedOnNeed(Person person, NeedEntry needEntry) { if (Context.Settings.IsVerbose) { Context.Console.WriteDebugLine (" Choosing activity based on need for " + needEntry.ItemType); } var possibleActivities = new List<ActivityInfo> (); foreach (var activityInfo in Context.World.Logic.Activities) { if (activityInfo.IsSuited (needEntry.ActionType, needEntry.ItemType, needEntry.VitalType)) { possibleActivities.Add (activityInfo); } } // TODO: Add support for randomly choosing from multiple possibilities if (possibleActivities.Count > 1) throw new NotSupportedException ("Multiple activities identified. That's not yet supported."); if (possibleActivities.Count == 0) throw new Exception ("No activities found to address the need for " + needEntry.ItemType + ". Ensure the activities have been added to the environment logic."); if (Context.Settings.IsVerbose) { Context.Console.WriteDebugLine (" Activity chosen: " + possibleActivities [0].ActivityType.Name); } var activity = GetActivity (person, possibleActivities [0].ActivityType, needEntry); return activity; }
public ItemDemand(Person person, ItemType needType, decimal amount) { throw new NotImplementedException (); /*Person = person; Supply = needType; Amount = amount;*/ }
public GameTile(GameEnvironment world) { World = world; Plants = new Plant[]{ }; People = new Person[]{ }; Inventory = new Inventory(this, null, world.Context.Settings); }
public void Test_Act_WoodIsAvailable() { Console.WriteLine (""); Console.WriteLine ("Preparing test"); Console.WriteLine (""); var context = MockEngineContext.New (EngineSettings.DefaultVerbose); context.Settings.TimberMillingRate = 50; var person = new Person(context.Settings); person.Inventory.Items[ItemType.Wood] = 100; var tile = context.World.Tiles[0]; tile.AddPerson (person); var needEntry = new NeedEntry (ActivityVerb.Mill, ItemType.Timber, PersonVitalType.NotSet, 50, 101); var activity = new MillTimberActivity (person, needEntry, context.Settings, context.Console); Console.WriteLine (""); Console.WriteLine ("Executing test"); Console.WriteLine (""); activity.Act (person); Console.WriteLine (""); Console.WriteLine ("Analysing test"); Console.WriteLine (""); Assert.AreEqual (50, person.Inventory.Items [ItemType.Timber]); Assert.AreEqual (10, person.Inventory.Items [ItemType.Wood]); }
public void Test_Mill_NotEnoughWood() { Console.WriteLine (""); Console.WriteLine ("Preparing test"); Console.WriteLine (""); var context = MockEngineContext.New (EngineSettings.DefaultVerbose); var person = new Person (context.Settings); var tile = context.World.Tiles[0]; tile.AddPerson (person); var needEntry = new NeedEntry (ActivityVerb.Mill, ItemType.Timber, PersonVitalType.NotSet, 50, 101); var activity = new MillTimberActivity (person, needEntry, context.Settings, context.Console); Console.WriteLine (""); Console.WriteLine ("Executing test"); Console.WriteLine (""); activity.Act (person); var foundNeedEntry = person.Needs [0]; Assert.AreEqual (ItemType.Wood, foundNeedEntry.ItemType); Assert.AreEqual (90, foundNeedEntry.Quantity); Assert.AreEqual (102, foundNeedEntry.Priority); }
public Person CreateAdult() { var person = new Person (Settings); person.Gender = GetRandomGender (); person.Age = GetRandomAge (18, 50); return person; }
public void PrioritizeSecondary(Person person) { throw new NotImplementedException (); /*if (!person.IsActive) { person.Priorities [PriorityTypes.Water] = 60; }*/ }
public void Page_Load(object sender, EventArgs e) { Player = EngineHolder.Context.Player; if (Player == null) throw new Exception("Player not assigned; (EngineHolder.Context.Player == null)"); }
public void Update(Person person) { /*var isHarmed = false; if (person.Vitals[PersonVital.Thirst] >= 100) { // TODO: Reimplement //Context.Log.WriteLine ("The player is dying of thirst."); var damage = person.Vitals[PersonVital.Thirst] / 100; person.Vitals[PersonVital.Health] -= damage; isHarmed = true; } if (person.Hunger >= 100) { // TODO: Reimplement //Context.Log.WriteLine ("The player is dying of hunger."); var damage = person.Hunger / 100; person.Health -= damage; isHarmed = true; } if (!isHarmed) person.Health += 5; if (person.Health < 0) person.Health = 0; if (person.Health > 100) person.Health = 100; if (person.Health == 0) person.IsAlive = false;*/ }
public void Test_GeneralFunctions() { var data = GetDataManager(); var settings = EngineSettings.DefaultVerbose; var person = new Person(settings); data.Save (person); var loadedTile = data.Get<Person>(person.Id); Assert.IsNotNull (loadedTile); var loadedPeople = data.Get<Person>(); Assert.IsNotNull (loadedPeople); Assert.AreEqual (1, loadedPeople.Length); data.Delete (person); loadedTile = data.Get<Person>(person.Id); Assert.IsNull (loadedTile); }
public override void Execute(Person person) { var buildStatus = GetBuildStatus (person); switch (buildStatus) { //case BuildStatus.PendingResources: // TODO: Remove if not needed. Should be obsolete // if (Settings.IsVerbose) // Console.WriteDebugLine (" The person does not have enough timber."); // RegisterNeedForTimber (person); // //GetTimber (person); // break; case BuildStatus.NotYetStarted: StartConstruction (person); break; case BuildStatus.UnderConstruction: ContinueConstruction (person); break; //case BuildStatus.Completed: // TODO: Remove if not needed. Should be obsolete now // if (Settings.IsVerbose) Console.WriteDebugLine("Construction is complete."); // break; } /*// TODO: Move this to a better loation if (HasEnoughTimber (person)) { ExecuteBuild (person); } else RegisterNeedForTimber (person);*/ }
public override void Execute(Person person) { var amountOfHarm = 0; amountOfHarm += CalculateHarmFromDehydration VitalsChange.Add (PersonVital.Hunger, -amountOfHarm); }
public override bool IsApplicable(Person person) { var personIsEating = (person.ActivityText == typeof(EatFoodActivity).Name); var personIsStarving = person.Vitals [PersonVitalType.Hunger] > Settings.StarvationThreshold; return person.IsAlive && personIsStarving && !personIsEating; }
public override void RegisterNeed(Person person, ActivityVerb actionType, ItemType itemType, PersonVitalType vitalType, decimal priority) { var quantity = 100 - person.Vitals[PersonVitalType.Energy]; if (!NeedIsRegistered (person, actionType, itemType, vitalType, quantity)) { AddNeed (actionType, itemType, vitalType, quantity, priority); } }
public void Apply(Person person) { if (IsApplicable (person)) { Execute (person); Finished (person); } }
public override bool CanAct(Person person) { if (ResourcesNeeded (person)) { RegisterNeedToMillTimber (person, Settings.ShelterTimberCost); return false; } else return true; }
public override void RegisterNeed(Person person, ActivityVerb actionType, ItemType itemType, PersonVitalType vitalType, decimal priority) { var quantity = Settings.DefaultDrinkAmount; if (!NeedIsRegistered (person, actionType, itemType, vitalType, quantity)) { AddNeed (actionType, itemType, vitalType, quantity, priority); } }
public override bool IsApplicable(Person person) { var personIsDrinking = (person.ActivityText == typeof(DrinkWaterActivity).Name); var personIsDehydrated = person.Vitals [PersonVitalType.Thirst] > Settings.DehydrationThreshold; return person.IsAlive && personIsDehydrated && !personIsDrinking; }
public override bool IsApplicable(tilesim.Engine.Entities.Person person) { var personIsPlayer = (Settings.PlayerId == person.Id); var personIsDead = person.Vitals [PersonVitalType.Health] <= 0; return(personIsPlayer && personIsDead); }
public override void Execute(tilesim.Engine.Entities.Person person) { throw new PlayerDiedException(person); }