declare extern type userdata with end declare extern type lightuserdata with end declare extern type quaternion with x: number y: number z: number w: number end type Vec2 = {number} type Vec3 = {number} | vector type Vec4 = {number} type Quat = {number} | quaternion type Mat4 = {number} declare class Joint end declare class Shape end declare class Object function release(self) function type(self): string end type AudioMaterial = | "generic" | "brick" | "carpet" | "ceramic" | "concrete" | "glass" | "gravel" | "metal" | "plaster" | "rock" | "wood" type AudioShareMode = | "shared" | "exclusive" type AudioType = | "playback" | "capture" type Effect = | "absorption" | "attenuation" | "occlusion" | "reverb" | "spatialization" | "transmission" type TimeUnit = | "seconds" | "frames" type VolumeUnit = | "linear" | "db" declare class Source extends Object function clone(self): Source function getDirectivity(self): (number, number) function getDuration(self, unit: TimeUnit?): number function getOrientation(self): (number, number, number, number) function getPitch(self): number function getPose(self): (number, number, number, number, number, number, number) function getPosition(self): (number, number, number) function getRadius(self): number function getSound(self): Sound function getVolume(self, units: VolumeUnit?): number function isEffectEnabled(self, effect: Effect): boolean function isLooping(self): boolean function isPlaying(self): boolean function isSpatial(self): boolean function pause(self) function play(self): boolean function seek(self, position: number, unit: TimeUnit?) function setDirectivity(self, weight: number, power: number) function setEffectEnabled(self, effect: Effect, enable: boolean) function setLooping(self, loop: boolean) function setOrientation(self, angle: number, ax: number, ay: number, az: number) function setOrientation(self, orientation: Quat) function setPitch(self, pitch: number) function setPose(self, x: number, y: number, z: number, angle: number, ax: number, ay: number, az: number) function setPose(self, position: Vec3, orientation: Quat) function setPosition(self, x: number, y: number, z: number) function setPosition(self, position: Vec3) function setRadius(self, radius: number) function setVolume(self, volume: number, units: VolumeUnit?) function stop(self) function tell(self, unit: TimeUnit?): number end type AudioModule = { getAbsorption: () -> (number, number, number), getDevice: (type: AudioType?) -> (string | nil, userdata | nil), getDevices: (type: AudioType?) -> {}, getOrientation: () -> (number, number, number, number), getPose: () -> (number, number, number, number, number, number, number), getPosition: () -> (number, number, number), getSampleRate: () -> number, getSpatializer: () -> string, getVolume: (units: VolumeUnit?) -> number, isStarted: (type: AudioType?) -> boolean, newSource: & ((file: string | Blob, options: {}?) -> Source) & ((sound: Sound, options: {}?) -> Source), setAbsorption: (low: number, mid: number, high: number) -> (), setDevice: (type: AudioType?, id: userdata?, sink: Sound?, mode: AudioShareMode?) -> boolean, setGeometry: & ((vertices: {}, indices: {}, material: AudioMaterial?) -> boolean) & ((model: Model, material: AudioMaterial?) -> boolean), setOrientation: & ((angle: number, ax: number, ay: number, az: number) -> ()) & ((orientation: Quat) -> ()), setPose: & ((x: number, y: number, z: number, angle: number, ax: number, ay: number, az: number) -> ()) & ((position: Vec3, orientation: Quat) -> ()), setPosition: & ((x: number, y: number, z: number) -> ()) & ((position: Vec3) -> ()), setVolume: (volume: number, units: VolumeUnit?) -> (), start: (type: AudioType?) -> boolean, stop: (type: AudioType?) -> boolean, } type AnimationProperty = | "translation" | "rotation" | "scale" | "weights" type AttributeType = | "i8" | "u8" | "i16" | "u16" | "i32" | "u32" | "f32" type ChannelLayout = | "mono" | "stereo" | "ambisonic" type DefaultAttribute = | "position" | "normal" | "uv" | "color" | "tangent" | "joints" | "weights" type ModelDrawMode = | "points" | "lines" | "linestrip" | "lineloop" | "strip" | "triangles" | "fan" type SampleFormat = | "f32" | "i16" type SmoothMode = | "step" | "linear" | "cubic" type TextureFormat = | "r8" | "rg8" | "rgba8" | "bgra8" | "r16" | "rg16" | "rgba16" | "r16f" | "rg16f" | "rgba16f" | "r32f" | "rg32f" | "rgba32f" | "rgb565" | "rgb5a1" | "rgb10a2" | "rg11b10f" | "d16" | "d24" | "d24s8" | "d32f" | "d32fs8" | "bc1" | "bc2" | "bc3" | "bc4u" | "bc4s" | "bc5u" | "bc5s" | "bc6uf" | "bc6sf" | "bc7" | "astc4x4" | "astc5x4" | "astc5x5" | "astc6x5" | "astc6x6" | "astc8x5" | "astc8x6" | "astc8x8" | "astc10x5" | "astc10x6" | "astc10x8" | "astc10x10" | "astc12x10" | "astc12x12" declare class Blob extends Object function getSize(self): number function getName(self): string function getPointer(self): userdata function getString(self, offset: number?, size: number?): string function getI8(self, offset: number?, count: number?): number function getU8(self, offset: number?, count: number?): number function getI16(self, offset: number?, count: number?): number function getU16(self, offset: number?, count: number?): number function getI32(self, offset: number?, count: number?): number function getU32(self, offset: number?, count: number?): number function getF32(self, offset: number?, count: number?): number function getF64(self, offset: number?, count: number?): number function setI8(self, offset: number, ...: number) function setI8(self, offset: number, table: {number}) function setU8(self, offset: number, ...: number) function setU8(self, offset: number, table: {number}) function setI16(self, offset: number, ...: number) function setI16(self, offset: number, table: {number}) function setU16(self, offset: number, ...: number) function setU16(self, offset: number, table: {number}) function setI32(self, offset: number, ...: number) function setI32(self, offset: number, table: {number}) function setU32(self, offset: number, ...: number) function setU32(self, offset: number, table: {number}) function setF32(self, offset: number, ...: number) function setF32(self, offset: number, table: {number}) function setF64(self, offset: number, ...: number) function setF64(self, offset: number, table: {number}) end declare class Image extends Object function encode(self): Blob function getBlob(self): Blob function getDimensions(self): (number, number) function getFormat(self): TextureFormat function getHeight(self): number function getPixel(self, x: number, y: number): (number, number, number, number) function getPointer(self, level: number?, layer: number?): userdata function getWidth(self): number function mapPixel(self, callback: () -> (), x: number?, y: number?, w: number?, h: number?) function paste(self, source: Image, x: number?, y: number?, fromX: number?, fromY: number?, width: number?, height: number?) function setPixel(self, x: number, y: number, r: number, g: number, b: number, a: number?) end declare class ModelData extends Object function getAnimationChannelCount(self, animation: number | string): number function getAnimationCount(self): number function getAnimationDuration(self, animation: string | number): number function getAnimationKeyframe(self, animation: number, channel: number, keyframe: number): (number, number) function getAnimationKeyframeCount(self, animation: string | number, channel: number): number function getAnimationName(self, index: number): string | nil function getAnimationNode(self, animation: number, channel: number): number function getAnimationProperty(self, animation: string | number, channel: number): AnimationProperty function getAnimationSmoothMode(self, animation: string | number, channel: number): SmoothMode function getBlendShapeCount(self): number function getBlendShapeName(self, index: number): string function getBlob(self, index: number): Blob function getBlobCount(self): number function getBoundingBox(self): (number, number, number, number, number, number) function getBoundingSphere(self): (number, number, number, number) function getCenter(self): (number, number, number) function getDepth(self): number function getDimensions(self): (number, number, number) function getHeight(self): number function getImage(self, index: number): Image function getImageCount(self): number function getMaterial(self, material: number): {} function getMaterialCount(self): number function getMaterialName(self, index: number): string function getMeshCount(self): number function getMeshDrawMode(self, mesh: number): ModelDrawMode function getMeshIndex(self, mesh: number, index: number): number function getMeshIndexCount(self, mesh: number): number function getMeshIndexFormat(self, mesh: number): (AttributeType, number, number, number) function getMeshMaterial(self, mesh: number): number function getMeshVertex(self, mesh: number, vertex: number): number function getMeshVertexCount(self, mesh: number): number function getMeshVertexFormat(self, mesh: number): {} function getMetadata(self): string function getNodeChildren(self, node: string | number): {number} function getNodeCount(self): number function getNodeMeshes(self, node: string | number): {} function getNodeName(self, index: number): string function getNodeOrientation(self, node: string | number): (number, number, number, number) function getNodeParent(self, node: string | number): number function getNodePose(self, node: string | number): (number, number, number, number, number, number, number) function getNodePosition(self, node: string | number): (number, number, number) function getNodeScale(self, node: string | number): (number, number, number) function getNodeSkin(self, node: string | number): number function getNodeTransform(self, node: string | number): (number, number, number, number, number, number, number, number, number, number) function getRootNode(self): number function getSkinCount(self): number function getSkinInverseBindMatrix(self, skin: number, joint: number): number function getSkinJoints(self, skin: number): {} function getTriangleCount(self): number function getTriangles(self): ({}, {}) function getVertexCount(self): number function getWidth(self): number end declare class Rasterizer extends Object function getAdvance(self, glyph: string | number): number function getAscent(self): number function getBearing(self, glyph: string | number): number function getBoundingBox(self, glyph: string | number): (number, number, number, number) function getBoundingBox(self): (number, number, number, number) function getCurves(self, glyph: string | number, three: boolean): {} function getDescent(self): number function getDimensions(self, glyph: string): (number, number) function getDimensions(self): (number, number) function getFontSize(self): number function getGlyphCount(self): number function getHeight(self, glyph: string | number): number function getHeight(self): number function getKerning(self, first: string | number, second: string | number): number function getLeading(self): number function getWidth(self, glyph: string | number): number function getWidth(self): number function hasGlyphs(self, ...: string | number): boolean function newImage(self, glyph: string | number, spread: number?, padding: number?): Image end declare class Sound extends Object function getBlob(self): Blob function getByteStride(self): number function getCapacity(self): number function getChannelCount(self): number function getChannelLayout(self): ChannelLayout function getDuration(self): number function getFormat(self): SampleFormat function getFrameCount(self): number function getFrames(self, count: number?, srcOffset: number?): ({number}, number) function getFrames(self, t: {}, count: number?, srcOffset: number?, dstOffset: number?): ({number}, number) function getFrames(self, blob: Blob, count: number?, srcOffset: number?, dstOffset: number?): number function getFrames(self, sound: Sound, count: number?, srcOffset: number?, dstOffset: number?): number function getSampleCount(self): number function getSampleRate(self): number function isCompressed(self): boolean function isStream(self): boolean function setFrames(self, source: {} | Blob | Sound, count: number?, dstOffset: number?, srcOffset: number?): number end type DataModule = { newBlob: & ((size: number, name: string?) -> Blob) & ((contents: string, name: string?) -> Blob) & ((source: Blob, name: string?) -> Blob), newImage: & ((file: string | Blob) -> Image) & ((width: number, height: number, format: TextureFormat?, data: Blob?) -> Image) & ((source: Image) -> Image), newModelData: (file: string | Blob) -> ModelData, newRasterizer: & ((file: string | Blob, size: number?) -> Rasterizer) & ((size: number?) -> Rasterizer), newSound: & ((frames: number, format: SampleFormat?, channels: ChannelLayout?, sampleRate: number?, contents: Blob | string | nil | nil) -> Sound) & ((file: string | Blob, decode: boolean?) -> Sound), } type DisplayType = | "headset" | "window" type KeyCode = | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "space" | "return" | "tab" | "escape" | "backspace" | "up" | "down" | "left" | "right" | "home" | "end" | "pageup" | "pagedown" | "insert" | "delete" | "f1" | "f2" | "f3" | "f4" | "f5" | "f6" | "f7" | "f8" | "f9" | "f10" | "f11" | "f12" | "`" | "-" | "=" | "[" | "]" | "\\" | ";" | "'" | "," | "." | "/" | "kp0" | "kp1" | "kp2" | "kp3" | "kp4" | "kp5" | "kp6" | "kp7" | "kp8" | "kp9" | "kp." | "kp/" | "kp*" | "kp-" | "kp+" | "kpenter" | "kp=" | "lctrl" | "lshift" | "lalt" | "lgui" | "rctrl" | "rshift" | "ralt" | "rgui" | "capslock" | "scrolllock" | "numlock" type EventModule = { clear: () -> (), poll: () -> (() -> ()), push: (name: string, ...any) -> (), quit: (code: number?) -> (), restart: () -> (), } type FileAction = | "create" | "delete" | "modify" | "rename" type OpenMode = | "r" | "w" | "a" declare class File extends Object function getMode(self): OpenMode function getPath(self): string function getSize(self): (number, string) function isEOF(self): boolean function read(self, bytes: number): (string, number) function seek(self, offset: number) function tell(self): number function write(self, string: string, size: number?): (boolean, string) function write(self, blob: Blob, size: number?): (boolean, string) end type FilesystemModule = { append: (filename: string, content: string | Blob) -> (boolean, string | nil), createDirectory: (path: string) -> (boolean, string | nil), getAppdataDirectory: () -> string | nil, getDirectoryItems: (path: string) -> {string}, getExecutablePath: () -> string | nil, getIdentity: () -> string | nil, getLastModified: (path: string) -> (number | nil, string | nil), getRealDirectory: (path: string) -> string | nil, getRequirePath: () -> string, getSaveDirectory: () -> string, getSize: (file: string) -> (number | nil, string | nil), getSource: () -> string | nil, getUserDirectory: () -> string | nil, getWorkingDirectory: () -> string | nil, isDirectory: (path: string) -> boolean, isFile: (path: string) -> boolean, isFused: () -> boolean, load: (filename: string, mode: string?) -> (() -> ()), mount: (path: string, mountpoint: string?, append: boolean?, root: string?) -> (boolean, string | nil), newBlob: (filename: string) -> Blob, newFile: (path: string, mode: OpenMode) -> (File, string), read: (filename: string) -> (string | nil, string | nil), remove: (path: string) -> (boolean, string | nil), setIdentity: (identity: string) -> (), setRequirePath: (path: string?) -> (), unmount: (path: string) -> boolean, unwatch: () -> (), watch: () -> (), write: (filename: string, content: string | Blob) -> (boolean, string), } type BlendAlphaMode = | "alphamultiply" | "premultiplied" type BlendMode = | "alpha" | "add" | "subtract" | "multiply" | "lighten" | "darken" | "screen" | "none" type CompareMode = | "none" | "equal" | "notequal" | "less" | "lequal" | "greater" | "gequal" type CullMode = | "none" | "back" | "front" type DataLayout = | "packed" | "std140" | "std430" type DataType = | "i8x4" | "u8x4" | "sn8x4" | "un8x4" | "sn10x3" | "un10x3" | "i16" | "i16x2" | "i16x4" | "u16" | "u16x2" | "u16x4" | "sn16x2" | "sn16x4" | "un16x2" | "un16x4" | "i32" | "i32x2" | "i32x3" | "i32x4" | "u32" | "u32x2" | "u32x3" | "u32x4" | "f16x2" | "f16x4" | "f32" | "f32x2" | "f32x3" | "f32x4" | "mat2" | "mat3" | "mat4" | "index16" | "index32" type DefaultShader = | "unlit" | "normal" | "font" | "cubemap" | "equirect" | "fill" type DrawMode = | "points" | "lines" | "triangles" type DrawStyle = | "fill" | "line" type FilterMode = | "nearest" | "linear" | "cubic" type HorizontalAlign = | "left" | "center" | "right" type MeshStorage = | "cpu" | "gpu" type OriginType = | "root" | "parent" type ShaderStage = | "vertex" | "fragment" | "compute" type ShaderType = | "graphics" | "compute" type StackType = | "transform" | "state" type StencilAction = | "keep" | "zero" | "replace" | "increment" | "decrement" | "incrementwrap" | "decrementwrap" | "invert" type TextureFeature = | "sample" | "render" | "storage" | "blit" | "cubic" type TextureType = | "2d" | "3d" | "cube" | "array" type TextureUsage = | "sample" | "render" | "storage" | "transfer" type VerticalAlign = | "top" | "middle" | "bottom" type Winding = | "clockwise" | "counterclockwise" type WrapMode = | "clamp" | "repeat" | "mirror" | "border" declare class Buffer extends Object function clear(self, offset: number?, extent: number?, value: number?) function getData(self, index: number?, count: number?): {} function getFormat(self): {} function getLength(self): number function getSize(self): number function getStride(self): number function mapData(self, offset: number?, extent: number?): lightuserdata function newReadback(self, offset: number?, extent: number?): Readback function setData(self, table: {}, destinationIndex: number?, sourceIndex: number?, count: number?) function setData(self, ...: number) function setData(self, vector: any) function setData(self, blob: Blob, destinationOffset: number?, sourceOffset: number?, size: number?) function setData(self, buffer: Buffer, destinationOffset: number?, sourceOffset: number?, size: number?) end declare class Font extends Object function getAscent(self): number function getDescent(self): number function getHeight(self): number function getKerning(self, first: string | number, second: string | number): number function getLineSpacing(self): number function getLines(self, string: string, wrap: number): {string} function getLines(self, strings: {}, wrap: number): {string} function getPixelDensity(self): number function getRasterizer(self): Rasterizer function getVertices(self, string: string, wrap: number?, halign: HorizontalAlign, valign: VerticalAlign): ({number}, Material) function getVertices(self, strings: {}, wrap: number?, halign: HorizontalAlign, valign: VerticalAlign): ({number}, Material) function getWidth(self, string: string): number function getWidth(self, strings: {}): number function setLineSpacing(self, spacing: number) function setPixelDensity(self, density: number) function setPixelDensity(self) end declare class Material extends Object function getProperties(self): {} end declare class Mesh extends Object function computeBoundingBox(self): boolean function getBoundingBox(self): (number, number, number, number, number, number) function getDrawMode(self): DrawMode function getDrawRange(self): (number, number, number) function getDrawRange(self) function getIndexBuffer(self): Buffer function getIndices(self): {number} function getMaterial(self): Material function getVertexBuffer(self): Buffer function getVertexCount(self): number function getVertexFormat(self): {} function getVertexStride(self): number function getVertices(self, index: number?, count: number?): {{number}} function setBoundingBox(self, minx: number, maxx: number, miny: number, maxy: number, minz: number, maxz: number) function setBoundingBox(self) function setDrawMode(self, mode: DrawMode) function setDrawRange(self, start: number, count: number, offset: number) function setDrawRange(self) function setIndexBuffer(self, buffer: Buffer) function setIndices(self, t: {number}) function setIndices(self, blob: Blob, type: DataType) function setIndices(self) function setMaterial(self, material: Material) function setMaterial(self, texture: Texture) function setVertices(self, vertices: {{number}}, index: number?, count: number?) function setVertices(self, blob: Blob, index: number?, count: number?) end declare class Model extends Object function animate(self, animation: string, time: number, blend: number?) function clone(self): Model function getAnimationCount(self): number function getAnimationDuration(self, animation: string | number): number function getAnimationName(self, index: number): string | nil function getBlendShapeCount(self): number function getBlendShapeName(self, index: number): string function getBlendShapeWeight(self, blendshape: string | number): number function getBoundingBox(self): (number, number, number, number, number, number) function getBoundingSphere(self): (number, number, number, number) function getCenter(self): (number, number, number) function getData(self): ModelData function getDepth(self): number function getDimensions(self): (number, number, number) function getHeight(self): number function getIndexBuffer(self): Buffer function getMaterial(self, which: string | number): Material function getMaterialCount(self): number function getMaterialName(self, index: number): string function getMesh(self, index: number): Mesh function getMeshCount(self): number function getMetadata(self): string function getNodeChildren(self, node: string | number): {number} function getNodeCount(self): number function getNodeName(self, index: number): string function getNodeOrientation(self, node: string | number, origin: OriginType?): (number, number, number, number) function getNodeParent(self, node: number): number function getNodePose(self, node: string | number, origin: OriginType?): (number, number, number, number, number, number, number) function getNodePosition(self, node: string | number, space: OriginType?): (number, number, number) function getNodeScale(self, node: string | number, origin: OriginType?): (number, number, number) function getNodeTransform(self, node: string | number, origin: OriginType?): (number, number, number, number, number, number, number, number, number, number) function getRootNode(self): number function getTexture(self, index: number): Texture function getTextureCount(self): number function getTriangleCount(self): number function getTriangles(self): ({number}, {number}) function getVertexBuffer(self): Buffer function getVertexCount(self): number function getWidth(self): number function hasJoints(self): boolean function resetBlendShapes(self) function resetNodeTransforms(self) function setBlendShapeWeight(self, blendshape: string | number, weight: number) function setNodeOrientation(self, node: string | number, angle: number, ax: number, ay: number, az: number, blend: number?) function setNodeOrientation(self, node: string | number, orientation: Quat, blend: number?) function setNodePose(self, node: string | number, x: number, y: number, z: number, angle: number, ax: number, ay: number, az: number, blend: number?) function setNodePose(self, node: string | number, position: Vec3, orientation: Quat, blend: number?) function setNodePosition(self, node: string | number, x: number, y: number, z: number, blend: number?) function setNodePosition(self, node: string | number, position: Vec3, blend: number?) function setNodeScale(self, node: string | number, sx: number, sy: number, sz: number, blend: number?) function setNodeScale(self, node: string | number, scale: Vec3, blend: number?) function setNodeTransform(self, node: string | number, x: number, y: number, z: number, sx: number, sy: number, sz: number, angle: number, ax: number, ay: number, az: number, blend: number?) function setNodeTransform(self, node: string | number, position: Vec3, scale: Vec3, orientation: Quat, blend: number?) function setNodeTransform(self, node: string | number, transform: Mat4, blend: number?) end declare class Pass extends Object function barrier(self) function beginTally(self): number function box(self, x: number?, y: number?, z: number?, width: number?, height: number?, depth: number?, angle: number?, ax: number?, ay: number?, az: number?, style: DrawStyle?) function box(self, position: Vec3, size: Vec3, orientation: Quat, style: DrawStyle?) function box(self, transform: Mat4, style: DrawStyle?) function capsule(self, x: number?, y: number?, z: number?, radius: number?, length: number?, angle: number?, ax: number?, ay: number?, az: number?, segments: number?) function capsule(self, position: Vec3, radius: number?, length: number?, orientation: Quat, segments: number?) function capsule(self, transform: Mat4, segments: number?) function capsule(self, p1: Vec3, p2: Vec3, radius: number?, segments: number?) function circle(self, x: number?, y: number?, z: number?, radius: number?, angle: number?, ax: number?, ay: number?, az: number?, style: DrawStyle?, angle1: number?, angle2: number?, segments: number?) function circle(self, position: Vec3, radius: number?, orientation: Quat, style: DrawStyle?, angle1: number?, angle2: number?, segments: number?) function circle(self, transform: Mat4, style: DrawStyle?, angle1: number?, angle2: number?, segments: number?) function compute(self, x: number?, y: number?, z: number?) function compute(self, buffer: Buffer, offset: number?) function cone(self, x: number?, y: number?, z: number?, radius: number?, length: number?, angle: number?, ax: number?, ay: number?, az: number?, segments: number?) function cone(self, position: Vec3, radius: number?, length: number?, orientation: Quat, segments: number?) function cone(self, transform: Mat4, segments: number?) function cone(self, p1: Vec3, p2: Vec3, radius: number?, segments: number?) function cube(self, x: number?, y: number?, z: number?, size: number?, angle: number?, ax: number?, ay: number?, az: number?, style: DrawStyle?) function cube(self, position: Vec3, size: number?, orientation: Quat, style: DrawStyle?) function cube(self, transform: Mat4, style: DrawStyle?) function cylinder(self, x: number?, y: number?, z: number?, radius: number?, length: number?, angle: number?, ax: number?, ay: number?, az: number?, capped: boolean?, angle1: number?, angle2: number?, segments: number?) function cylinder(self, position: Vec3, radius: number?, length: number?, orientation: Quat, capped: boolean?, angle1: number?, angle2: number?, segments: number?) function cylinder(self, transform: Mat4, capped: boolean?, angle1: number?, angle2: number?, segments: number?) function cylinder(self, p1: Vec3, p2: Vec3, radius: number?, capped: boolean?, angle1: number?, angle2: number?, segments: number?) function draw(self, object: Model | Mesh | Texture, x: number?, y: number?, z: number?, scale: number?, angle: number?, ax: number?, ay: number?, az: number?, instances: number?) function draw(self, object: Model | Mesh | Texture, position: Vec3, scale3: Vec3, orientation: Quat, instances: number?) function draw(self, object: Model | Mesh | Texture, transform: Mat4, instances: number?) function fill(self, texture: Texture) function fill(self) function finishTally(self): number function getCanvas(self): {} function getCanvas(self) function getClear(self): {} function getDimensions(self): (number, number) function getHeight(self): number function getLabel(self): string function getProjection(self, view: number): (number, number, number, number) function getProjection(self, view: number, matrix: Mat4): Mat4 function getStats(self): {} function getTallyBuffer(self): (Buffer, number) function getViewCount(self): number function getViewPose(self, view: number): (number, number, number, number, number, number, number) function getViewPose(self, view: number, matrix: Mat4, invert: boolean): Mat4 function getWidth(self): number function line(self, x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, ...: number) function line(self, t: {number | Vec3}) function line(self, v1: Vec3, v2: Vec3, ...: Vec3) function mesh(self, vertices: Buffer?, x: number?, y: number?, z: number?, scale: number?, angle: number?, ax: number?, ay: number?, az: number?, start: number?, count: number?, instances: number?) function mesh(self, vertices: Buffer?, position: Vec3, scales: Vec3, orientation: Quat, start: number?, count: number?, instances: number?) function mesh(self, vertices: Buffer?, transform: Mat4, start: number?, count: number?, instances: number?) function mesh(self, vertices: Buffer?, indices: Buffer, x: number?, y: number?, z: number?, scale: number?, angle: number?, ax: number?, ay: number?, az: number?, start: number?, count: number?, instances: number?, base: number?) function mesh(self, vertices: Buffer?, indices: Buffer, position: Vec3, scales: Vec3, orientation: Quat, start: number?, count: number?, instances: number?, base: number?) function mesh(self, vertices: Buffer?, indices: Buffer, transform: Mat4, start: number?, count: number?, instances: number?, base: number?) function mesh(self, vertices: Buffer?, indices: Buffer, draws: Buffer, drawcount: number?, offset: number?, stride: number?) function origin(self) function plane(self, x: number?, y: number?, z: number?, width: number?, height: number?, angle: number?, ax: number?, ay: number?, az: number?, style: DrawStyle?, columns: number?, rows: number?) function plane(self, position: Vec3, size: Vec2, orientation: Quat, style: DrawStyle?, columns: number?, rows: number?) function plane(self, transform: Mat4, style: DrawStyle?, columns: number?, rows: number?) function points(self, x: number, y: number, z: number, ...: any) function points(self, t: {number | Vec3}) function points(self, v: Vec3, ...: any) function polygon(self, x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, ...: any) function polygon(self, t: {number | Vec3}) function polygon(self, v1: Vec3, v2: Vec3, ...: any) function pop(self, stack: StackType?) function push(self, stack: StackType?) function reset(self) function rotate(self, angle: number, ax: number, ay: number, az: number) function rotate(self, rotation: Quat) function roundrect(self, x: number?, y: number?, z: number?, width: number?, height: number?, thickness: number?, angle: number?, ax: number?, ay: number?, az: number?, radius: number?, segments: number?) function roundrect(self, position: Vec3, size: Vec3, orientation: Quat, radius: number?, segments: number?) function roundrect(self, transform: Mat4, radius: number?, segments: number?) function scale(self, sx: number, sy: number?, sz: number?) function scale(self, scale: Vec3) function send(self, name: string, buffer: Buffer, offset: number?, extent: number?) function send(self, name: string, texture: Texture) function send(self, name: string, sampler: Sampler) function send(self, name: string, data: any) function setAlphaToCoverage(self, enable: boolean) function setBlendMode(self, blend: BlendMode, alphaBlend: BlendAlphaMode) function setBlendMode(self) function setBlendMode(self, index: number, blend: BlendMode, alphaBlend: BlendAlphaMode) function setBlendMode(self, index: number) function setCanvas(self, ...: Texture) function setCanvas(self, canvas: {}) function setCanvas(self) function setClear(self, hex: number) function setClear(self, r: number, g: number, b: number, a: number?) function setClear(self, clear: boolean) function setClear(self, t: {}) function setColor(self, r: number, g: number, b: number, a: number?) function setColor(self, t: {number}) function setColor(self, hex: number, a: number?) function setColorWrite(self, enable: boolean) function setColorWrite(self, r: boolean, g: boolean, b: boolean, a: boolean) function setColorWrite(self, index: number, enable: boolean) function setColorWrite(self, index: number, r: boolean, g: boolean, b: boolean, a: boolean) function setCullMode(self, mode: CullMode) function setCullMode(self) function setDepthClamp(self, enable: boolean) function setDepthOffset(self, offset: number?, sloped: number?) function setDepthTest(self, test: CompareMode) function setDepthTest(self) function setDepthWrite(self, write: boolean) function setFaceCull(self, mode: CullMode) function setFaceCull(self) function setFont(self, font: Font) function setMaterial(self, material: Texture | Material) function setMaterial(self) function setMeshMode(self, mode: DrawMode) function setProjection(self, view: number, left: number, right: number, up: number, down: number, near: number?, far: number?) function setProjection(self, view: number, matrix: Mat4) function setSampler(self, sampler: Sampler | FilterMode | nil) function setScissor(self, x: number, y: number, w: number, h: number) function setScissor(self) function setShader(self, shader: Shader | DefaultShader) function setShader(self) function setStencilTest(self, test: CompareMode, value: number, mask: number?) function setStencilTest(self) function setStencilWrite(self, action: StencilAction | {StencilAction}, value: number?, mask: number?) function setStencilWrite(self) function setTallyBuffer(self, buffer: Buffer, offset: number) function setTallyBuffer(self) function setViewCull(self, enable: boolean) function setViewPose(self, view: number, x: number, y: number, z: number, angle: number, ax: number, ay: number, az: number) function setViewPose(self, view: number, position: Vec3, orientation: Quat) function setViewPose(self, view: number, matrix: Mat4, inverted: boolean) function setViewport(self, x: number, y: number, w: number, h: number, dmin: number?, dmax: number?) function setViewport(self) function setWinding(self, winding: Winding) function setWireframe(self, enable: boolean) function skybox(self, skybox: Texture) function skybox(self) function sphere(self, x: number?, y: number?, z: number?, radius: number?, angle: number?, ax: number?, ay: number?, az: number?, longitudes: number?, latitudes: number?) function sphere(self, position: Vec3, radius: number?, orientation: Quat, longitudes: number?, latitudes: number?) function sphere(self, transform: Mat4, longitudes: number?, latitudes: number?) function text(self, text: string, x: number?, y: number?, z: number?, scale: number?, angle: number?, ax: number?, ay: number?, az: number?, wrap: number?, halign: HorizontalAlign?, valign: VerticalAlign?) function text(self, text: string, position: Vec3, scale: number?, orientation: Quat, wrap: number?, halign: HorizontalAlign?, valign: VerticalAlign?) function text(self, text: string, transform: Mat4, wrap: number?, halign: HorizontalAlign?, valign: VerticalAlign?) function text(self, colortext: {}, x: number?, y: number?, z: number?, scale: number?, angle: number?, ax: number?, ay: number?, az: number?, wrap: number?, halign: HorizontalAlign?, valign: VerticalAlign?) function text(self, colortext: {}, position: Vec3, scale: number?, orientation: Quat, wrap: number?, halign: HorizontalAlign?, valign: VerticalAlign?) function text(self, colortext: {}, transform: Mat4, wrap: number?, halign: HorizontalAlign?, valign: VerticalAlign?) function torus(self, x: number?, y: number?, z: number?, radius: number?, thickness: number?, angle: number?, ax: number?, ay: number?, az: number?, tsegments: number?, psegments: number?) function torus(self, position: Vec3, scale: Vec3, orientation: Quat, tsegments: number?, psegments: number?) function torus(self, transform: Mat4, tsegments: number?, psegments: number?) function transform(self, x: number, y: number, z: number, sx: number, sy: number, sz: number, angle: number, ax: number, ay: number, az: number) function transform(self, translation: Vec3, scale: Vec3, rotation: Quat) function transform(self, transform: Mat4) function translate(self, x: number, y: number, z: number) function translate(self, translation: Vec3) end declare class Readback extends Object function getBlob(self): Blob function getData(self): {} function getImage(self): Image function isComplete(self): boolean function wait(self): boolean end declare class Sampler extends Object function getAnisotropy(self): number function getCompareMode(self): CompareMode function getFilter(self): (FilterMode, FilterMode, FilterMode) function getMipmapRange(self): (number, number) function getWrap(self): (WrapMode, WrapMode, WrapMode) end declare class Shader extends Object function clone(self, source: Shader, flags: {}): Shader function getBufferFormat(self, name: string): ({}, number) function getLabel(self): string function getType(self): ShaderType function getWorkgroupSize(self): (number, number, number) function hasAttribute(self, name: string): boolean function hasAttribute(self, location: number): boolean function hasStage(self, stage: ShaderStage): boolean function hasVariable(self, name: string): boolean end declare class Texture extends Object function clear(self) function clear(self, hex: number, layer: number?, layerCount: number?, mipmap: number?, mipmapCount: number?) function clear(self, r: number, g: number, b: number, a: number, layer: number?, layerCount: number?, mipmap: number?, mipmapCount: number?) function clear(self, t: {number}, layer: number?, layerCount: number?, mipmap: number?, mipmapCount: number?) function clear(self, v3: Vec3, layer: number?, layerCount: number?, mipmap: number?, mipmapCount: number?) function clear(self, v4: Vec4, layer: number?, layerCount: number?, mipmap: number?, mipmapCount: number?) function generateMipmaps(self, base: number?, count: number?) function getDimensions(self): (number, number, number) function getFormat(self): (TextureFormat, boolean) function getHeight(self): number function getLabel(self): string function getLayerCount(self): number function getMipmapCount(self): number function getPixels(self, x: number?, y: number?, layer: number?, mipmap: number?, width: number?, height: number?): Image function getSampleCount(self): number function getSampler(self): Sampler function getType(self): TextureType function getWidth(self): number function hasUsage(self, ...: TextureUsage): boolean function newReadback(self, x: number?, y: number?, layer: number?, mipmap: number?, width: number?, height: number?): Readback function setPixels(self, source: Texture | Image, dstx: number?, dsty: number?, dstlayer: number?, dstmipmap: number?, srcx: number?, srcy: number?, srclayer: number?, srcmipmap: number?, width: number?, height: number?, layers: number?) function setSampler(self, mode: FilterMode) function setSampler(self, sampler: Sampler) function setSampler(self) end type GraphicsModule = { compileShader: (stage: ShaderStage, source: string | Blob) -> Blob, getBackgroundColor: () -> (number, number, number, number), getDefaultFont: () -> Font, getDevice: () -> {}, getFeatures: () -> {}, getLimits: () -> {}, getWindowPass: () -> Pass | nil, isFormatSupported: (format: TextureFormat, ...TextureFeature) -> (boolean, boolean), isHDR: () -> boolean, isTimingEnabled: () -> boolean, newBuffer: & ((size: number) -> Buffer) & ((blob: Blob) -> Buffer) & ((format: {} | DataType, length: number?) -> Buffer) & ((format: {} | DataType, data: {} | Blob) -> Buffer), newFont: & ((file: string | Blob, size: number?, spread: number?) -> Font) & ((size: number?, spread: number?) -> Font) & ((rasterizer: Rasterizer, spread: number?) -> Font), newMaterial: (properties: {}) -> Material, newMesh: & ((count: number, storage: MeshStorage?) -> Mesh) & ((vertices: {}, storage: MeshStorage?) -> Mesh) & ((blob: Blob, storage: MeshStorage?) -> Mesh) & ((format: {}, count: number, storage: MeshStorage?) -> Mesh) & ((format: {}, vertices: {}, storage: MeshStorage?) -> Mesh) & ((format: {}, blob: Blob, storage: MeshStorage?) -> Mesh) & ((buffer: Buffer) -> Mesh), newModel: & ((file: string | Blob, options: {}?) -> Model) & ((modelData: ModelData, options: {}?) -> Model), newPass: & ((...Texture) -> Pass) & ((canvas: {}) -> Pass) & (() -> Pass), newSampler: (parameters: {}) -> Sampler, newShader: & ((vertex: string | DefaultShader | Blob, fragment: string | DefaultShader | Blob, options: {}?) -> Shader) & ((compute: string | Blob, options: {}?) -> Shader) & ((defaultshader: DefaultShader, options: {}?) -> Shader), newTexture: & ((file: string | Blob, options: {}?) -> Texture) & ((width: number, height: number, options: {}?) -> Texture) & ((width: number, height: number, layers: number, options: {}?) -> Texture) & ((image: string, options: {}?) -> Texture) & ((images: {string | Blob | Image}, options: {}?) -> Texture), newTextureView: (parent: Texture, options: {}?) -> Texture, present: () -> (), setBackgroundColor: & ((r: number, g: number, b: number, a: number?) -> ()) & ((hex: number, a: number?) -> ()) & ((table: {number}) -> ()), setTimingEnabled: (enable: boolean) -> (), submit: & ((...Pass | boolean | nil) -> boolean) & ((t: {Pass | boolean}) -> boolean), wait: () -> (), } type Device = | "head" | "floor" | "left" | "right" | "hand/left" | "hand/right" | "hand/left/grip" | "hand/right/grip" | "hand/left/point" | "hand/right/point" | "hand/left/pinch" | "hand/right/pinch" | "hand/left/poke" | "hand/right/poke" | "elbow/left" | "elbow/right" | "shoulder/left" | "shoulder/right" | "chest" | "waist" | "knee/left" | "knee/right" | "foot/left" | "foot/right" | "camera" | "keyboard" | "stylus" | "eye/left" | "eye/right" | "eye/gaze" type DeviceAxis = | "trigger" | "thumbstick" | "thumbrest" | "touchpad" | "grip" | "nib" type DeviceButton = | "trigger" | "thumbstick" | "thumbrest" | "touchpad" | "grip" | "menu" | "a" | "b" | "x" | "y" | "nib" type FoveationLevel = | "low" | "medium" | "high" type HeadsetDriver = | "simulator" | "openxr" type HeadsetOrigin = | "head" | "floor" type PassthroughMode = | "opaque" | "blend" | "add" declare class Layer extends Object function getColor(self): (number, number, number, number) function getCurve(self): number function getDimensions(self): (number, number) function getOrientation(self): (number, number, number, number) function getPass(self): Pass function getPose(self): (number, number, number, number, number, number, number) function getPosition(self): (number, number, number) function getTexture(self): Texture function getViewport(self): (number, number, number, number) function setColor(self, r: number, g: number, b: number, a: number?) function setColor(self, t: {number}) function setColor(self, hex: number, a: number?) function setCurve(self, curve: number?) function setDimensions(self, width: number, height: number) function setOrientation(self, angle: number, ax: number, ay: number, az: number) function setOrientation(self, orientation: Quat) function setPose(self, x: number, y: number, z: number, angle: number, ax: number, ay: number, az: number) function setPose(self, position: Vec3, orientation: Quat) function setPosition(self, x: number, y: number, z: number) function setViewport(self, x: number, y: number, w: number, h: number) end type HeadsetModule = { animate: & ((model: Model) -> boolean) & ((device: Device?, model: Model) -> boolean), getAngularVelocity: (device: Device?) -> (number, number, number), getAxis: (device: Device, axis: DeviceAxis) -> number | nil, getBoundsDepth: () -> number, getBoundsDimensions: () -> (number, number), getBoundsGeometry: (t: {}?) -> {}, getBoundsWidth: () -> number, getClipDistance: () -> (number, number), getDeltaTime: () -> number, getDirection: (device: Device?) -> (number, number, number), getDisplayDimensions: () -> (number, number), getDisplayHeight: () -> number, getDisplayWidth: () -> number, getDriver: () -> (HeadsetDriver, string), getFeatures: () -> {}, getFoveation: () -> (FoveationLevel, boolean), getHandles: () -> (lightuserdata, lightuserdata), getHands: () -> {Device}, getLayers: () -> {Layer}, getName: () -> string, getOrientation: (device: Device?) -> (number, number, number, number), getPass: () -> Pass | nil, getPassthrough: () -> PassthroughMode, getPassthroughModes: () -> {}, getPose: (device: Device?) -> (number, number, number, number, number, number, number), getPosition: (device: Device?) -> (number, number, number), getRefreshRate: () -> number | nil, getRefreshRates: () -> {} | nil, getSkeleton: & ((device: Device) -> {{number}} | nil) & ((device: Device, t: {}) -> {{number}} | nil), getTexture: () -> Texture | nil, getTime: () -> number, getVelocity: (device: Device?) -> (number, number, number), getViewAngles: (view: number) -> (number | nil, number | nil, number | nil, number | nil), getViewCount: () -> number, getViewPose: (view: number) -> (number | nil, number | nil, number | nil, number | nil, number | nil, number | nil, number | nil), isActive: () -> boolean, isDown: (device: Device, button: DeviceButton) -> boolean | nil, isFocused: () -> boolean, isMounted: () -> boolean, isSeated: () -> boolean, isTouched: (device: Device, button: DeviceButton) -> boolean | nil, isTracked: (device: Device?) -> boolean, isVisible: () -> boolean, newLayer: (width: number, height: number) -> Layer, newModel: & ((key: lightuserdata) -> Model) & ((device: Device?) -> Model), setBackground: & ((background: Image | {Image} | Texture) -> ()) & (() -> ()), setClipDistance: (near: number, far: number) -> (), setFoveation: & ((level: FoveationLevel, dynamic: boolean?) -> boolean) & (() -> boolean), setLayers: & ((...Layer) -> ()) & ((t: {}) -> ()), setPassthrough: & ((mode: PassthroughMode) -> boolean) & ((transparent: boolean) -> boolean) & (() -> boolean), setRefreshRate: (rate: number) -> boolean, start: () -> (), stop: () -> (), stopVibration: (device: Device?) -> (), submit: () -> (), update: () -> (), vibrate: (device: Device?, strength: number?, duration: number?, frequency: number?) -> boolean, wasPressed: (device: Device, button: DeviceButton) -> boolean, wasReleased: (device: Device, button: DeviceButton) -> boolean, } declare class Curve extends Object function addPoint(self, x: number, y: number, z: number, index: number?) function evaluate(self, t: number): (number, number, number) function getPoint(self, index: number): (number, number, number) function getPointCount(self): number function getTangent(self, t: number): (number, number, number) function removePoint(self, index: number) function render(self, n: number?, t1: number?, t2: number?): {number} function setPoint(self, index: number, x: number, y: number, z: number) function slice(self, t1: number, t2: number): Curve end declare class RandomGenerator extends Object function getSeed(self): (number, number) function getState(self): string function random(self): number function random(self, high: number): number function random(self, low: number, high: number): number function randomNormal(self, sigma: number?, mu: number?): number function setSeed(self, seed: number) function setSeed(self, low: number, high: number) function setState(self, state: string) end type MathModule = { drain: () -> (), gammaToLinear: & ((gr: number, gg: number, gb: number) -> (number, number, number)) & ((color: {number}) -> (number, number, number)) & ((x: number) -> number), getRandomSeed: () -> number, linearToGamma: & ((lr: number, lg: number, lb: number) -> (number, number, number)) & ((color: {number}) -> (number, number, number)) & ((x: number) -> number), mat4: & (() -> Mat4) & ((n: Mat4) -> Mat4) & ((position: Vec3?, scale: Vec3?, rotation: Quat?) -> Mat4) & ((position: Vec3?, rotation: Quat?) -> Mat4) & ((...number) -> Mat4) & ((d: number) -> Mat4), newCurve: & ((x: number, y: number, z: number, ...any) -> Curve) & ((v: Vec3, ...any) -> Curve) & ((points: {}) -> Curve) & ((n: number) -> Curve), newMat4: & (() -> Mat4) & ((n: Mat4) -> Mat4) & ((position: Vec3?, scale: Vec3?, rotation: Quat?) -> Mat4) & ((position: Vec3?, rotation: Quat?) -> Mat4) & ((...number) -> Mat4) & ((d: number) -> Mat4), newQuat: & ((angle: number?, ax: number?, ay: number?, az: number?, raw: boolean?) -> Quat) & ((r: Quat) -> Quat) & ((v: Vec3) -> Quat) & ((v: Vec3, u: Vec3) -> Quat) & ((m: Mat4) -> Quat) & (() -> Quat), newRandomGenerator: & (() -> RandomGenerator) & ((seed: number) -> RandomGenerator) & ((low: number, high: number) -> RandomGenerator), newVec2: & ((x: number?, y: number?) -> Vec2) & ((u: Vec2) -> Vec2), newVec3: & ((x: number?, y: number?, z: number?) -> Vec3) & ((u: Vec3) -> Vec3) & ((m: Mat4) -> Vec3) & ((q: Quat) -> Vec3), newVec4: & ((x: number?, y: number?, z: number?, w: number?) -> Vec4) & ((u: Vec4) -> Vec4), noise: & ((x: number) -> number) & ((x: number, y: number) -> number) & ((x: number, y: number, z: number) -> number) & ((x: number, y: number, z: number, w: number) -> number), quat: & ((angle: number?, ax: number?, ay: number?, az: number?, raw: boolean?) -> Quat) & ((r: Quat) -> Quat) & ((v: Vec3) -> Quat) & ((v: Vec3, u: Vec3) -> Quat) & ((m: Mat4) -> Quat) & (() -> Quat), random: & (() -> number) & ((high: number) -> number) & ((low: number, high: number) -> number), randomNormal: (sigma: number?, mu: number?) -> number, setRandomSeed: (seed: number) -> (), vec2: & ((x: number?, y: number?) -> Vec2) & ((u: Vec2) -> Vec2), vec3: & ((x: number?, y: number?, z: number?) -> Vec3) & ((u: Vec3) -> Vec3) & ((m: Mat4) -> Vec3) & ((q: Quat) -> Vec3), vec4: & ((x: number?, y: number?, z: number?, w: number?) -> Vec4) & ((u: Vec4) -> Vec4), } type JointType = | "ball" | "distance" | "hinge" | "slider" type MotorMode = | "position" | "velocity" type ShapeType = | "box" | "sphere" | "capsule" | "cylinder" | "convex" | "mesh" | "terrain" declare class BallJoint extends Joint end declare class BoxShape extends Shape function getDimensions(self): (number, number, number) function setDimensions(self, width: number, height: number, depth: number) end declare class CapsuleShape extends Shape function getLength(self): number function getRadius(self): number function setLength(self, length: number) function setRadius(self, radius: number) end declare class Collider extends Object function addShape(self, shape: Shape) function applyAngularImpulse(self, x: number, y: number, z: number) function applyAngularImpulse(self, impulse: Vec3) function applyForce(self, x: number, y: number, z: number) function applyForce(self, x: number, y: number, z: number, px: number, py: number, pz: number) function applyForce(self, force: Vec3) function applyForce(self, force: Vec3, position: Vec3) function applyLinearImpulse(self, x: number, y: number, z: number) function applyLinearImpulse(self, x: number, y: number, z: number, px: number, py: number, pz: number) function applyLinearImpulse(self, impulse: Vec3) function applyLinearImpulse(self, impulse: Vec3, position: Vec3) function applyTorque(self, x: number, y: number, z: number) function applyTorque(self, torque: Vec3) function destroy(self) function getAABB(self): (number, number, number, number, number, number) function getAngularDamping(self): number function getAngularVelocity(self): (number, number, number) function getAutomaticMass(self): boolean function getCenterOfMass(self): (number, number, number) function getDegreesOfFreedom(self): (string, string) function getFriction(self): number function getGravityScale(self): number function getInertia(self): (number, number, number, number, number, number, number) function getJoints(self): {} function getLinearDamping(self): number function getLinearVelocity(self): (number, number, number) function getLinearVelocityFromLocalPoint(self, x: number, y: number, z: number): (number, number, number) function getLinearVelocityFromLocalPoint(self, point: Vec3): (number, number, number) function getLinearVelocityFromWorldPoint(self, x: number, y: number, z: number): (number, number, number) function getLinearVelocityFromWorldPoint(self, point: Vec3): (number, number, number) function getLocalPoint(self, wx: number, wy: number, wz: number): (number, number, number) function getLocalPoint(self, point: Vec3): (number, number, number) function getLocalVector(self, wx: number, wy: number, wz: number): (number, number, number) function getLocalVector(self, vector: Vec3): (number, number, number) function getMass(self): number function getOrientation(self): (number, number, number, number) function getPose(self): (number, number, number, number, number, number, number) function getPosition(self): (number, number, number) function getRestitution(self): number function getShape(self): Shape | nil function getShapes(self): {} function getTag(self): string | nil function getUserData(self): any function getWorld(self): World function getWorldPoint(self, x: number, y: number, z: number): (number, number, number) function getWorldPoint(self, point: Vec3): (number, number, number) function getWorldVector(self, x: number, y: number, z: number): (number, number, number) function getWorldVector(self, vector: Vec3): (number, number, number) function isAwake(self): boolean function isContinuous(self): boolean function isDestroyed(self): boolean function isEnabled(self): boolean function isGravityIgnored(self): boolean function isKinematic(self): boolean function isSensor(self): boolean function isSleepingAllowed(self): boolean function moveKinematic(self) function removeShape(self, shape: Shape) function resetMassData(self) function setAngularDamping(self, damping: number) function setAngularVelocity(self, vx: number, vy: number, vz: number) function setAngularVelocity(self, velocity: Vec3) function setAutomaticMass(self, enable: boolean) function setAwake(self, awake: boolean) function setCenterOfMass(self, x: number, y: number, z: number) function setCenterOfMass(self, center: Vec3) function setContinuous(self, continuous: boolean) function setDegreesOfFreedom(self, translation: string?, rotation: string?) function setEnabled(self, enable: boolean) function setFriction(self, friction: number) function setGravityIgnored(self, ignored: boolean) function setGravityScale(self, scale: number) function setInertia(self, dx: number, dy: number, dz: number, angle: number, ax: number, ay: number, az: number) function setInertia(self, diagonal: Vec3, rotation: Quat) function setKinematic(self, kinematic: boolean) function setLinearDamping(self, damping: number) function setLinearVelocity(self, vx: number, vy: number, vz: number) function setLinearVelocity(self, velocity: Vec3) function setMass(self, mass: number) function setOrientation(self, angle: number, ax: number, ay: number, az: number) function setOrientation(self, orientation: Quat) function setPose(self, x: number, y: number, z: number, angle: number, ax: number, ay: number, az: number) function setPose(self, position: Vec3, orientation: Quat) function setPosition(self, x: number, y: number, z: number) function setPosition(self, position: Vec3) function setRestitution(self, restitution: number) function setSensor(self, sensor: boolean) function setSleepingAllowed(self, sleepy: boolean) function setTag(self, tag: string) function setTag(self) function setUserData(self, data: any) end declare class ConeJoint extends Joint function getAxis(self): (number, number, number) function getLimit(self): number function setLimit(self, limit: number) end declare class Contact function getColliders(self): (Collider, Collider) function getFriction(self): number function getNormal(self): (number, number, number) function getOverlap(self): number function getPoints(self): number function getRestitution(self): number function getShapes(self): (Shape, Shape) function getSurfaceVelocity(self): (number, number, number) function isEnabled(self): boolean function setEnabled(self, enable: boolean) function setFriction(self, friction: number) function setRestitution(self, restitution: number) function setSurfaceVelocity(self, x: number, y: number, z: number) function setSurfaceVelocity(self, velocity: Vec3) end declare class ConvexShape extends Shape function getFace(self, index: number): {} function getFaceCount(self): number function getPoint(self, index: number): (number, number, number) function getPointCount(self): number function getScale(self): number end declare class CylinderShape extends Shape function getLength(self): number function getRadius(self): number function setLength(self, length: number) function setRadius(self, radius: number) end declare class DistanceJoint extends Joint function getLimits(self): (number, number) function getSpring(self): (number, number) function setLimits(self, min: number?, max: number?) function setLimits(self) function setSpring(self, frequency: number?, damping: number?) end declare class HingeJoint extends Joint function getAngle(self): number function getAxis(self): (number, number, number) function getFriction(self): number function getLimits(self): (number, number) function getMaxMotorTorque(self): (number, number) function getMotorMode(self): MotorMode function getMotorSpring(self): (number, number) function getMotorTarget(self): number function getMotorTorque(self): number function getSpring(self): (number, number) function setFriction(self, friction: number) function setLimits(self, min: number, max: number) function setLimits(self) function setMaxMotorTorque(self, positive: number?, negative: number?) function setMotorMode(self, mode: MotorMode) function setMotorMode(self) function setMotorSpring(self, frequency: number?, damping: number?) function setMotorTarget(self, target: number) function setSpring(self, frequency: number?, damping: number?) end declare class Joint extends Object function destroy(self) function getAnchors(self): (number, number, number, number, number, number) function getColliders(self): (Collider, Collider) function getForce(self): number function getPriority(self): number function getTorque(self): number function getType(self): JointType function getUserData(self): any function isDestroyed(self): boolean function isEnabled(self): boolean function setEnabled(self, enabled: boolean) function setPriority(self, priority: number) function setUserData(self, data: any) end declare class MeshShape extends Shape function getScale(self): number end declare class Shape extends Object function containsPoint(self, x: number, y: number, z: number): boolean function containsPoint(self, point: Vec3): boolean function destroy(self) function getAABB(self): (number, number, number, number, number, number) function getCenterOfMass(self): (number, number, number) function getCollider(self): Collider function getDensity(self): number function getInertia(self): (number, number, number, number, number, number, number) function getMass(self): number function getOffset(self): (number, number, number, number, number, number, number) function getOrientation(self): (number, number, number, number) function getPose(self): (number, number, number, number, number, number, number) function getPosition(self): (number, number, number) function getType(self): ShapeType function getUserData(self): any function getVolume(self): number function isDestroyed(self): boolean function raycast(self, x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): (number, number, number, number, number, number, number | nil) function raycast(self, origin: Vec3, endpoint: Vec3): (number, number, number, number, number, number, number | nil) function setDensity(self, density: number) function setOffset(self, x: number, y: number, z: number, angle: number, ax: number, ay: number, az: number) function setOffset(self, position: Vec3, rotation: Quat) function setUserData(self, data: any) end declare class SliderJoint extends Joint function getAxis(self): (number, number, number) function getFriction(self): number function getLimits(self): (number, number) function getMaxMotorForce(self): (number, number) function getMotorForce(self): number function getMotorMode(self): MotorMode function getMotorSpring(self): (number, number) function getMotorTarget(self): number function getPosition(self): number function getSpring(self): (number, number) function setFriction(self, friction: number) function setLimits(self, min: number, max: number) function setLimits(self) function setMaxMotorForce(self, positive: number?, negative: number?) function setMotorMode(self, mode: MotorMode) function setMotorMode(self) function setMotorSpring(self, frequency: number?, damping: number?) function setMotorTarget(self, target: number) function setSpring(self, frequency: number?, damping: number?) end declare class SphereShape extends Shape function getRadius(self): number function setRadius(self, radius: number) end declare class TerrainShape extends Shape end declare class WeldJoint extends Joint end declare class World extends Object function destroy(self) function disableCollisionBetween(self, tag1: string, tag2: string) function enableCollisionBetween(self, tag1: string, tag2: string) function getAngularDamping(self): (number, number) function getCallbacks(self): {} function getColliderCount(self): number function getColliders(self): {Collider} function getGravity(self): (number, number, number) function getJointCount(self): number function getJoints(self): {Joint} function getLinearDamping(self): (number, number) function getResponseTime(self): number function getStepCount(self): number function getTags(self): {string} function getTightness(self): number function interpolate(self, alpha: number) function isCollisionEnabledBetween(self, tag1: string, tag2: string): boolean function isDestroyed(self): boolean function isSleepingAllowed(self): boolean function newBoxCollider(self, x: number?, y: number?, z: number?, width: number?, height: number?, depth: number?): Collider function newBoxCollider(self, position: Vec3, size: Vec3): Collider function newCapsuleCollider(self, x: number?, y: number?, z: number?, radius: number?, length: number?): Collider function newCapsuleCollider(self, position: Vec3, radius: number?, length: number?): Collider function newCollider(self, x: number, y: number, z: number): Collider function newCollider(self, position: Vec3): Collider function newConvexCollider(self, x: number?, y: number?, z: number?, points: {}, scale: number?): Collider function newConvexCollider(self, position: Vec3, points: {}, scale: number?): Collider function newConvexCollider(self, x: number?, y: number?, z: number?, modelData: ModelData, scale: number?): Collider function newConvexCollider(self, position: Vec3, modelData: ModelData, scale: number?): Collider function newConvexCollider(self, x: number?, y: number?, z: number?, model: Model, scale: number?): Collider function newConvexCollider(self, position: Vec3, model: Model, scale: number?): Collider function newConvexCollider(self, x: number?, y: number?, z: number?, mesh: Mesh, scale: number?): Collider function newConvexCollider(self, position: Vec3, mesh: Mesh, scale: number?): Collider function newConvexCollider(self, x: number?, y: number?, z: number?, template: ConvexShape, scale: number?): Collider function newConvexCollider(self, position: Vec3, template: ConvexShape, scale: number?): Collider function newCylinderCollider(self, x: number?, y: number?, z: number?, radius: number?, length: number?): Collider function newCylinderCollider(self, position: Vec3, radius: number?, length: number?): Collider function newMeshCollider(self, vertices: {}, indices: {}): Collider function newMeshCollider(self, modelData: ModelData): Collider function newMeshCollider(self, model: Model): Collider function newMeshCollider(self, mesh: Mesh): Collider function newMeshCollider(self, template: MeshShape): Collider function newSphereCollider(self, x: number?, y: number?, z: number?, radius: number?): Collider function newSphereCollider(self, position: Vec3, radius: number?): Collider function newTerrainCollider(self, scale: number): Collider function newTerrainCollider(self, scale: number, heightmap: Image, stretch: number?): Collider function newTerrainCollider(self, scale: number, callback: (x: number, z: number) -> number, samples: number?): Collider function overlapShape(self, shape: Shape, x: number, y: number, z: number, angle: number, ax: number, ay: number, az: number, maxDistance: number?, filter: string?, callback: () -> ()?) function overlapShape(self, shape: Shape, position: Vec3, orientation: Quat, maxDistance: number?, filter: string?, callback: () -> ()?) function overlapShape(self, shape: Shape, x: number, y: number, z: number, angle: number, ax: number, ay: number, az: number, maxDistance: number?, filter: string?): (Collider, Shape, number, number, number, number, number, number) function overlapShape(self, shape: Shape, position: Vec3, orientation: Quat, maxDistance: number?, filter: string?): (Collider, Shape, number, number, number, number, number, number) function queryBox(self, x: number, y: number, z: number, width: number, height: number, depth: number, filter: string?, callback: () -> ()?) function queryBox(self, position: Vec3, size: Vec3, filter: string?, callback: () -> ()?) function queryBox(self, x: number, y: number, z: number, width: number, height: number, depth: number, filter: string?): Collider function queryBox(self, position: Vec3, size: Vec3, filter: string?): Collider function querySphere(self, x: number, y: number, z: number, radius: number, filter: string?, callback: () -> ()?) function querySphere(self, position: Vec3, radius: number, filter: string?, callback: () -> ()?) function querySphere(self, x: number, y: number, z: number, radius: number, filter: string?): Collider function querySphere(self, position: Vec3, radius: number, filter: string?): Collider function raycast(self, x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, filter: string?, callback: (collider: Collider, shape: Shape, x: number, y: number, z: number, nx: number, ny: number, nz: number, triangle: number, fraction: number) -> number??) function raycast(self, origin: Vec3, endpoint: Vec3, filter: string?, callback: (collider: Collider, shape: Shape, x: number, y: number, z: number, nx: number, ny: number, nz: number, triangle: number, fraction: number) -> number??) function raycast(self, x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, filter: string?): (Collider, Shape, number, number, number, number, number, number, number | nil) function raycast(self, origin: Vec3, endpoint: Vec3, filter: string?): (Collider, Shape, number, number, number, number, number, number, number | nil) function setAngularDamping(self, damping: number, threshold: number?) function setCallbacks(self, callbacks: {}) function setGravity(self, xg: number, yg: number, zg: number) function setGravity(self, gravity: Vec3) function setLinearDamping(self, damping: number, threshold: number?) function setResponseTime(self, responseTime: number) function setSleepingAllowed(self, allowed: boolean) function setStepCount(self, steps: number) function setTightness(self, tightness: number) function shapecast(self, shape: Shape, x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, angle: number, ax: number, ay: number, az: number, filter: string?, callback: (collider: Collider, shape: Shape, x: number, y: number, z: number, nx: number, ny: number, nz: number, triangle: number, fraction: number) -> number?) function shapecast(self, shape: Shape, position: Vec3, destination: Vec3, orientation: Quat, filter: string?, callback: (collider: Collider, shape: Shape, x: number, y: number, z: number, nx: number, ny: number, nz: number, triangle: number, fraction: number) -> number?) function shapecast(self, shape: Shape, x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, angle: number, ax: number, ay: number, az: number, filter: string?): (Collider, Shape, number, number, number, number, number, number, number, number) function shapecast(self, shape: Shape, position: Vec3, destination: Vec3, orientation: Quat, filter: string?): (Collider, Shape, number, number, number, number, number, number, number, number) function update(self, dt: number) end type PhysicsModule = { newBallJoint: & ((colliderA: Collider, colliderB: Collider, x: number, y: number, z: number) -> BallJoint) & ((colliderA: Collider, colliderB: Collider, anchor: Vec3) -> BallJoint), newBoxShape: (width: number?, height: number?, depth: number?) -> BoxShape, newCapsuleShape: (radius: number?, length: number?) -> CapsuleShape, newConeJoint: & ((colliderA: Collider, colliderB: Collider, x: number, y: number, z: number, ax: number, ay: number, az: number) -> ConeJoint) & ((colliderA: Collider, colliderB: Collider, anchor: Vec3, axis: Vec3) -> ConeJoint), newConvexShape: & ((points: {}, scale: number?) -> ConvexShape) & ((object: ModelData | Model | Mesh, scale: number?) -> ConvexShape) & ((template: ConvexShape, scale: number?) -> ConvexShape), newCylinderShape: (radius: number?, length: number?) -> CylinderShape, newDistanceJoint: & ((colliderA: Collider, colliderB: Collider, x1: number, y1: number, z1: number, x2: number, y2: number, z2: number) -> DistanceJoint) & ((colliderA: Collider, colliderB: Collider, first: Vec3, second: Vec3) -> DistanceJoint), newHingeJoint: & ((colliderA: Collider, colliderB: Collider, x: number, y: number, z: number, ax: number, ay: number, az: number) -> HingeJoint) & ((colliderA: Collider, colliderB: Collider, anchor: Vec3, axis: Vec3) -> HingeJoint), newMeshShape: & ((vertices: {}, indices: {}, scale: number?) -> MeshShape) & ((object: ModelData | Model | Mesh, scale: number?) -> MeshShape) & ((template: MeshShape, scale: number?) -> MeshShape), newSliderJoint: & ((colliderA: Collider, colliderB: Collider, ax: number, ay: number, az: number) -> SliderJoint) & ((colliderA: Collider, colliderB: Collider, axis: Vec3) -> SliderJoint), newSphereShape: (radius: number?) -> SphereShape, newTerrainShape: & ((scale: number) -> TerrainShape) & ((scale: number, heightmap: Image, stretch: number?) -> TerrainShape) & ((scale: number, callback: (x: number, z: number) -> (), samples: number?) -> TerrainShape), newWeldJoint: (colliderA: Collider, colliderB: Collider) -> WeldJoint, newWorld: (settings: {}?) -> World, } type Permission = | "audiocapture" type SystemModule = { getClipboardText: () -> string | nil, getCoreCount: () -> number, getMousePosition: () -> (number, number), getMouseX: () -> number, getMouseY: () -> number, getOS: () -> string, getWindowDensity: () -> number, getWindowDimensions: () -> (number, number), getWindowHeight: () -> number, getWindowWidth: () -> number, hasKeyRepeat: () -> boolean, isKeyDown: (...KeyCode) -> boolean, isMouseDown: (button: number) -> boolean, isWindowFocused: () -> boolean, isWindowOpen: () -> boolean, isWindowVisible: () -> boolean, openWindow: (options: {}) -> (), pollEvents: () -> (), requestPermission: (permission: Permission) -> (), setClipboardText: (text: string) -> (), setKeyRepeat: (enable: boolean) -> (), wasKeyPressed: (...KeyCode) -> boolean, wasKeyReleased: (...KeyCode) -> boolean, wasMousePressed: (button: number) -> boolean, wasMouseReleased: (button: number) -> boolean, } declare class Channel extends Object function clear(self) function getCount(self): number function hasRead(self, id: number): boolean function peek(self): (any, boolean) function pop(self, wait: number | boolean | nil): any function push(self, message: any, wait: number | boolean | nil): (number, boolean) end declare class Thread extends Object function getError(self): string | nil function isRunning(self): boolean function start(self, ...: any) function wait(self) end type ThreadModule = { getChannel: (name: string) -> Channel, newChannel: () -> Channel, newThread: & ((code: string) -> Thread) & ((file: string | Blob) -> Thread), } type TimerModule = { getAverageDelta: () -> number, getDelta: () -> number, getFPS: () -> number, getTime: () -> number, sleep: (duration: number) -> (), step: () -> number, } declare lovr: { getVersion: () -> (number, number, number, string, string), conf: (t: {}) -> (), draw: (pass: Pass) -> boolean | nil, errhand: (message: string) -> (() -> any), filechanged: (path: string, action: FileAction, oldpath: string) -> (), focus: (focused: boolean, display: DisplayType) -> (), keypressed: (key: KeyCode, scancode: number, isrepeat: boolean) -> (), keyreleased: (key: KeyCode, scancode: number) -> (), load: (arg: {}) -> (), log: (message: string, level: string, tag: string) -> (), mirror: (pass: Pass) -> boolean, mount: (mounted: boolean) -> (), mousemoved: (x: number, y: number, dx: number, dy: number) -> (), mousepressed: (x: number, y: number, button: number) -> (), mousereleased: (x: number, y: number, button: number) -> (), permission: (permission: Permission, granted: boolean) -> (), quit: () -> boolean, recenter: () -> (), resize: (width: number, height: number) -> (), restart: () -> any, run: () -> (() -> any), textinput: (text: string, code: number) -> (), threaderror: (thread: Thread, message: string) -> (), update: (dt: number) -> (), visible: (visible: boolean, display: DisplayType) -> (), wheelmoved: (dx: number, dy: number) -> (), audio: AudioModule, data: DataModule, event: EventModule, filesystem: FilesystemModule, graphics: GraphicsModule, headset: HeadsetModule, math: MathModule, physics: PhysicsModule, system: SystemModule, thread: ThreadModule, timer: TimerModule, }