public bool Validate(CreatureAI creature, VoxelHandle voxel, ResourceTypeAmount Resource) { if (creature.Blackboard.GetData <bool>("NoPath", false)) { return(false); } return(creature.Creature.Inventory.HasResource(Resource)); }
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); }
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); } }
public bool Has(ResourceTypeAmount ResourceType) { return(Resources.Count(r => r.TypeName == ResourceType.Type) >= ResourceType.Count); }
public bool HasFreeStockpile(ResourceTypeAmount toPut) { return(EnumerateZones().OfType <Stockpile>().Any(s => s.IsBuilt && !s.IsFull() && s.IsAllowed(toPut.Type))); }
public bool HasResource(ResourceTypeAmount itemToStock) { return(Resources.Count(resource => resource.Resource.TypeName == itemToStock.Type) >= itemToStock.Count); }