Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Sort()

static void Terraria.UI.ItemSorting.Sort ( Item[] inv,
params int[] ignoreSlots )
inlinestaticprivate

Definition at line 1060 of file ItemSorting.cs.

1061 {
1063 List<int> list = new List<int>();
1064 for (int i = 0; i < inv.Length; i++)
1065 {
1066 if (!ignoreSlots.Contains(i))
1067 {
1068 Item item = inv[i];
1069 if (item != null && item.stack != 0 && item.type != 0 && !item.favorited)
1070 {
1071 list.Add(i);
1072 }
1073 }
1074 }
1075 for (int j = 0; j < list.Count; j++)
1076 {
1077 Item item2 = inv[list[j]];
1078 if (item2.stack >= item2.maxStack)
1079 {
1080 continue;
1081 }
1082 int num = item2.maxStack - item2.stack;
1083 for (int k = j; k < list.Count; k++)
1084 {
1085 if (j == k)
1086 {
1087 continue;
1088 }
1089 Item item3 = inv[list[k]];
1090 if (item2.type == item3.type && item3.stack != item3.maxStack)
1091 {
1092 int num2 = item3.stack;
1093 if (num < num2)
1094 {
1095 num2 = num;
1096 }
1097 item2.stack += num2;
1098 item3.stack -= num2;
1099 num -= num2;
1100 if (item3.stack == 0)
1101 {
1102 inv[list[k]] = new Item();
1103 list.Remove(list[k]);
1104 j--;
1105 k--;
1106 break;
1107 }
1108 if (num == 0)
1109 {
1110 break;
1111 }
1112 }
1113 }
1114 }
1116 for (int l = 0; l < inv.Length; l++)
1117 {
1118 if (!ignoreSlots.Contains(l) && !list2.Contains(l))
1119 {
1120 Item item4 = inv[l];
1121 if (item4 == null || item4.stack == 0 || item4.type == 0)
1122 {
1123 list2.Add(l);
1124 }
1125 }
1126 }
1127 list2.Sort();
1128 List<int> list3 = new List<int>();
1129 List<int> list4 = new List<int>();
1130 foreach (ItemSortingLayer layer in _layerList)
1131 {
1132 List<int> list5 = layer.SortingMethod(layer, inv, list);
1133 if (list5.Count > 0)
1134 {
1136 }
1138 }
1140 List<Item> list6 = new List<Item>();
1141 foreach (int item5 in list3)
1142 {
1143 list6.Add(inv[item5]);
1144 inv[item5] = new Item();
1145 }
1146 float num3 = 1f / (float)list4.Count;
1147 float num4 = num3 / 2f;
1148 for (int m = 0; m < list6.Count; m++)
1149 {
1150 int num5 = list2[0];
1151 ItemSlot.SetGlow(num5, num4, Main.player[Main.myPlayer].chest != -1);
1152 list4[0]--;
1153 if (list4[0] == 0)
1154 {
1155 list4.RemoveAt(0);
1156 num4 += num3;
1157 }
1158 inv[num5] = list6[m];
1159 list2.Remove(num5);
1160 }
1161 }
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
bool ICollection< KeyValuePair< TKey, TValue > >. Contains(KeyValuePair< TKey, TValue > keyValuePair)
void AddRange(IEnumerable< KeyValuePair< TKey, TValue > > collection)
void Add(TKey key, TValue value)
static List< ItemSortingLayer > _layerList
static void SetupSortingPriorities()

References Terraria.UI.ItemSorting._layerList, System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Collections.Generic.Dictionary< TKey, TValue >.AddRange(), System.Collections.Generic.Dictionary< TKey, TValue >.Contains(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.item, System.list, Terraria.Main.myPlayer, Terraria.Main.player, System.Collections.Generic.Dictionary< TKey, TValue >.Remove(), Terraria.UI.ItemSlot.SetGlow(), and Terraria.UI.ItemSorting.SetupSortingPriorities().

Referenced by Terraria.UI.ItemSorting.SortChest(), and Terraria.UI.ItemSorting.SortInventory().