Пример #1
0
        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 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 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 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_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]);
        }
Пример #6
0
        public void Test_Act_ContinueFelling()
        {
            Console.WriteLine("");
            Console.WriteLine("Preparing test");
            Console.WriteLine("");

            var context = MockEngineContext.New();

            var settings = EngineSettings.DefaultVerbose;

            settings.FellingRate = 10;

            var person = new PersonCreator(settings).CreateAdult();

            var tile = context.World.Tiles[0];

            tile.AddPerson(person);
            tile.AddTrees(new PlantCreator(context.Settings).CreateTrees(2));

            var needEntry = new NeedEntry(ActivityVerb.Fell, ItemType.Wood, PersonVitalType.NotSet, 50, 101);

            var activity = new FellWoodActivity(person, needEntry, settings, new ConsoleHelper(settings));

            activity.Target = tile.Trees [0];

            Console.WriteLine("");
            Console.WriteLine("Executing target");
            Console.WriteLine("");

            activity.Act(person);

            Assert.AreEqual(10, activity.Target.PercentHarvested);
        }
        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_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 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 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 BuildShelterActivity(Person actor, NeedEntry needEntry, EngineSettings settings, ConsoleHelper console)
     : base(actor, needEntry, settings, console)
 {
     // TODO
     //WoodFelling = new FellWoodActivity ();
     //TimberMilling = new MillTimberActivity ();
 }
        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 BuildShelterActivity(Person actor, NeedEntry needEntry, EngineSettings settings, ConsoleHelper console)
     : base(actor, needEntry, settings, console)
 {
     // TODO
     //WoodFelling = new FellWoodActivity ();
     //TimberMilling = new MillTimberActivity ();
 }
Пример #14
0
        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 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_Build_StartConstruction()
        {
            Console.WriteLine("");
            Console.WriteLine("Preparing test");
            Console.WriteLine("");

            var settings = EngineSettings.DefaultVerbose;

            var person = new Person(settings);

            person.Inventory.AddItem(ItemType.Timber, 50);  // TODO: Get the 50 value from somewhere easier to configures

            var needEntry = new NeedEntry(ActivityVerb.Build, ItemType.Shelter, PersonVitalType.NotSet, 1, 100);

            var activity = new BuildShelterActivity(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.IsNotNull(person.Home);
            Assert.AreEqual(50, person.Home.Inventory.Items[ItemType.Timber]);  // TODO: Should all the timber necessarily be provided as soon as construction starts?
        }
        public void Test_Act_ContinueFelling()
        {
            Console.WriteLine ("");
            Console.WriteLine ("Preparing test");
            Console.WriteLine ("");

            var context = MockEngineContext.New ();

            var settings = EngineSettings.DefaultVerbose;
            settings.FellingRate = 10;

            var person = new PersonCreator (settings).CreateAdult ();

            var tile = context.World.Tiles[0];
            tile.AddPerson (person);
            tile.AddTrees (new PlantCreator (context.Settings).CreateTrees (2));

            var needEntry = new NeedEntry (ActivityVerb.Fell, ItemType.Wood, PersonVitalType.NotSet, 50, 101);

            var activity = new FellWoodActivity (person, needEntry, settings, new ConsoleHelper(settings));
            activity.Target = tile.Trees [0];

            Console.WriteLine ("");
            Console.WriteLine ("Executing target");
            Console.WriteLine ("");

            activity.Act (person);

            Assert.AreEqual(10, activity.Target.PercentHarvested);
        }
Пример #18
0
        public BaseActivity(Person actor, NeedEntry needEntry, EngineSettings settings, ConsoleHelper console)
        {
            Actor     = actor;
            NeedEntry = needEntry;
            Settings  = settings;
            Console   = console;

            InitializeItemsProduced();
            InitializeItemsConsumed();
        }
Пример #19
0
        public BaseActivity(Person actor, NeedEntry needEntry, EngineSettings settings, ConsoleHelper console)
        {
            Actor = actor;
            NeedEntry = needEntry;
            Settings = settings;
            Console = console;

            InitializeItemsProduced ();
            InitializeItemsConsumed ();
        }
Пример #20
0
        public BaseActivity GetActivity(Person person, Type activityType, NeedEntry needEntry)
        {
            var activity = person.GetActivity(activityType);

            if (activity == null)
            {
                activity = Creator.CreateActivity(person, activityType, needEntry);
            }

            return(activity);
        }
Пример #21
0
        public BaseActivity CreateActivity(Person actor, Type activityType, NeedEntry needEntry)
        {
            var arguments = new object[] {
                actor,
                needEntry,
                Settings,
                Console
            };

            var activity = (BaseActivity)Activator.CreateInstance(activityType, arguments);

            return(activity);
        }
Пример #22
0
        public BaseActivity CreateActivity(Person actor, Type activityType, NeedEntry needEntry)
        {
            var arguments = new object[] {
                actor,
                needEntry,
                Settings,
                Console
            };

            var activity = (BaseActivity)Activator.CreateInstance(activityType, arguments);

            return activity;
        }
        public void Test_Build_ContinueConstruction()
        {
            var settings = EngineSettings.DefaultVerbose;
            settings.ConstructionRate = 1;

            var person = new Person (settings);
            person.Home = new Building (BuildingType.House, settings);
            person.Home.Inventory.Items[ItemType.Timber] = 50; // TODO: Get the 50 value from somewhere easier to configures

            var needEntry = new NeedEntry (ActivityVerb.Build, ItemType.Shelter, PersonVitalType.NotSet, 1, 100);

            var activity = new BuildShelterActivity (person, needEntry, settings, new ConsoleHelper(settings));

            activity.Act (person);

            Assert.AreEqual (1, person.Home.PercentComplete);
        }
Пример #24
0
        public void Test_Act_FinishedFelling()
        {
            Console.WriteLine("");
            Console.WriteLine("Preparing test");
            Console.WriteLine("");

            var context = MockEngineContext.New();

            var settings = EngineSettings.DefaultVerbose;

            settings.FellingRate = 10;

            var person = new PersonCreator(settings).CreateAdult();

            var tile = context.World.Tiles[0];

            tile.AddPerson(person);
            tile.AddTrees(new PlantCreator(context.Settings).CreateTrees(2));

            var needEntry = new NeedEntry(ActivityVerb.Fell, ItemType.Wood, PersonVitalType.NotSet, 50, 101);

            person.AddNeed(needEntry);

            var activity = new FellWoodActivity(person, needEntry, settings, new ConsoleHelper(settings));

            activity.Target = tile.Trees [0];
            activity.Target.PercentHarvested = 100;
            activity.TotalWoodFelled         = 40;     // Add just enough so the activity can finish

            var totalWoodExpected = activity.Target.Size;

            Console.WriteLine("");
            Console.WriteLine("Executing test");
            Console.WriteLine("");

            activity.Act(person);

            Assert.IsTrue(activity.IsFinished);
            Assert.IsNull(activity.Target);
            Assert.AreEqual(totalWoodExpected, person.Inventory.Items [ItemType.Wood]);

            Assert.AreEqual(0, person.Needs.Count);
        }
        public void Test_Build_ContinueConstruction()
        {
            var settings = EngineSettings.DefaultVerbose;

            settings.ConstructionRate = 1;

            var person = new Person(settings);

            person.Home = new Building(BuildingType.House, settings);
            person.Home.Inventory.Items[ItemType.Timber] = 50; // TODO: Get the 50 value from somewhere easier to configures

            var needEntry = new NeedEntry(ActivityVerb.Build, ItemType.Shelter, PersonVitalType.NotSet, 1, 100);

            var activity = new BuildShelterActivity(person, needEntry, settings, new ConsoleHelper(settings));

            activity.Act(person);

            Assert.AreEqual(1, person.Home.PercentComplete);
        }
        public void Test_Build_NotEnoughTimber()
        {
            var settings = EngineSettings.DefaultVerbose;

            var person = new Person(settings);

            var needEntry = new NeedEntry(ActivityVerb.Build, ItemType.Shelter, PersonVitalType.NotSet, 1, 100);

            var activity = new BuildShelterActivity(person, needEntry, settings, new ConsoleHelper(settings));

            activity.Act(person);

            Assert.AreEqual(1, person.Needs.Count);

            var foundNeedEntry = person.Needs [0];

            Assert.AreEqual(ItemType.Timber, foundNeedEntry.ItemType);
            Assert.AreEqual(50, foundNeedEntry.Quantity);
            Assert.AreEqual(101, foundNeedEntry.Priority);
        }
        public void Test_Build_NotEnoughTimber()
        {
            var settings = EngineSettings.DefaultVerbose;

            var person = new Person (settings);

            var needEntry = new NeedEntry (ActivityVerb.Build, ItemType.Shelter, PersonVitalType.NotSet, 1, 100);

            var activity = new BuildShelterActivity (person, needEntry, settings, new ConsoleHelper(settings));

            activity.Act (person);

            Assert.AreEqual (1, person.Needs.Count);

            var foundNeedEntry = person.Needs [0];

            Assert.AreEqual (ItemType.Timber, foundNeedEntry.ItemType);
            Assert.AreEqual (50, foundNeedEntry.Quantity);
            Assert.AreEqual (101, foundNeedEntry.Priority);
        }
        public void Test_DrinkWater_WaterAvailable()
        {
            Console.WriteLine("");
            Console.WriteLine("Preparing test");
            Console.WriteLine("");

            var context = MockEngineContext.New();

            context.World.Logic.AddActivity(typeof(DrinkWaterActivity));

            var settings = context.Settings;

            settings.DefaultDrinkAmount = 10; // Increase the drink rate to speed up test

            var person = new Person(settings);

            person.Inventory [ItemType.Water]     = 100;
            person.Vitals[PersonVitalType.Thirst] = 80;

            var needEntry = new NeedEntry(
                ActivityVerb.Drink,
                ItemType.Water,
                PersonVitalType.Thirst,
                settings.DefaultDrinkAmount,
                settings.DefaultItemPriorities[ItemType.Water]
                );

            var activity = new DrinkWaterActivity(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(70, person.Vitals[PersonVitalType.Thirst]);
        }
        public void Test_DrinkWater_WaterAvailable()
        {
            Console.WriteLine ("");
            Console.WriteLine ("Preparing test");
            Console.WriteLine ("");

            var context = MockEngineContext.New ();

            context.World.Logic.AddActivity (typeof(DrinkWaterActivity));

            var settings = context.Settings;

            settings.DefaultDrinkAmount = 10; // Increase the drink rate to speed up test

            var person = new Person (settings);
            person.Inventory [ItemType.Water] = 100;
            person.Vitals[PersonVitalType.Thirst] = 80;

            var needEntry = new NeedEntry (
                ActivityVerb.Drink,
                ItemType.Water,
                PersonVitalType.Thirst,
                settings.DefaultDrinkAmount,
                settings.DefaultItemPriorities[ItemType.Water]
            );

            var activity = new DrinkWaterActivity (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(70, person.Vitals[PersonVitalType.Thirst]);
        }
Пример #30
0
        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);
        }
Пример #31
0
        public void Test_GatherFood_FoodAvailable()
        {
            Console.WriteLine("");
            Console.WriteLine("Preparing test");
            Console.WriteLine("");

            var context = MockEngineContext.New();

            // TODO: Remove if not needed
            //context.World.Logic.AddActivity (typeof(GatherFoodActivity));

            var settings = context.Settings;

            var tile = context.World.Tiles [0];

            tile.Inventory [ItemType.Food] = 100;

            var person = new Person(settings);

            person.Tile = tile;

            var needEntry = new NeedEntry(ActivityVerb.Gather, ItemType.Food, PersonVitalType.Hunger, settings.DefaultEatAmount, settings.DefaultItemPriorities[ItemType.Food]);

            var activity = new GatherFoodActivity(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(10, person.Inventory.Items[ItemType.Food]);
        }
Пример #32
0
        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 void Test_GatherFood_FoodAvailable()
        {
            Console.WriteLine ("");
            Console.WriteLine ("Preparing test");
            Console.WriteLine ("");

            var context = MockEngineContext.New ();

            // TODO: Remove if not needed
            //context.World.Logic.AddActivity (typeof(GatherFoodActivity));

            var settings = context.Settings;

            var tile = context.World.Tiles [0];

            tile.Inventory [ItemType.Food] = 100;

            var person = new Person (settings);
            person.Tile = tile;

            var needEntry = new NeedEntry (ActivityVerb.Gather, ItemType.Food, PersonVitalType.Hunger, settings.DefaultEatAmount, settings.DefaultItemPriorities[ItemType.Food]);

            var activity = new GatherFoodActivity (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(10, person.Inventory.Items[ItemType.Food]);
        }
        public void Test_Build_StartConstruction()
        {
            Console.WriteLine ("");
            Console.WriteLine ("Preparing test");
            Console.WriteLine ("");

            var settings = EngineSettings.DefaultVerbose;

            var person = new Person (settings);
            person.Inventory.AddItem (ItemType.Timber, 50); // TODO: Get the 50 value from somewhere easier to configures

            var needEntry = new NeedEntry (ActivityVerb.Build, ItemType.Shelter, PersonVitalType.NotSet, 1, 100);

            var activity = new BuildShelterActivity (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.IsNotNull (person.Home);
            Assert.AreEqual (50, person.Home.Inventory.Items[ItemType.Timber]); // TODO: Should all the timber necessarily be provided as soon as construction starts?
        }
        public void Test_Act_FinishedFelling()
        {
            Console.WriteLine ("");
            Console.WriteLine("Preparing test");
            Console.WriteLine("");

            var context = MockEngineContext.New ();

            var settings = EngineSettings.DefaultVerbose;
            settings.FellingRate = 10;

            var person = new PersonCreator (settings).CreateAdult ();

            var tile = context.World.Tiles[0];
            tile.AddPerson (person);
            tile.AddTrees (new PlantCreator (context.Settings).CreateTrees (2));

            var needEntry = new NeedEntry (ActivityVerb.Fell, ItemType.Wood, PersonVitalType.NotSet, 50, 101);

            person.AddNeed (needEntry);

            var activity = new FellWoodActivity (person, needEntry, settings, new ConsoleHelper(settings));
            activity.Target = tile.Trees [0];
            activity.Target.PercentHarvested = 100;
            activity.TotalWoodFelled = 40; // Add just enough so the activity can finish

            var totalWoodExpected = activity.Target.Size;

            Console.WriteLine ("");
            Console.WriteLine ("Executing test");
            Console.WriteLine ("");

            activity.Act (person);

            Assert.IsTrue (activity.IsFinished);
            Assert.IsNull(activity.Target);
            Assert.AreEqual (totalWoodExpected, person.Inventory.Items [ItemType.Wood]);

            Assert.AreEqual (0, person.Needs.Count);
        }
Пример #36
0
 public SleepActivity(Person person, NeedEntry needEntry, EngineSettings settings, ConsoleHelper console)
     : base(person, needEntry, settings, console)
 {
 }
 public CollectWaterActivity(Person actor, NeedEntry needEntry, EngineSettings settings, ConsoleHelper console)
     : base(actor, needEntry, settings, console)
 {
 }
Пример #38
0
 public FightActivity(Person person, NeedEntry needEntry, EngineSettings settings, ConsoleHelper console)
     : base(person, needEntry, settings, console)
 {
 }
Пример #39
0
 public GatherFoodActivity(Person actor, NeedEntry needEntry, EngineSettings settings, ConsoleHelper console)
     : base(actor, needEntry, settings, console)
 {
 }
Пример #40
0
 public override void ConfirmProduced(NeedEntry entry)
 {
     throw new NotImplementedException ();
 }
Пример #41
0
 public virtual void ConfirmProduced(NeedEntry entry)
 {
     ItemsProduced [entry.ItemType] += entry.Quantity;
 }
Пример #42
0
 public FleeActivity(Person actor, NeedEntry needEntry, EngineSettings settings, ConsoleHelper console)
     : base(actor, needEntry, settings, console)
 {
 }
Пример #43
0
 public override void ConfirmProduced(NeedEntry entry)
 {
     throw new NotImplementedException();
 }
Пример #44
0
 public void AddNeed(NeedEntry needEntry)
 {
     Needs.Add(needEntry);
 }
Пример #45
0
 public override void ConfirmProduced(NeedEntry entry)
 {
     base.ConfirmProduced (entry);
 }
Пример #46
0
 public virtual void ConfirmProduced(NeedEntry entry)
 {
     ItemsProduced [entry.ItemType] += entry.Quantity;
 }
Пример #47
0
        public BaseActivity GetActivity(Person person, Type activityType, NeedEntry needEntry)
        {
            var activity = person.GetActivity (activityType);
            if (activity == null)
                activity = Creator.CreateActivity(person, activityType, needEntry);

            return activity;
        }
 public override void ConfirmProduced(NeedEntry entry)
 {
     base.ConfirmProduced(entry);
 }