private static Action <Hero> SharpStoneConseq(double prbab, GameObject stone) { return(Consequance.Probability(prbab, Consequance.Composite( CreateSharpStone.Create(stone), Consequance.AddKnowledge(Knowledges.CreateSharpStone)))); }
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)))); }
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)); }
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))); }
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); }); }
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)))); }
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())); }
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))) )); }