Я розвиваю подібну систему постачання у власній грі, тому я також думав над тим, як вирішити проблему блокування поставок та фаворитизувати. Для ілюстрації проблеми я створимо простий приклад:
Якщо у вас є список: [виробник1, споживач1, споживач2, споживач3], і ви оновлюєте порядок, починаючи з постачання = 0, ви отримаєте це:
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...
споживач1 отримує все задоволення, тоді як споживачі 2 і 3 голодують, поки споживач 1 не задовольниться. Залежно від вашої гри, це може бути небажаним. Я знаю в своїй грі, це не так. Коли я обійдусь цим, я збираюся створити чергу, де споживачі, яких годували однією галочкою, перейдуть на задню частину черги за наступним галочкою, і я вважаю, що це потрапляє Рой Т. Приклад вище виглядатиме так:
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...
Таким чином, кожен отримає свою справедливу частку ресурсів.
Я також планую реалізувати додаткову чергу, яка буде використовуватися в якості черги з пріоритетом, щоб користувач міг вибрати певні структури для пріоритету ресурсу. Черга з пріоритетом завжди подаватиметься перед стандартною чергою. Переконайтесь, що спочатку оновлено всіх виробників, потім споживайте всі ресурси по-друге, інакше чергу вийде з ладу, коли ви виробляєте ресурси частково через галочку, а деякі споживачі вже голодують.
Отже, підкажіть: оновіть виробників, потім чергу пріоритетів, переміщуючи годуваних споживачів до кінця черги пріоритету, потім оновіть стандартну чергу, переміщуючи годуваних споживачів до кінця стандартної черги.