Математика и время
KILLSCRIPT предоставляет нативные userdata Vector2, Vector3 и
Quaternion. Их поля и методы уже типизированы, но TypeScript не знает, что
Lua умеет применять +, - и * к таким объектам. Математические методы SDK
выражают проверенные нативные операции, не притворяясь JavaScript-числами.
Операции с векторами и Quaternion
Заголовок раздела «Операции с векторами и Quaternion»import { quaternion, vector2, vector3,} from "@killscript/sdk/client";
const screenEnd = vector2.add(screenStart, screenOffset);
const target = vector3.add(origin, offset);const relative = vector3.subtract(target, origin);
const facing = quaternion.multiply(yawRotation, pitchRotation);const direction = quaternion.rotate(facing, Vector3.forward);| Helper | Сгенерированная операция |
|---|---|
vector2.add(a, b) | a + b |
vector2.subtract(a, b) | a - b |
vector3.add(a, b) | a + b |
vector3.subtract(a, b) | a - b |
quaternion.multiply(a, b) | a * b |
quaternion.rotate(rotation, vector) | rotation * vector |
Объект-обёртка не создаётся: во время компиляции вызов заменяется нативным
оператором. Нативные members вроде origin.Distance(target),
value.normalized, rotation.Angle(other) и Quaternion.lookRotation(...)
продолжайте использовать напрямую.
Чтение времени
Заголовок раздела «Чтение времени»Объект time возвращает те же значения, что нативный глобальный API Time, но через
короткие и безопасные для контекста имена:
import { time } from "@killscript/sdk/server";
const nowSeconds = time.seconds(); // Time.Secondsconst nowTick = time.tick(); // Time.Tickconst seconds = time.toSeconds(30);Серверные дедлайны и сравнения удобнее хранить в тиках: они напрямую следуют прогрессу симуляции.
const expiresAtTick = time.tick() + time.ceilTicks(2);
function hasExpired(): boolean { return time.tick() >= expiresAtTick;}Корректный перевод длительности
Заголовок раздела «Корректный перевод длительности»В текущей сборке нативный Time.SecondsToTick() обрезает значение возле границ
floating point. Проверка в игре показала:
Time.SecondsToTick(0.5) -> 29Time.SecondsToTick(1.0) -> 59Если задержка или дедлайн должны длиться не меньше заданного времени,
используйте time.ceilTicks(seconds):
const halfSecond = time.ceilTicks(0.5); // 30const oneSecond = time.ceilTicks(1); // 60time.toTicks() намеренно сохраняет обрезающее поведение игры и нужен только
когда требуется именно оно. time.ceilTicks() делит длительность на текущую
длину нативного тика и округляет вверх.
Если нужно запустить обработчик, а не сравнивать дедлайн вручную, используйте Планировщик.