public void PerformGoal(ref NPCBase.NPCState state) { state.JobIsDone = true; if (WalkingTo == StorageType.Crate) { state.SetCooldown(5); if (StorageFactory.CrateLocations.TryGetValue(Job.Owner, out var locs)) { if (locs.TryGetValue(CurrentCratePosition, out var crate)) { state.SetIndicator(new Shared.IndicatorState(5, ColonyBuiltIn.ItemTypes.CRATE.Id)); ToStockpike = crate.StorageTypeLookup[StorageType.Stockpile].ToArray(); crate.TryTake(ToStockpike); WalkingTo = StorageType.Stockpile; } else { state.SetCooldown(10); JobSettings.SetGoal(Job, new StockpikeToCrateGoal(Job, JobSettings), ref state); } } else { CivLogger.Log(ChatColor.red, "Crate locations does not contain colony id {0}", Job.Owner.ColonyID); } } else { state.SetCooldown(5); state.SetIndicator(new Shared.IndicatorState(5, ColonyBuiltIn.ItemTypes.CRATE.Id)); StorageFactory.StoreItems(Job.Owner, ToStockpike); ToStockpike = null; WalkingTo = StorageType.Crate; InProgress.Remove(CurrentCratePosition); CurrentCratePosition = Vector3Int.invalidPos; GetPosition(); } }
public void PerformGoal(ref NPCBase.NPCState state) { state.JobIsDone = true; state.SetCooldown(1); if (WalkingTo == StorageType.Crate) { if (StorageFactory.CrateLocations.TryGetValue(Job.Owner, out var locs)) { if (locs.TryGetValue(CurrentCratePosition, out var crate)) { ToStockpike = crate.GetAllItems(StorageType.Stockpile).Values.ToArray(); ShowIndicator(ref state); crate.TryTake(ToStockpike); WalkingTo = StorageType.Stockpile; } else { LastCratePosition.Clear(); } } else { CivLogger.Log(ChatColor.red, "Crate locations does not contain colony id {0}", Job.Owner.ColonyID); } } else { ShowIndicator(ref state); StorageFactory.StoreItems(Job.Owner, ToStockpike); ToStockpike = null; WalkingTo = StorageType.Crate; InProgress.Remove(CurrentCratePosition); CurrentCratePosition = Vector3Int.invalidPos; GetPosition(); } }