clockЖизненный цикл игры/кадра

В отличие от событийно-ориентированного скриптинга, как в Roblox, игры в All Out используют модель жизненного цикла кадров, которая позволяет запускать код при старте игры, на каждом кадре и в конце сессии.

Все игры All Out работают по простому жизненному циклу: некоторые колбэки вызываются один раз при запуске, а некоторые — каждый кадр.

Вы реализуете эти колбэки либо:

  • Глобально (на верхнем уровне ao_* процедуры в main.csl), либо

  • На компонентах (методы вроде ao_update внутри Player или ваших собственных Компонент подклассов)

circle-info

Если вы ищете «шаблон» main.csl, см. Начало работы с CSL.

Глобальный жизненный цикл (для всей сцены)

Это процедуры верхнего уровня в main.csl:

ao_before_scene_load

Выполняется до создания сцены. Именно здесь обычно регистрируют «глобальные определения»:

  • Определения предметов (система инвентаря)

  • Валюты (экономическая система)

  • Глобальные значения конфигурации / константы

ao_start

Выполняется один раз при запуске сцены.

Обычно используется для:

  • Создания сущностей/префабов во время выполнения

  • Инициализации глобальных систем

  • Чтения сохранённых данных для всей игры

ao_update(dt)

Выполняется каждый кадр.

Обычно используется для:

  • Игровые таймеры, менеджеры волн

  • Логика спавна, зависящая от времени

  • Игровые правила, авторитетные на сервере

ao_late_update(dt)

Выполняется каждый кадр после ao_update.

Обычно используется для:

  • UI, который зависит от финальных позиций/состояния на кадр

  • Работа по «очистке» после обновлений

Жизненный цикл компонента (для каждой сущности)

Компоненты (включая Player) могут реализовывать:

  • ao_start()

  • ao_update(dt)

  • ao_late_update(dt)

  • ao_end()

  • ao_on_state_sync() (вызывается, когда сетевое состояние синхронизируется)

Пример:

Куда помещать код: правило-ориентир

  • Состояние/логика, специфичные для игрока: поместите это в Player (см. Добавление логики игрока)

  • Поведение сущностей, которое можно переиспользовать: поместите это в пользовательские компоненты (см. Сущности и компоненты)

  • Глобальная координация / правила: поместите это в глобальный жизненный цикл (ao_* процедуры)

Сервер vs локально

All Out автоматически синхронизирует игровое состояние с сервера на клиенты, но вам всё равно стоит оставлять только косметическую работу локальной.

Используйте:

  • this->is_local_or_server() для игрового UI + обработки ввода (работает на сервере + локальном клиенте)

  • this->is_local() для косметического UI/эффектов (работает только на локальном клиенте)

Это методы у Player_Base. Вызывайте их на ссылке на игрока или как is_local_or_server() / is_local() внутри Player метода (неявно) this).

Последнее обновление