Ejemplo n.º 1
0
        public override void Initialize()
        {
            bool hasAllResources = true;

            if (Resources != null)
            {
                foreach (Quantitiy <Resource.ResourceTags> resource in Resources)
                {
                    if (!Creature.Inventory.HasResource(resource, AllowHeterogenous))
                    {
                        hasAllResources = false;
                    }
                }
            }
            else if (ResourcesToStash != null)
            {
                foreach (ResourceAmount resource in ResourcesToStash)
                {
                    if (!Creature.Inventory.HasResource(resource))
                    {
                        hasAllResources = false;
                    }
                }
            }
            else
            {
                Tree = null;
                return;
            }

            if (Faction == null)
            {
                Faction = Agent.Faction;
            }


            if (!hasAllResources)
            {
                Stockpile nearestStockpile = Faction.GetNearestStockpile(Agent.Position, (pile) => !(pile is Graveyard));

                if (ResourcesToStash == null && Resources != null)
                {
                    ResourcesToStash = Faction.GetResourcesWithTags(Resources, AllowHeterogenous);
                }

                if (nearestStockpile == null || (ResourcesToStash != null && ResourcesToStash.Count == 0))
                {
                    Tree = null;
                    return;
                }
                else
                {
                    Tree = new Sequence(new Domain(() => HasResources(Agent), new GoToZoneAct(Agent, nearestStockpile)),
                                        new Sequence(new Condition(() => HasResources(Agent)), new StashResourcesAct(Agent, ResourcesToStash)
                    {
                        Faction = Faction
                    }),
                                        new SetBlackboardData <List <ResourceAmount> >(Agent, "ResourcesStashed", ResourcesToStash)
                                        );
                }
            }
            else
            {
                Tree = new SetBlackboardData <List <ResourceAmount> >(Agent, "ResourcesStashed", ResourcesToStash);
            }

            base.Initialize();
        }