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

◆ SortBeforeAfter< T >()

static List< T > Terraria.ModLoader.NPCShop.SortBeforeAfter< T > ( IEnumerable< T > values,
Func< T,(T, bool after)> func )
inlinestaticprivate

Definition at line 301 of file NPCShop.cs.

302 {
303 List<T> baseOrder = new List<T>();
304 Dictionary<T, List<T>> sortBefore = new Dictionary<T, List<T>>();
306 foreach (T r2 in values)
307 {
308 (T, bool) tuple = func(r2);
309 var (target2, _) = tuple;
310 if (target2 != null)
311 {
312 if (!tuple.Item2)
313 {
314 if (!sortBefore.TryGetValue(target2, out var before))
315 {
316 List<T> list2 = (sortBefore[target2] = new List<T>());
317 before = list2;
318 }
319 before.Add(r2);
320 continue;
321 }
322 T target = target2;
323 if (!sortAfter.TryGetValue(target, out var after))
324 {
325 List<T> list2 = (sortAfter[target] = new List<T>());
326 after = list2;
327 }
328 after.Add(r2);
329 }
330 else
331 {
332 baseOrder.Add(r2);
333 }
334 }
335 if (sortBefore.Count + sortAfter.Count == 0)
336 {
337 return values.ToList();
338 }
339 List<T> sorted = new List<T>();
340 foreach (T item in baseOrder)
341 {
342 Sort(item);
343 }
344 return sorted;
345 void Sort(T r)
346 {
347 if (sortBefore.TryGetValue(r, out var before2))
348 {
349 foreach (T item2 in before2)
350 {
351 Sort(item2);
352 }
353 }
354 sorted.Add(r);
355 if (sortAfter.TryGetValue(r, out var after2))
356 {
357 foreach (T item3 in after2)
358 {
359 Sort(item3);
360 }
361 }
362 }
363 }

References Terraria.ModLoader.NPCShop.Sort().

+ Here is the call graph for this function: