public bool CanDelete() { if (this.SaveData == null || this.SaveData.AnimalData == null || (!Singleton <Manager.Map> .IsInstance() || !Singleton <Resources> .IsInstance())) { return(true); } AIProject.SaveData.AnimalData animalData = this.SaveData.AnimalData; int itemCategoryId = animalData.ItemCategoryID; int itemId = animalData.ItemID; if (Singleton <Resources> .Instance.GameInfo.GetItem(itemCategoryId, itemId) == null) { return(true); } Manager.Map instance = Singleton <Manager.Map> .Instance; List <ValueTuple <int, List <StuffItem> > > inventoryList = instance.GetInventoryList(); if (((IReadOnlyList <ValueTuple <int, List <StuffItem> > >)inventoryList).IsNullOrEmpty <ValueTuple <int, List <StuffItem> > >()) { instance.ReturnInventoryList(inventoryList); return(true); } StuffItem stuffItem = new StuffItem(itemCategoryId, itemId, 1); bool flag = false; using (List <ValueTuple <int, List <StuffItem> > > .Enumerator enumerator = inventoryList.GetEnumerator()) { while (enumerator.MoveNext()) { ValueTuple <int, List <StuffItem> > current = enumerator.Current; int capacity = (int)current.Item1; List <StuffItem> self = (List <StuffItem>)current.Item2; int possible = 0; StuffItemExtensions.CanAddItem((IReadOnlyCollection <StuffItem>)self, capacity, stuffItem, out possible); flag = stuffItem.Count <= possible; if (flag) { self.AddItem(stuffItem); break; } } } return(flag); }
public bool CanDelete() { if (this._kind != CraftPoint.CraftKind.Recycling || !Singleton <Manager.Map> .IsInstance() || !Singleton <Game> .IsInstance()) { return(true); } WorldData worldData = Singleton <Game> .Instance.WorldData; AIProject.SaveData.Environment environment = worldData == null ? (AIProject.SaveData.Environment)null : worldData.Environment; if (environment == null) { return(true); } RecyclingData recyclingData = (RecyclingData)null; if (!environment.RecyclingDataTable.TryGetValue(this.RegisterID, out recyclingData) || recyclingData == null) { return(true); } recyclingData.DecidedItemList.RemoveAll((Predicate <StuffItem>)(x => x == null || x.Count <= 0)); recyclingData.CreatedItemList.RemoveAll((Predicate <StuffItem>)(x => x == null || x.Count <= 0)); if (recyclingData.DecidedItemList.IsNullOrEmpty <StuffItem>() && recyclingData.CreatedItemList.IsNullOrEmpty <StuffItem>()) { return(true); } List <StuffItem> stuffItemList1 = ListPool <StuffItem> .Get(); foreach (StuffItem decidedItem in recyclingData.DecidedItemList) { StuffItem itemInstance = CraftPoint.GetItemInstance(); CraftPoint.CopyItem(decidedItem, itemInstance); stuffItemList1.AddItem(itemInstance); } foreach (StuffItem createdItem in recyclingData.CreatedItemList) { StuffItem itemInstance = CraftPoint.GetItemInstance(); CraftPoint.CopyItem(createdItem, itemInstance); stuffItemList1.AddItem(itemInstance); } Manager.Map instance = Singleton <Manager.Map> .Instance; List <ValueTuple <int, List <StuffItem> > > inventoryList = instance.GetInventoryList(); List <ValueTuple <int, List <StuffItem> > > valueTupleList = ListPool <ValueTuple <int, List <StuffItem> > > .Get(); using (List <ValueTuple <int, List <StuffItem> > > .Enumerator enumerator = inventoryList.GetEnumerator()) { while (enumerator.MoveNext()) { ValueTuple <int, List <StuffItem> > current = enumerator.Current; int num = (int)current.Item1; List <StuffItem> source = (List <StuffItem>)current.Item2; List <StuffItem> stuffItemList2 = ListPool <StuffItem> .Get(); valueTupleList.Add(new ValueTuple <int, List <StuffItem> >(num, stuffItemList2)); if (!source.IsNullOrEmpty <StuffItem>()) { foreach (StuffItem from in source) { StuffItem itemInstance = CraftPoint.GetItemInstance(); CraftPoint.CopyItem(from, itemInstance); stuffItemList2.Add(itemInstance); } } } } using (List <ValueTuple <int, List <StuffItem> > > .Enumerator enumerator = valueTupleList.GetEnumerator()) { while (enumerator.MoveNext()) { ValueTuple <int, List <StuffItem> > current = enumerator.Current; int num = (int)current.Item1; List <StuffItem> self = (List <StuffItem>)current.Item2; for (int index = 0; index < stuffItemList1.Count; ++index) { StuffItem element = stuffItemList1.GetElement <StuffItem>(index); if (element == null || element.Count <= 0) { stuffItemList1.RemoveAt(index); --index; } else { StuffItem itemInstance = CraftPoint.GetItemInstance(); CraftPoint.CopyItem(element, itemInstance); int possible = 0; StuffItemExtensions.CanAddItem((IReadOnlyCollection <StuffItem>)self, num, itemInstance, out possible); if (0 < possible) { possible = Mathf.Min(possible, itemInstance.Count); self.AddItem(itemInstance, possible, num); } element.Count -= possible; if (element.Count <= 0) { stuffItemList1.RemoveAt(index); --index; } } } } } stuffItemList1.RemoveAll((Predicate <StuffItem>)(x => x == null || x.Count <= 0)); bool flag = stuffItemList1.IsNullOrEmpty <StuffItem>(); if (flag) { using (List <ValueTuple <int, List <StuffItem> > > .Enumerator enumerator = inventoryList.GetEnumerator()) { while (enumerator.MoveNext()) { ValueTuple <int, List <StuffItem> > current = enumerator.Current; int slotMax = (int)current.Item1; List <StuffItem> receiver = (List <StuffItem>)current.Item2; instance.SendItemListToList(slotMax, recyclingData.DecidedItemList, receiver); instance.SendItemListToList(slotMax, recyclingData.CreatedItemList, receiver); } } } using (List <ValueTuple <int, List <StuffItem> > > .Enumerator enumerator = valueTupleList.GetEnumerator()) { while (enumerator.MoveNext()) { ValueTuple <int, List <StuffItem> > current = enumerator.Current; if (current.Item2 != null) { foreach (StuffItem stuffItem in (List <StuffItem>)current.Item2) { CraftPoint.ReturnItemInstance(stuffItem); } ListPool <StuffItem> .Release((List <StuffItem>) current.Item2); } } } foreach (StuffItem stuffItem in stuffItemList1) { CraftPoint.ReturnItemInstance(stuffItem); } ListPool <StuffItem> .Release(stuffItemList1); instance.ReturnInventoryList(inventoryList); return(flag); }