SDK toolkit — RC15, API 0.1
Типизированные конфиги
config::enabled() не требует согласия и возвращает true только при storage
в manifest и явном разрешении пользователя. Остальные config-функции требуют
оба разрешения. Можно писать скрипты, которые работают без storage, а настройки
сохраняют только после согласия.
if(config::enabled()) {
config::set_bool("enabled",true);
config::set_int("mode",2);
config::set_float("radius",24.5f);
bool enabled=config::get_bool("enabled",false);
int mode=config::get_int("mode",0);
float radius=config::get_float("radius",20);
}
contains(key) и remove(key) проверяют/удаляют значение, remove возвращает
bool. Хранилище остаётся совместимым: 64 ключа, строковые значения до 1024 байт.
Typed setters сохраняют JSON-представление bool/int32/float как строку.
Getters принимают только ожидаемый тип (float также целое), иначе возвращают
fallback. Дробь не становится int, string "1" не становится bool. Переполнение
int32 и нечисловой текст дают fallback. Set_float и float fallback требуют
конечного числа; NaN/Infinity вызывают exception. Проверки диапазона предметной
области (например 0..100) делает скрипт. Изменения фиксируются при штатном unload;
неуспешная сессия не сохраняет изменённые значения.
Ограниченные фоновые задачи
uint id=jobs::submit("sha256","abc");
// On a later frame; never spin/wait in a callback:
if(jobs::state(id)=="complete") {
string result=jobs::body(id);
jobs::release(id);
}
submit(kind,payload) создаёт задачу на native-потоке, не на UI/callback-потоке.
Поддерживаются только sha256 (до 64 КиБ) и json_valid (до 8 КиБ, nesting ≤64).
Результат SHA256 — 64 lowercase hex символа; JSON — строка true/false.
Неподдерживаемая задача, превышение размера или 4 slots вызывает exception.
Состояния: pending/complete/error/unknown; error(id) сообщает ошибку.
У неизвестной задачи body/error пустые. release(id) освобождает результат
или отменяет его публикацию, возвращает false для неизвестного ID.
Активное вычисление завершается, но после отмены его результат не появляется.
Reload/Stop очищают все задачи; IDs не повторяются в рамках runtime-сессии.
Вход копируется; результаты не дают доступа к изменяемым данным native-потока.
Очередь не исполняет произвольные AngelScript functions и не даёт новых прав
на память, файлы или сеть. Нет обещания фиксированного времени ОС-планирования.
Необязательные .as помощники
Готовый пакет sdk/templates/toolkit содержит копии всех трёх helper-файлов.
Скопируйте каталог в examples, нажмите Refresh и выберите пакет → Load script.
Без storage consent он работает с временными значениями; включение storage
сохраняет выбранный размер и раскрытие секции. Цвет в этом примере не сохраняется.
Чтобы пользоваться помощниками в своём пакете, скопируйте нужные файлы из
sdk/helpers и перечислите их в modules. Они не являются встроенным API.
menu.as: Column для вертикального размещения, section для раскрытия,
Dropdown до 8 вариантов, ColorPicker с четырьмя RGBA sliders и preview.
Dropdown header рисуют с остальными элементами, popup — последним, чтобы
hit-test отдавал клики верхнему списку. Он закрывается выбором или header;
outside-click/keyboard navigation не реализованы. IDs составляются из prefix,
поэтому используйте короткие уникальные prefixes, не длиннее 48 символов.
Координаты и вместимость окна задаёт автор; Grid/PagedList/ScrollList описаны
отдельно. Для wheel-driven списка используйте SCROLL_LIST_RU.md.
freshness.as: Cooldown по time::seconds(), без busy wait; PositionSnapshot
проверяет конечность координат и возраст. Это локальное состояние скрипта,
не атомарный многопоточный снимок памяти другого процесса. Не публикуйте старые
данные как новые только для обновления timestamp.
coordinates.as: basis_degrees — X-forward/Y-right/Z-up при нулевых углах,
положительный pitch вверх; source_style_basis инвертирует pitch.
Quaternion rotation использует x/y/z/w и нормализует quaternion. Это чистые
формулы, не чтение камеры Unreal/Source/Unity. Конвенцию, handedness, units и
версию конкретного источника должен проверить автор адаптера.
Это расширение локального SDK, не закрытие всех возможных функций SDK Ech0.
RC17 добавил ограниченный textbox, RC18 — wheel/clip, RC19 — ScrollList.
Полный GUI layout/editor, WebSocket, arbitrary script threads и готовые
адаптеры произвольных игр не реализованы. Обход защиты отсутствует.