GitBook Assistant Спросить chevron-down Скриптинг terminal Основы языкаДля целей этой документации мы используем CSL и среду выполнения/платформу вокруг него как взаимозаменяемые понятия
Эта страница — «сторона моделирования данных» CSL: примитивы, структуры/классы и шаблоны, которые вы будете использовать для аккуратного представления состояния игры.
Примитивные типы
Числа и булевы значения
Знаковые целые числа: s8, s16, s32, s64 (псевдоним: int == s64)
Беззнаковые целые числа: u8, u16, u32, u64 (псевдоним: uint == u64)
Числа с плавающей точкой: f32 (псевдоним: float), f64
Булевы значения: b8 (псевдоним: bool), b16, b32, b64
Копировать health : int = 100 ;
speed : float = 6.5 ;
is_dead : bool = false ; string постоянно используется для ID, имён и форматирования.
Копировать item_id := " sword " ;
log_info ( " подобран % " , { item_id }); v2, v3, v4 — это встроенные математические/данные типы:
Перечисления отлично подходят для читаемых полей «режим/состояние»:
Структуры (тип-значение)
Используйте структуры для «простых данных», которые вы хотите дешёво копировать (конфиги, небольшие блоки состояния, дескрипторы).
Когда использовать структуру
Объект-дескриптор/конфиг (*_Desc)
Небольшое, самодостаточное состояние, которое вы хотите копировать по значению
Данные, которые вы хотите вложить внутрь другого типа
Когда не стоит использовать структуру
Большое изменяемое состояние, разделяемое между несколькими системами (используйте класс)
Объекты «с идентичностью» (игроки, предметы, долго живущие объекты) (используйте класс)
Классы (ссылочные типы)
Классы — это ссылочные типы. Создавайте экземпляры с помощью new(...).
Вы можете наследовать от других структур/классов:
circle-exclamation
Используйте наследование, когда есть реальная связь «является». Для большинства игровых данных композиция (поля) проще и её легче поддерживать.
Массивы, срезы и динамические массивы
Вы увидите три распространённые формы:
Фиксированные массивы : [N]T (размер на этапе компиляции)
Срезы / управляемые массивы : []T (представление массива)
Динамические массивы : [..]T (изменяемый по размеру список)
Пример:
Полное руководство см. в Массивы и коллекции .
Передача по ссылке (ref)
Если процедуре нужно изменить значение, используйте ref:
Это особенно полезно для API в стиле «разметки», которые постепенно обрезают/уменьшают прямоугольник:
Приведение типов
Используйте expr.(T):
Типовой полиморфизм (процедуры в стиле обобщений)
CSL поддерживает полиморфные процедуры с использованием $ чтобы определить типы в месте вызова:
Типы как значения (typeid)
typeid — это значение, которое представляет тип во время выполнения и/или для полиморфных вызовов:
Практические рекомендации по моделированию
Состояние, специфичное для игрока, хранится в Player . Если оно должно различаться между игроками, оно не должно быть глобальным.
Для дескрипторов предпочитайте небольшие структуры а состояние времени выполнения храните в классах/компонентах.
Сохраняйте данные, авторитетные для сервера, авторитетными. Если это влияет на геймплей, не вычисляйте это только на клиенте.
Для шаблонов, специфичных для игрока, см. Добавление логики игрока . Для стороны ECS в мире см. Сущности и компоненты .
Последнее обновление 1 месяц назад