Пример #1
0
 private static Action <Hero> SharpStoneConseq(double prbab, GameObject stone)
 {
     return(Consequance.Probability(prbab,
                                    Consequance.Composite(
                                        CreateSharpStone.Create(stone),
                                        Consequance.AddKnowledge(Knowledges.CreateSharpStone))));
 }
Пример #2
0
        public IActionResult Do(Hero hero, IList <GameObject> objects)
        {
            var gameObjects = objects as GameObject[] ?? objects.ToArray();

            var nut     = gameObjects.FirstOrDefault(ao => ao.HasBehavior <CrackableBehavior>());
            var stone   = gameObjects.FirstOrDefault(ao => ao is Rock || ao is SharpStone);
            var cracker = gameObjects.Where(ao => ao != stone)
                          .FirstOrDefault(ao => ao.Properties.Contains(Property.Cracker));

            if (nut == null || stone == null || cracker == null)
            {
                return(new FinishedActionResult());
            }

            var crackableBehavior = nut.GetBehavior <CrackableBehavior>();

            nut.RemoveFromContainer();
            var nutKernel = crackableBehavior?.GetCrackable();

            Game.AddToGame(hero, nutKernel as FixedObject);

            return(new ConseqActionResult(true,
                                          SharpStoneConseq(0.5, stone),
                                          Consequance.AddObjectKnowledge(nut.Name, 5),
                                          Consequance.Probability(0.5, Consequance.AddObjectKnowledge(nutKernel?.Name, 1))));
        }
Пример #3
0
        public IActionResult Do(Hero hero, IList <GameObject> objects)
        {
            hero.AddToBag(objects);

            var conseqList = objects.Select(o => Consequance.AddObjectKnowledge(o.Name, 1)).ToArray();

            return(new ConseqActionResult(true, conseqList));
        }
Пример #4
0
        public virtual IActionResult Do(Hero hero, IList<GameObject> objects)
        {
            var collectBehavior = objects.Select(x => x.GetBehavior<CollectBehavior<T>>())
                .FirstOrDefault();

            var actionIsNotOver = Collect(collectBehavior, hero);

            return new ConseqActionResult(!actionIsNotOver, Consequance.Probability(0.5, Consequance.AddObjectKnowledge(collectBehavior?.Name, 1)));
        }
Пример #5
0
        public static Action <Hero> CreateIfKnowledge(GameObject stone)
        {
            return(hero =>
            {
                stone.RemoveFromContainer();

                Consequance.ProbabilityOrElse(
                    hero.GetKnowledge(Knowledges.CreateSharpStone),
                    Consequance.Composite(
                        heroInner =>
                {
                    var sharpStone = new SharpStone();
                    Game.AddToGame(heroInner, sharpStone);
                },
                        Consequance.AddKnowledge(Knowledges.CreateSharpStone, 10)),
                    Consequance.AddKnowledge(Knowledges.CreateSharpStone, 5))(hero);
            });
        }
Пример #6
0
        public IActionResult Do(Hero hero, IList <GameObject> objects)
        {
            var branches = objects.Where(o => o is Branch).ToList();
            var plant    = objects.SingleOrDefault(o => o is Plant);

            if (branches.Count != 2 || plant == null)
            {
                return(new FinishedActionResult());
            }

            branches.ForEach(b => b.RemoveFromContainer());
            plant.RemoveFromContainer();
            var fire = new Fire();

            Map.SetHObjectFromDestination(hero.Position, fire);

            return(new ConseqActionResult(true, Consequance.Probability(0.5, Consequance.AddObjectKnowledge(plant.Name, 1))));
        }
Пример #7
0
        public IActionResult Do(Hero hero, IList <GameObject> objects)
        {
            var conseqList = new List <Action <Hero> >();

            foreach (var eatableObject in objects.Where(o => o.HasBehavior <EatableBehavior>()))
            {
                var eatableBehavior = eatableObject.GetBehavior <EatableBehavior>();
                if (!eatableBehavior.ForHuman())
                {
                    continue;
                }

                hero.Eat((int)(eatableBehavior.SatietyCoefficient * eatableObject.WeightDbl));
                eatableObject.RemoveFromContainer();
                conseqList.Add(Consequance.AddObjectKnowledge(eatableObject.Name, 5));
                conseqList.Add(Consequance.AddToxicEffect(eatableBehavior.Poisoness, eatableBehavior.Time));
            }

            return(new ConseqActionResult(true, conseqList.ToArray()));
        }
Пример #8
0
        public IActionResult Do(Hero hero, IList <GameObject> objects)
        {
            var branch = objects.SingleOrDefault(o => o is Branch);
            var plant  = objects.SingleOrDefault(o => o is Plant);
            var stones = objects.Where(o => o.Properties.Contains(Property.Stone)).ToList();


            if (stones.Count < 2 || plant == null || branch == null)
            {
                return(new FinishedActionResult());
            }

            return(new ConseqActionResult(true,
                                          Consequance.ProbabilityOrElse(
                                              hero.GetKnowledge(Knowledges.MakeFireWithStone),
                                              Consequance.Composite(
                                                  Create(branch, plant),
                                                  Consequance.AddKnowledge(Knowledges.MakeFireWithStone, 10),
                                                  Consequance.AddObjectKnowledge(plant.Name, 1)),
                                              Consequance.Composite(Consequance.AddKnowledge(Knowledges.MakeFireWithStone, 5), Consequance.AddObjectKnowledge(plant.Name, 1)))
                                          ));
        }