Estoy desarrollando un sistema de suministro similar en mi propio juego, por lo que también he estado pensando en cómo resolver el problema del bloqueo de suministro y el favoritismo. Para ilustrar el problema, crearé un ejemplo simple:
Si tiene una lista: [productor1, consumidor1, consumidor2, consumidor3] y actualiza en orden, comenzando en la oferta = 0, obtendrá esto:
producer1 produces 5 mass. You now have 5 mass
consumer1 wants 3 mass. Success, you now have 2 mass
consumer2 wants 3 mass. Fail
consumer3 wants 3 mass. Fail
[next tick]
producer1 produces 5 mass. You now have 7 mass
consumer1 wants 3 mass. Success, you now have 4 mass
consumer2 wants 3 mass. Success, you now have 1 mass
consumer3 wants 3 mass. Fail
etc...
El consumidor 1 obtiene toda la diversión, mientras que los consumidores 2 y 3 pasan hambre hasta que el consumidor 1 está satisfecho. Dependiendo de su juego, esto puede no ser deseable. Lo sé en mi juego, no lo es. Cuando llegue a eso, voy a crear una cola en la que los consumidores que han sido alimentados con una marca se moverán al final de la cola para la siguiente, lo que creo que es lo que Roy T. está haciendo. El ejemplo anterior se vería así:
producer1 produces 5 mass. You now have 5 mass
consumer1 wants 3 mass. Success, you now have 2 mass. <-- Move to end of queue
consumer2 wants 3 mass. Fail
consumer3 wants 3 mass. Fail
[next tick]
producer1 produces 5 mass. You now have 7 mass
consumer2 wants 3 mass. Success, you now have 4 mass <-- Note the order change
consumer3 wants 3 mass. Success, you now have 1 mass
consumer1 wants 3 mass. Fail
etc...
De esta manera, todos obtendrán su parte justa de los recursos.
También planeo implementar una cola adicional que se utilizará como una cola de prioridad para que el usuario pueda seleccionar ciertas estructuras para tener prioridad de recursos. La cola prioritaria siempre se servirá antes que la cola estándar. Asegúrese de que todos los productores se actualicen primero, luego consuma todos los recursos en segundo lugar, de lo contrario, la cola se romperá cuando produzca recursos en medio de una marca y algunos consumidores ya hayan muerto de hambre.
Para resumir: actualice los productores, luego la cola de prioridad, moviendo los consumidores alimentados al final de la cola de prioridad, luego actualice la cola estándar, moviendo los consumidores alimentados al final de la cola estándar.