public virtual void Tick(Actor self)
{
while (queue.Count > 0 && BuildableItems().All(b => b.Name != queue[0].Item))
{
// Refund what's been paid so far
playerResources.GiveCash(queue[0].TotalCost - queue[0].RemainingCost);
FinishProduction();
}
if (queue.Count > 0)
queue[0].Tick(playerResources);
}