Sto sviluppando un sistema di approvvigionamento simile nel mio gioco, quindi ho anche pensato a come risolvere il problema del blocco delle forniture e al favoritismo. Per illustrare il problema, creerò un semplice esempio:
Se hai un elenco: [produttore1, consumatore1, consumatore2, consumatore3] e aggiorni in ordine, a partire da fornitura = 0, otterrai questo:
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...
consumer1 diventa divertente, mentre i consumatori 2 e 3 muoiono di fame fino a quando il consumatore 1 non è soddisfatto. A seconda del tuo gioco, questo potrebbe non essere desiderabile. Lo so nel mio gioco, non lo è. Quando ci arrivo, creerò una coda in cui i consumatori che sono stati alimentati in un tick si sposteranno sul retro della coda per il tick successivo, che credo sia quello a cui Roy T. sta arrivando. L'esempio sopra sarebbe simile al seguente:
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...
In questo modo, tutti avranno la loro giusta quota delle risorse.
Ho anche intenzione di implementare una coda aggiuntiva da utilizzare come coda prioritaria in modo che l'utente possa selezionare determinate strutture per avere la priorità delle risorse. La coda prioritaria verrà sempre servita prima della coda standard. Assicurati che tutti i produttori vengano prima aggiornati, quindi consuma tutte le risorse in secondo luogo, altrimenti la coda si interromperà quando produci risorse a metà tick e alcuni consumatori sono già affamati.
Quindi, per ricapitolare: aggiorna i produttori, quindi la coda prioritaria, spostando i consumatori alimentati alla fine della coda prioritaria, quindi aggiorna la coda standard, spostando i consumatori nutriti alla fine della coda standard.