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()); }
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(); }
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); } } }
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()); }
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); } } }
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()); }
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; } } }
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(); }
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(); }