Вариант № 1: опрос
Я бы, вероятно, построил бы контроллер, который мог бы обнаружить задержку для всех различных объектов и поддерживать остаточные значения для каждого объекта. Контроллер будет циклически проходить через тики, и на каждом тике он будет уменьшать оставшиеся тики для всех объектов в игре.
Как только оставшееся значение тиков сущностей достигает нуля, вы знаете, что это их очередь, управляемая методом тактового импульса, который обрабатывает тики, или методом, который вы вызываете.
Вариант № 2 События
Думайте как парадигма пользовательского интерфейса, интерфейс не постоянно опрашивает кнопку, чтобы увидеть, когда она нажата. Вместо этого давайте кнопку уведомим пользовательский интерфейс, когда он был нажат через события. Пусть ваши сущности (или EntityBattleContext) запустят событие, когда оно будет готово. Вам придется каким-то образом обрабатывать игровое время, поскольку оно вообще не основано на реальном времени, вам может потребоваться, чтобы все сущности прослушивали событие GameTick, и когда они получают это событие, обновляют свою внутреннюю переменную TicksRemaining.
Прежде чем следовать по маршруту, управляемому событиями, убедитесь, что маршрут опроса не работает. Помните кардинальное правило , всегда оптимизируйте позже , потому что чаще всего вам не нужна оптимизация.