Esempio n. 1
0
        public override IEnumerable <Status> Run()
        {
            if (Tree == null)
            {
                if (ItemToStock == null)
                {
                    ItemToStock = Agent.Blackboard.GetData <ResourceAmount>(ItemID);
                }


                if (ItemToStock != null)
                {
                    Tree = new Sequence(
                        new SetBlackboardData <ResourceAmount>(Agent, "GatheredResource", ItemToStock.CloneResource()),
                        new SearchFreeStockpileAct(Agent, "TargetStockpile", "FreeVoxel", ItemToStock),
                        new Select(
                            new Sequence(
                                new GoToNamedVoxelAct("FreeVoxel", PlanAct.PlanType.Adjacent, Agent),
                                new PutResourceInZone(Agent, "TargetStockpile", "FreeVoxel", "GatheredResource")
                                )
                            )
                        ) | new Wrap(OnFail);

                    Tree.Initialize();
                }
            }

            return(base.Run());
        }
Esempio n. 2
0
        public override void Initialize()
        {
            /*
             * Creature.AI.Blackboard.Erase("PathToEntity");
             * Creature.AI.Blackboard.Erase("EntityVoxel");
             * Tree = new Sequence(
             *  new Wrap(() => Creature.ClearBlackboardData("PathToEntity")),
             *  new Wrap(() => Creature.ClearBlackboardData("EntityVoxel")),
             *  InHands() |
             *   new Sequence(
             *      new ForLoop(
             *          new Sequence(
             *              new SetTargetVoxelFromEntityAct(Agent, EntityName, "EntityVoxel"),
             *              new PlanAct(Agent, "PathToEntity", "EntityVoxel", PlanAct.PlanType.Adjacent),
             *              new Parallel( new FollowPathAct(Agent, "PathToEntity"),
             *                            new Wrap(() => TargetMoved("PathToEntity")),
             *                            new Wrap(CollidesWithTarget)) { ReturnOnAllSucces = false }
             *                       ),
             *                  5, true),
             *      new StopAct(Agent)));
             */
            Tree = new Sequence(
                new Wrap(TrackMovingTarget),
                new StopAct(Agent)
                );

            Tree.Initialize();
            base.Initialize();
        }
Esempio n. 3
0
        public override IEnumerable <Status> Run()
        {
            if (Tree == null)
            {
                if (ItemToGather == null)
                {
                    ItemToGather = Agent.Blackboard.GetData <GameComponent>(ItemID);
                }


                if (ItemToGather != null)
                {
                    Tree = new Sequence(
                        new SetBlackboardData <GameComponent>(Agent, "GatherItem", ItemToGather),
                        new GoToEntityAct(ItemToGather, Agent),
                        new StashAct(Agent, StashAct.PickUpType.None, null, "GatherItem", "GatheredResource"))
                           | (new Wrap(() => Finally(Agent)) & false);

                    Tree.Initialize();
                }
            }

            if (Tree == null)
            {
                yield return(Status.Fail);
            }
            else
            {
                foreach (Status s in base.Run())
                {
                    yield return(s);
                }
            }
        }
Esempio n. 4
0
        public override IEnumerable <Status> Run()
        {
            if (Tree == null)
            {
                if (ItemToStock == null)
                {
                    throw new InvalidOperationException();
                }

                Tree = new Sequence(
                    new SetBlackboardData <Resource>(Agent, "GatheredResource", ItemToStock),
                    new SearchFreeStockpileAct(Agent, "TargetStockpile", "FreeVoxel", ItemToStock),
                    new GoToNamedVoxelAct("FreeVoxel", PlanAct.PlanType.Adjacent, Agent),
                    new PutResourceInZone(Agent, "TargetStockpile", "GatheredResource"));

                Tree.Initialize();
            }

            return(base.Run());
        }
Esempio n. 5
0
        public override IEnumerable <Status> Run()
        {
            if (Tree == null)
            {
                if (ItemToGather == null)
                {
                    ItemToGather = Agent.Blackboard.GetData <Body>(ItemID);
                }


                if (ItemToGather != null)
                {
                    Tree = new Sequence(
                        new SetBlackboardData <Body>(Agent, "GatherItem", ItemToGather),
                        EntityIsGatherable(),
                        new Wrap(AddItemToGatherManager),
                        new GoToEntityAct(ItemToGather, Agent),
                        EntityIsGatherable(),
                        new StashAct(Agent, StashAct.PickUpType.None, null, "GatherItem", "GatheredResource"),
                        new Wrap(RemoveItemFromGatherManager),
                        new Wrap(AddStockOrder)
                        ) | (new Wrap(RemoveItemFromGatherManager) & new Wrap(Finally) & false);

                    Tree.Initialize();
                }
            }

            if (Tree == null)
            {
                yield return(Status.Fail);
            }
            else
            {
                foreach (Status s in base.Run())
                {
                    yield return(s);
                }
            }
        }
Esempio n. 6
0
        public override IEnumerable <Status> Run()
        {
            if (Tree != null)
            {
                return(base.Run());
            }
            ResourceAmount coins = new ResourceAmount(ResourceType.Coins, 1);

            Tree = new Sequence(
                new SearchFreeStockpileAct(Agent, "TargetStockpile", "FreeVoxel", coins),

                new Select(
                    new Sequence(
                        new GoToNamedVoxelAct("FreeVoxel", PlanAct.PlanType.Adjacent, Agent),
                        new PutMoneyInZoneAct(Agent, "TargetStockpile", "FreeVoxel", Money)
                        )
                    )

                )
            ;

            Tree.Initialize();
            return(base.Run());
        }
Esempio n. 7
0
        public override IEnumerable<Status> Run()
        {
            if(Tree == null)
            {
                if(ItemToGather == null)
                {
                    ItemToGather = Agent.Blackboard.GetData<Body>(ItemID);
                }

                if(ItemToGather != null)
                {
                    Tree = new Sequence(
                        new SetBlackboardData<Body>(Agent, "GatherItem", ItemToGather),
                        EntityIsGatherable(),
                        new Wrap(AddItemToGatherManager),
                        new GoToEntityAct(ItemToGather, Agent),
                        EntityIsGatherable(),
                        new StashAct(Agent, StashAct.PickUpType.None, null, "GatherItem", "GatheredResource"),
                        new Wrap(RemoveItemFromGatherManager),
                        new Wrap(AddStockOrder)
                        ) | (new Wrap(RemoveItemFromGatherManager) & new Wrap(Finally) & false);

                    Tree.Initialize();
                }
            }

            if(Tree == null)
            {
                yield return Status.Fail;
            }
            else
            {
                foreach(Status s in base.Run())
                {
                    yield return s;
                }
            }
        }
Esempio n. 8
0
 public override void Initialize()
 {
     Creature.AI.Blackboard.Erase("PathToEntity");
     Creature.AI.Blackboard.Erase("EntityVoxel");
     Tree = new Sequence(
         new Wrap(() => Creature.ClearBlackboardData("PathToEntity")),
         new Wrap(() => Creature.ClearBlackboardData("EntityVoxel")),
         InHands() |
          new Sequence(
             new ForLoop(
                 new SetTargetVoxelFromEntityAct(Agent, EntityName, "EntityVoxel") &
                 new PlanAct(Agent, "PathToEntity", "EntityVoxel", PlanAct.PlanType.Adjacent) &
                 new Parallel(new FollowPathAnimationAct(Agent, "PathToEntity") * new Wrap(() => TargetMoved("PathToEntity")), new Wrap(CollidesWithTarget)) { ReturnOnAllSucces = false }, 5, true),
             new StopAct(Agent)));
     Tree.Initialize();
     base.Initialize();
 }
Esempio n. 9
0
        public override IEnumerable<Status> Run()
        {
            if (Tree == null)
            {
                if (ItemToStock == null)
                {
                    ItemToStock = Agent.Blackboard.GetData<ResourceAmount>(ItemID);
                }

                if (ItemToStock != null)
                {

                    Tree = new Sequence(
                        new SetBlackboardData<ResourceAmount>(Agent, "GatheredResource", ItemToStock.CloneResource()),
                        new SearchFreeStockpileAct(Agent, "TargetStockpile", "FreeVoxel"),

                                        new Select(
                                                    new Sequence(
                                                                    new GoToVoxelAct("FreeVoxel", PlanAct.PlanType.Adjacent, Agent),
                                                                    new PutResourceInZone(Agent, "TargetStockpile", "FreeVoxel", "GatheredResource")
                                                                )
                                                  )

                        ) | new Wrap(OnFail)
                     ;

                    Tree.Initialize();
                }
            }

            return base.Run();
        }