ID:1917945
 
(See the best response by Nadrew.)
Task I need to Complete:

BEGIN FirstProc

Loop through every atom of type var/turf/Ground/G in the world.

For each G, check G.Components[] and G.Moisture to determine whether moisture should be retained, passed to neighbors, or evaporate.

Determine if G's current makeup should make it harder or softer.

Queue a satus-changing action to be later executed on G, should it be required.

Then check to see if G has plantlife on top of it.

Check any plantlife for their requirements, and determine whether it is getting too much/little of required nutrients and moisture.

Queue a status-changing action to be later executed on the plantlife, should it be required.

END FirstProc

Get Scheduler Queue(GroundUpdates)
Execute Queue(GroundUpdates)
Clear Queue(GroundUpdates)

Get Scheduler Queue(PlantLifeUpdates)
Execute Queue(PlantLifeUpdates)
Clear Queue(PlantLifeUpdates)


This question isn't really asking for any code. I think I can do that. My problem is in figuring out *how* I can do this efficiently. I literally have no idea where to start.

If it's not possible to do efficiently, is there any way one could do anything similar? I feel like this is a design problem, but also a development problem - and I'm failing horribly at it.
Best response
You could just keep track of time values and only update things when players actually come into view of them, so you just keep track of WHEN things are supposed to happen instead of making them happen on a loop, then as needed, in a small amounts as players see said things, the actual event will happen.

It's how I used to handle global season changes in a game I worked on, it initially tried to update the entire world at once but that was the source of lots of resource usage, so I only updated parts that could be seen.
Did not think of that.. Sweet, thank you! That should help out a lot.