Conveyor belts are now more respective of server load (#48298)

They move only 30 items at a time, and cancel processing otherwise.

They will also yield during moving to allow other stuff to proceed
This commit is contained in:
oranges
2019-12-18 14:39:08 -05:00
committed by ShizCalev
parent 524ef3672b
commit dca168028c
+20 -4
View File
@@ -1,6 +1,6 @@
//conveyor2 is pretty much like the original, except it supports corners, but not diverters.
//note that corner pieces transfer stuff clockwise when running forward, and anti-clockwise backwards.
#define MAX_CONVEYOR_ITEMS_MOVE 30
GLOBAL_LIST_EMPTY(conveyors_by_id)
/obj/machinery/conveyor
@@ -19,6 +19,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
var/id = "" // the control ID - must match controller ID
var/verted = 1 // Inverts the direction the conveyor belt moves.
speed_process = TRUE
var/conveying = FALSE
/obj/machinery/conveyor/centcom_auto
id = "round_end_belt"
@@ -127,16 +128,29 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
/obj/machinery/conveyor/process()
if(stat & (BROKEN | NOPOWER))
return
if(!operating)
//If the conveyor is broken or already moving items
if(!operating || conveying)
return
use_power(6)
affecting = loc.contents - src // moved items will be all in loc
//get the first 30 items in contents
var/i = 0
for(var/item in loc.contents)
if(item == src)
continue
i++ // we're sure it's a real target to move at this point
if(i >= MAX_CONVEYOR_ITEMS_MOVE)
break
affecting.Add(item)
conveying = TRUE
addtimer(CALLBACK(src, .proc/convey, affecting), 1)
/obj/machinery/conveyor/proc/convey(list/affecting)
for(var/atom/movable/A in affecting)
if((A.loc == loc) && A.has_gravity())
if(!QDELETED(A) && (A.loc == loc))
A.ConveyorMove(movedir)
//Give this a chance to yield if the server is busy
stoplag()
conveying = FALSE
// attack with item, place item on conveyor
/obj/machinery/conveyor/attackby(obj/item/I, mob/user, params)
@@ -398,3 +412,5 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
/obj/item/paper/guides/conveyor
name = "paper- 'Nano-it-up U-build series, #9: Build your very own conveyor belt, in SPACE'"
info = "<h1>Congratulations!</h1><p>You are now the proud owner of the best conveyor set available for space mail order! We at Nano-it-up know you love to prepare your own structures without wasting time, so we have devised a special streamlined assembly procedure that puts all other mail-order products to shame!</p><p>Firstly, you need to link the conveyor switch assembly to each of the conveyor belt assemblies. After doing so, you simply need to install the belt assemblies onto the floor, et voila, belt built. Our special Nano-it-up smart switch will detected any linked assemblies as far as the eye can see! This convenience, you can only have it when you Nano-it-up. Stay nano!</p>"
#undef MAX_CONVEYOR_ITEMS_MOVE