diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index b72446cab7..282224d567 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -430,6 +430,29 @@ proc/listclearnulls(list/list) return (result + L.Copy(Li, 0)) return (result + R.Copy(Ri, 0)) +// Insert an object into a sorted list, preserving sortedness +/proc/dd_insertObjectList(var/list/L, var/O) + var/min = 1 + var/max = L.len + var/Oval = O:dd_SortValue() + + while(1) + var/mid = min+round((max-min)/2) + + if(mid == max) + L.Insert(mid, O) + return + + var/Lmid = L[mid] + var/midval = Lmid:dd_SortValue() + if(Oval == midval) + L.Insert(mid, O) + return + else if(Oval < midval) + max = mid + else + min = mid+1 + /* proc/dd_sortedObjectList(list/incoming) /* diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index c316583a0b..49684fdc91 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -121,6 +121,9 @@ datum/controller/game_controller/proc/setup_objects() //Set up spawn points. populate_spawn_points() + // Sort the machinery list so it doesn't cause a lagspike at roundstart + process_machines_sort() + world << "\red \b Initializations complete." sleep(-1) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 6a1b832d0b..77b20f0d3f 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -113,8 +113,11 @@ Class Procs: /obj/machinery/New() ..() - machines += src - machinery_sort_required = 1 + if(!machinery_sort_required && ticker) + dd_insertObjectList(machines, src) + else + machines += src + machinery_sort_required = 1 /obj/machinery/Del() machines -= src