Lua api
sn = {
---@class Vec3
---@field x number
---@field y number
---@field z number
---@field Copy fun(self: Vec3): Vec3
---@field Length fun(self: Vec3): number
---@field Forward fun(self: Vec3, rotation: Vec3): Vec3
---@field Normalize fun(self: Vec3): Vec3
---@field Dot fun(self: Vec3, other: Vec3): number
---@field Cross fun(self: Vec3, other: Vec3): Vec3
---@field Lerp fun(self: Vec3, other: Vec3, t: number): Vec3
---@field Reflect fun(self: Vec3, n: Vec3): Vec3
---@operator add(Vec3): Vec3
---@operator sub(Vec3): Vec3
---@operator mul(Vec3): Vec3
---@operator div(Vec3): Vec3
---@param x number?
---@param y number?
---@param z number?
---@return Vec3
Vec3 = function(x, y, z) return {} end,
---@param value number
---@return Vec3
---Initializes a Vec3 with the same value for x, y, z.
Vec3 = function(value) return {} end,
---@class Vec3i
---@field x integer
---@field y integer
---@field z integer
---@operator add(Vec3i): Vec3i
---@operator sub(Vec3i): Vec3i
---@param x integer?
---@param y integer?
---@param z integer?
---@return Vec3i
Vec3i = function(x, y, z)
return {}
end,
---@param value integer
---@return Vec3i
---Initializes a Vec3i with the same value for x, y, z.
Vec3i = function(value)
return {}
end,
---@class Vec2
---@field x number
---@field y number
---@field Copy fun(self: Vec2): Vec2
---@field Length fun(self: Vec2): number
---@field Normalize fun(self: Vec2): Vec2
---@field Dot fun(self: Vec2, other: Vec2): number
---@field Lerp fun(self: Vec2, other: Vec2, t: number): Vec2
---@field Reflect fun(self: Vec2, n: Vec2): Vec2
---@operator add(Vec2): Vec2
---@operator sub(Vec2): Vec2
---@operator mul(Vec2): Vec2
---@operator div(Vec2): Vec2
---@param x number?
---@param y number?
---@return Vec2
Vec2 = function(x, y) return {} end,
---@param value number
---@return Vec2
---Initializes a Vec2 with the same value for x, y.
Vec2 = function(value) return {} end,
---@class Vec2i
---@field x integer
---@field y integer
---@operator add(Vec2i): Vec2i
---@operator sub(Vec2i): Vec2i
---@param x integer?
---@param y integer?
---@return Vec2i
Vec2i = function(x, y) return {} end,
---@param value integer
---@return Vec2i
---Initializes a Vec2i with the same value for x, y.
Vec2i = function(value) return {} end,
---@class Texture
---@field FillColor fun(self: Texture, color: Color)
---@field BlendColor fun(self: Texture, color: Color)
---@field Copy fun(self: Texture): Texture
---@field Load fun(self: Texture, path: string)
---@field Size fun(self: Texture): Vec2
---@return Texture
Texture = function() return {} end,
---@class Material
---Set Texture. index is 1-based, optional.
---@field SetTexture fun(self:Material, texture: Texture, index: integer?)
---@field AppendTexture fun(self: Material, texture: Texture)
---@field Clear fun(self: Material)
---@field GetTexture fun(self: Material, index: integer): Texture
---@return Material
Material = function() return {} end,
---@class RenderTexture
---@field Create fun(self: RenderTexture, x: integer, y: integer)
---@return RenderTexture
RenderTexture = function() return {} end,
---@class Music
---@field Load fun(self: Music, path: string)
---@field Play fun(self: Music)
---@field SetVolume fun(self: Music, volume: number)
---@return Music
Music = function() return {} end,
---@class Sound
---@field Load fun(self: Sound, path: string)
---@field Play fun(self: Sound)
---@field SetVolume fun(self: Sound, volume: number)
---@field SetPitch fun(self: Sound, pitch: number)
---@field SetListener fun(self: Sound, position: Vec3)
---@field SetPosition fun(self: Sound, position: Vec3)
---@return Sound
Sound = function() return {} end,
---@class Camera
---@field LookAt fun(self: Camera, position: Vec3, target: Vec3, up: Vec3)
---@field Perspective fun(self: Camera, fov: number, aspect: number, near: number, far: number)
---@field Orthographic fun(self: Camera, left: number, right: number, bottom: number, top: number, near: number, far: number)
---@field GetPosition fun(self: Camera): Vec3
---@field GetTarget fun(self: Camera): Vec3
---@field GetUp fun(self: Camera): Vec3
---@field IsAABBInFrustum fun(self: Camera, aabb: AABB): boolean
Camera = function() end,
---@class Model
---@field GetAABB fun(self: Model): AABB
---@field Load fun(self: Model, path: string)
---@field LoadSprite fun(self: Model)
---@field LoadBox fun(self: Model)
---@field GetBoneUniformData fun(self: Model): UniformData
---@field Play fun(self: Model, positon: number)
---@field Update fun(self: Model, delta: number)
---@return Model
Model = function() return {} end,
---@class AABB
---@field min Vec3
---@field max Vec3
---@field UpdateWorld fun(self: AABB, position: Vec3, scale: Vec3, modelAABB: AABB)
---@return AABB
AABB = function() return {} end,
---@class Timer
---@field Start fun(self: Timer)
---@field Stop fun(self: Timer)
---@field IsStarted fun(self: Timer): boolean
---@field SetTime fun(self: Timer, time: number)
---@field Check fun(self: Timer): boolean
Timer = function() end,
---@class UniformData
---@field Add fun(self: UniformData, value: any)
---@field Change fun(self: UniformData, index: integer, value: number)
---@return UniformData
UniformData = function() return {} end,
---@class Shader
---@field LoadVertexShader fun(self: Shader, path: string, uniform_count: integer)
---@field LoadFragmentShader fun(self: Shader, path: string, uniform_count: integer)
---@field CompileAndLoadVertexShader fun(self: Shader, source: string, uniform_count: integer)
---@field CompileAndLoadFragmentShader fun(self: Shader, source: string, uniform_count: integer)
---@return Shader
Shader = function() return {} end,
---@class Font
---@field Load fun(self: Font, size: integer, path: string?): nil
---@field RenderText fun(self: Font, texture: Texture, text: string, color: Color): Texture
---@field Resize fun(self: Font, size: integer)
---@return Font
Font = function() return {} end,
---@class Color
---@field r number
---@field g number
---@field b number
---@field a number
---@param r number
---@param g number
---@param b number
---@param a number
---@return Color
Color = function(r, g, b, a) return {} end,
---@return Color
Color = function() return {} end,
---@class Draw2D
---@field scale Vec2
---@field position Vec2
---@field rotation number
---@field material Material
---@field Add fun(self: Draw2D, drawable: any)
---@field At fun(self: Draw2D, x: number, y: number)
---@field Clear fun(self: Draw2D)
---@param texture Texture?
---@return Draw2D
Draw2D = function(texture) return {} end,
---@class Draw3D
---@field scale Vec3
---@field position Vec3
---@field rotation Vec3
---@field material Material
---@field model Model
---@field isDrawDepth boolean
---@field Add fun(self: Draw3D, positon: Vec3, rotation: Vec3, scale: Vec3)
---@field At fun(self: Draw3D, x: number, y: number, z: number)
---@field Clear fun(self: Draw3D)
---@param texture Texture?
---@return Draw3D
Draw3D = function(texture) return {} end,
---@class Grid
---@field At fun(self: Grid, x: integer, y: integer): integer
---@field Set fun(self: Grid, x: integer, y: integer, v: integer)
---@field Width fun(self: Grid): integer
---@field Height fun(self: Grid): integer
---@field Size fun(self: Grid): integer
---@field Clear fun(self: Grid)
---@field Resize fun(self: Grid, w: integer, h: integer)
---@field Fill fun(self: Grid, value: integer)
---@param w integer
---@param h integer
---@return Grid
Grid = function(w, h) return {} end,
---@class BFSGrid
---@field Width fun(self: BFSGrid): integer
---@field Height fun(self: BFSGrid): integer
---@field FindPath fun(self: BFSGrid, start: Vec2, end_: Vec2): any
---@field Trace fun(self: BFSGrid): Vec2
---@field Traceable fun(self: BFSGrid): boolean
---@field Reset fun(self: BFSGrid)
---@param grid Grid
---@return BFSGrid
BFSGrid = function(grid)
return {}
end,
---@class GraphicsPipeline2D
---@field SetVertexShader fun(self: GraphicsPipeline2D, shader: Shader)
---@field SetFragmentShader fun(self: GraphicsPipeline2D, shader: Shader)
---@field Build fun(self: GraphicsPipeline2D)
---@return GraphicsPipeline2D
GraphicsPipeline2D = function() return {} end,
---@class GraphicsPipeline3D
---@field SetVertexShader fun(self: GraphicsPipeline3D, shader: Shader)
---@field SetVertexInstancedShader fun(self: GraphicsPipeline3D, shader: Shader)
---@field SetFragmentShader fun(self: GraphicsPipeline3D, shader: Shader)
---@field SetAnimation fun(self: GraphicsPipeline3D, anim: any)
---@field Build fun(self: GraphicsPipeline3D)
---@return GraphicsPipeline3D
GraphicsPipeline3D = function() return {} end,
---@class Rect
---@field x number
---@field y number
---@field width number
---@field height number
---@param x number?
---@param y number?
---@param width number?
---@param height number?
---@return Rect
Rect = function(x, y, width, height) return {} end,
---@param position Vec2
---@param size Vec2
---@return Rect
Rect = function(position, size) return {} end,
---@class Transform
---@field position Vec3
---@field rotation Vec3
---@field scale Vec3
---@return Transform
Transform = function() return {} end,
---@class Collider
---@field GetPosition fun(self: Collider): Vec3
---@field GetVelocity fun(self: Collider): Vec3
---@field SetLinearVelocity fun(self: Collider, velocity: Vec3)
---Static class
---@class FileSystem
---@field EnumerateDirectory fun(path: string): table
---Static class
---@class Random
---@field GetRange fun(a: number, b: number): number
---@field GetIntRange fun(a: number, b: number): number
Random = {},
---Static class
---@class Window
---@field GetName fun(): string
---@field Size fun(): Vec2
---@field Half fun(): Vec2
---@field Resize fun(size: Vec2)
---@field SetFullscreen fun(full: boolean)
---@field Rename fun(name: string)
---@field Resized fun(): boolean
Window = {},
---Static class
---@class Graphics
---@field Draw2D fun(draw2D: Draw2D)
---@field Draw3D fun(draw3D: Draw3D)
---@field DrawRect fun(rect: Rect, color: Color, angle: number?)
---@field DrawImage fun(texture: Texture, rect: Rect, angle: number?)
---@field DrawText fun(text: string, position: Vec2, color: Color?, fontSize: number?, angle: number?)
---@field DrawModel fun(model: Model, transform: Transform, material: Material)
---@field GetClearColor fun(): Color
---@field SetClearColor fun(c: Color)
---@field BindPipeline2D fun(pipe: GraphicsPipeline2D)
---@field BindDefaultPipeline2D fun()
---@field BindPipeline3D fun(pipe: GraphicsPipeline3D)
---@field BindDefaultPipeline3D fun()
---@field SetUniformData fun(binding: integer, data: UniformData)
---@field SetRenderTarget fun(rt: RenderTexture)
---@field Flush fun()
---@field ReadbackTexture fun(rt: RenderTexture): Texture
Graphics = {},
---Static class
---@class Physics
---@field CreateBoxCollider fun(transform: Transform, isStatic: boolean): Collider
---@field CreateSphereCollider fun(position: Vec3, radius: number, isStatic: boolean): Collider
---@field AddCollider fun(collider: Collider, isActive: boolean)
---Static class
---@class Scene
---@field GetCamera fun(): Camera
---@field Size fun(): Vec2
---@field Resize fun(size: Vec2)
---@field Half fun(): Vec2
---@field Ratio fun(): number
---@field InvRatio fun(): number
---@field DeltaTime fun(): number
---@field Change fun(name: string, basePath?:string)
Scene = {},
---Static class
---@class Collision
---@field AABBvsAABB fun(a: AABB, b: AABB): boolean
Collision = {},
---Static class
---@class Keyboard
---@field A integer
---@field B integer
---@field C integer
---@field D integer
---@field E integer
---@field F integer
---@field G integer
---@field H integer
---@field I integer
---@field J integer
---@field K integer
---@field L integer
---@field M integer
---@field N integer
---@field O integer
---@field P integer
---@field Q integer
---@field R integer
---@field S integer
---@field T integer
---@field U integer
---@field V integer
---@field W integer
---@field X integer
---@field Y integer
---@field Z integer
---@field Key0 integer
---@field Key1 integer
---@field Key2 integer
---@field Key3 integer
---@field Key4 integer
---@field Key5 integer
---@field Key6 integer
---@field Key7 integer
---@field Key8 integer
---@field Key9 integer
---@field F1 integer
---@field F2 integer
---@field F3 integer
---@field F4 integer
---@field F5 integer
---@field F6 integer
---@field F7 integer
---@field F8 integer
---@field F9 integer
---@field F10 integer
---@field F11 integer
---@field F12 integer
---@field UP integer
---@field DOWN integer
---@field LEFT integer
---@field RIGHT integer
---@field ESCAPE integer
---@field SPACE integer
---@field BACKSPACE integer
---@field TAB integer
---@field RETURN integer
---@field LSHIFT integer
---@field RSHIFT integer
---@field LCTRL integer
---@field RCTRL integer
---@field LALT integer
---@field IsPressed fun(scancode: integer): boolean
---@field IsReleased fun(scancode: integer): boolean
---@field IsDown fun(scancode: integer): boolean
Keyboard = {},
---Static class
---@class Mouse
---@field LEFT integer
---@field RIGHT integer
---@field MIDDLE integer
---@field X1 integer
---@field X2 integer
---@field IsPressed fun(btn: integer): boolean
---@field IsReleased fun(btn: integer): boolean
---@field IsDown fun(btn: integer): boolean
---@field GetPosition fun(): Vec2
---@field GetPositionOnScene fun(): Vec2
---@field SetPosition fun(pos: Vec2)
---@field SetPositionOnScene fun(pos: Vec2)
---@field GetScrollWheel fun(): number
---@field HideCursor fun(isHide: boolean)
---@field SetRelative fun(isRelative: boolean)
Mouse = {},
---Static class
---@class GamePad
---@field INVALID integer
---@field A integer
---@field B integer
---@field X integer
---@field Y integer
---@field BACK integer
---@field GUIDE integer
---@field START integer
---@field LEFTSTICK integer
---@field RIGHTSTICK integer
---@field LEFTSHOULDER integer
---@field RIGHTSHOULDER integer
---@field DPAD_UP integer
---@field DPAD_DOWN integer
---@field DPAD_LEFT integer
---@field DPAD_RIGHT integer
---@field MISC1 integer
---@field PADDLE1 integer
---@field PADDLE2 integer
---@field PADDLE3 integer
---@field PADDLE4 integer
---@field TOUCHPAD integer
---@field IsPressed fun(btn: integer): boolean
---@field IsReleased fun(btn: integer): boolean
---@field IsDown fun(btn: integer): boolean
---@field GetLeftStick fun(): Vec2
---@field GetRightStick fun(): Vec2
---@field IsConnected fun(): boolean
Gamepad = {},
---Static class
---@class Periodic
---@field Sin0_1 fun(t1: number,t2:number): number
---@field Cos0_1 fun(t1: number,t2:number): number
Periodic = {},
---Static class
---@class Time
---@field Seconds fun(): number
---@field Milli fun(): integer
Time = {},
---Static class
---@class Logger
---@field Verbose fun(msg: string)
---@field Info fun(msg: string)
---@field Error fun(msg: string)
---@field Warn fun(msg: string)
---@field Critical fun(msg: string)
Logger = {}
}