Пример #1
0
        public bool Validate(CreatureAI creature, VoxelHandle voxel, ResourceTypeAmount Resource)
        {
            if (creature.Blackboard.GetData <bool>("NoPath", false))
            {
                return(false);
            }

            return(creature.Creature.Inventory.HasResource(Resource));
        }
Пример #2
0
        public List <Resource> FindResourcesOfType(ResourceTypeAmount amount)
        {
            var count = 0;
            var r     = new List <Resource>();

            foreach (var res in Resources)
            {
                if (res.Resource.TypeName == amount.Type && count < amount.Count)
                {
                    r.Add(res.Resource);
                    count += 1;
                    if (count >= amount.Count)
                    {
                        break;
                    }
                }
            }
            return(r);
        }
Пример #3
0
        public override MaybeNull <Act> CreateScript(Creature creature)
        {
            if (Library.GetVoxelType(VoxType).HasValue(out VoxelType voxtype))
            {
                var resource = creature.World.ListResources().Where(r => Library.GetResourceType(r.Key).HasValue(out var res) && voxtype.CanBuildWith(res)).FirstOrDefault();

                if (resource.Key == null)
                {
                    return(null);
                }

                var resources = new ResourceTypeAmount(resource.Value.Type, 1);

                return(new Select(
                           new Sequence(
                               ActHelper.CreateEquipmentCheckAct(creature.AI, "Tool", ActHelper.EquipmentFallback.NoFallback, "Hammer"),
                               new FailMessage(creature.AI, new GetResourcesOfType(creature.AI, new List <ResourceTypeAmount>()
                {
                    resources
                })
                {
                    BlackboardEntry = "stashed-resource"
                },
                                               "Couldn't locate the correct resources!"),
                               new Domain(() => Validate(creature.AI, Voxel, resources),
                                          new GoToVoxelAct(Voxel, PlanAct.PlanType.Radius, creature.AI, 4.0f)),
                               new PlaceVoxelAct(Voxel, creature.AI, "stashed-resource", VoxType)),
                           new Wrap(creature.RestockAll))
                {
                    Name = "Build Voxel"
                });
            }
            else
            {
                return(null);
            }
        }
Пример #4
0
 public bool Has(ResourceTypeAmount ResourceType)
 {
     return(Resources.Count(r => r.TypeName == ResourceType.Type) >= ResourceType.Count);
 }
Пример #5
0
 public bool HasFreeStockpile(ResourceTypeAmount toPut)
 {
     return(EnumerateZones().OfType <Stockpile>().Any(s => s.IsBuilt && !s.IsFull() && s.IsAllowed(toPut.Type)));
 }
Пример #6
0
 public bool HasResource(ResourceTypeAmount itemToStock)
 {
     return(Resources.Count(resource => resource.Resource.TypeName == itemToStock.Type) >= itemToStock.Count);
 }