Например ради:
- Допустим, в мире 10 комнат.
- И скажем, мир населен 10 сущностями.
- И у каждой сущности есть своя «ежедневная рутина», в которой она выполняет определенные действия в комнате, а также может перемещаться между комнатами.
Учитывая, что игрок может находиться только в одной комнате одновременно, каков хороший способ отслеживать действия, которые другие объекты выполняют в других комнатах за кадром?
- Самый простой вариант - проверить каждую из 10 сущностей в каждом кадре, проверить их положение / состояние и определить, должен ли объект находиться в комнате, где находится игрок, в любой момент времени. (Это, однако, кажется очень ресурсоемким, особенно когда количество комнат / сущностей увеличивается.)
Другим вариантом является отслеживание времени, прошедшего с начала игры, затем каждая из сущностей проверяет, пересекается ли ее шаблон с комнатой, в которой находится игрок, и проверяет время относительно того, Предполагается, что объект находится в той же комнате в это конкретное время, объекты, паттерны которых не пересекаются с текущей комнатой, в которой находится игрок, ничего не делают, пока игрок не войдет в комнату, в которой пересекается их паттерн, и только в этой точке рассчитывают, будет ли они должны оказать. (Но если они взаимодействуют с комнатой, им придется всегда проверять состояние комнат, которые пересекают их маршрут, чтобы определить их местоположение в тот момент времени, что не так уж и хорошо.)
Третий вариант, к которому я пришел, - это, во-первых, только смотреть на маршруты, которые пересекают местоположение игрока (как описано ранее), во-вторых, при входе в комнату, проверять, находится ли игрок в этой комнате, если нет, то проверять только состояние комнаты и сколько времени потребуется, чтобы перейти в следующую комнату. Например, NPC-уборщик входит в комнату, проверяет состояние комнаты, видит, что игрок сделал утечку, рассчитывает, сколько времени потребуется, чтобы очистить его, сколько времени займет путь и т.д. Время для входа в следующую комнату, мы только проверяем, находится ли игрок в комнате. Точное местоположение NPC для целей рендеринга будет рассчитываться только тогда, когда игрок войдет в комнату.
После некоторого мозгового штурма я пришел к третьему варианту, но мне было интересно, существует ли, возможно, известный или лучший способ справиться с такими вещами?