Pular para o conteúdo principal

API Lua — Referência Completa

Fonte: scripting/src/lua_engine.cpp e scripting/src/bindings/.

A VM Lua é criada por LuaEngine::init(). Todas as bibliotecas padrão Lua são carregadas (luaL_openlibs). Um sandbox é aplicado: os globais os e debug são removidos; io também é removido. Use as APIs do engine abaixo em vez de acesso direto a arquivos/OS.


Debug​

Global: Debug

FunçãoParâmetrosRetornoDescrição
Debug.log(msg)msg: string—Loga em nível INFO via spdlog. Prefixado [Lua].
Debug.warn(msg)msg: string—Loga em nível WARN.
Debug.error(msg)msg: string—Loga em nível ERROR.
Debug.log("Jogo iniciado")
Debug.warn("Vida baixa: " .. tostring(hp))
Debug.error("Textura não encontrada!")

Time​

Global: Time

FunçãoParâmetrosRetornoDescrição
Time.delta()—numberDelta time do frame atual em segundos.
Time.elapsed()—numberTempo total desde o início do engine, em segundos.
Time.fps()—numberQuadros por segundo (média rolante).
Time.scale()—numberEscala de tempo atual (1.0 = normal).
Time.set_scale(s)s: number—Define escala de tempo. 0 = pausado, 0.5 = metade, 2 = dobro.
Time.frame()—integerContador de frames desde o início.

Input​

Global: Input

Nomes de teclas são nomes SDL em minúsculas (ex: "w", "space", "left ctrl", "return").

Teclado​

FunçãoParâmetrosRetornoDescrição
Input.is_pressed(key)key: stringbooleanVerdadeiro apenas no primeiro frame que a tecla é pressionada.
Input.is_held(key)key: stringbooleanVerdadeiro todo frame que a tecla está pressionada.
Input.is_released(key)key: stringbooleanVerdadeiro apenas no frame em que a tecla é solta.

Mouse​

FunçãoParâmetrosRetornoDescrição
Input.mouse_position()—x, y: numberPosição atual do mouse em pixels da janela.
Input.mouse_delta()—x, y: numberMovimento do mouse neste frame.
Input.mouse_button(btn)btn: integerbooleanEstado do botão: 1=esquerdo, 2=meio, 3=direito.
Input.set_mouse_captured(captured)captured: boolean—Ativa SDL relative mouse mode.
Input.scroll()—numberDelta da roda de scroll neste frame.

Gamepad​

FunçãoParâmetrosRetornoDescrição
Input.gamepad_axis(player, axis)player, axis: integernumberValor do eixo [-1, 1].
Input.gamepad_button(player, btn)player, btn: integerbooleanEstado do botão do gamepad.

Renderer (2D)​

Global: Renderer

Wraps Renderer2D (OpenGL 3.3, quads em batch). Câmera ortográfica com origem no canto superior esquerdo.

FunçãoParâmetrosRetornoDescrição
Renderer.clear(r?, g?, b?, a?)RGBA floats—Limpa buffer de cor e profundidade.
Renderer.begin_frame()——Inicia um novo batch.
Renderer.end_frame()——Envia batch e troca buffers.
Renderer.draw_rect(x, y, w, h, r?, g?, b?, a?)pos, size, cor—Quad preenchido. (x,y) é o canto superior esquerdo.
Renderer.draw_quad(cx, cy, w, h, r?, g?, b?, a?)centro, size, cor—Quad preenchido. (cx,cy) é o centro.
Renderer.draw_texture(path, x, y, w?, h?)path, pos, size?—Carrega e desenha textura.
Renderer.load_texture(path)path: stringTextureID: integerPré-carrega textura, retorna ID GL.
Renderer.draw_sprite(texId, x, y, w?, h?, rot?, alpha?)texId, pos, size, rot, alpha—Desenha sprite com rotação e alpha.
Renderer.draw_line(x1, y1, x2, y2, r?, g?, b?, a?, thickness?)dois pontos, cor, espessura—Linha espessa via quad rotacionado.
Renderer.draw_circle(cx, cy, radius, r?, g?, b?, a?)centro, raio, cor—Contorno de círculo com 32 segmentos.
Renderer.draw_text(text, x?, y?, size?, r?, g?, b?, a?)text, pos, size, cor—Renderiza texto via stb_truetype.
Renderer.set_camera(x?, y?, zoom?, rot?)pos/zoom/rot—Define câmera ortográfica 2D.
Renderer.width()—integerLargura da viewport em pixels.
Renderer.height()—integerAltura da viewport em pixels.
function on_render(entity)
Renderer.clear(0.1, 0.1, 0.15, 1)
Renderer.draw_rect(50, 50, 200, 100, 1, 0.2, 0.2, 1)
Renderer.draw_texture("assets/player.png", px, py, 64, 64)
Renderer.draw_text("Score: " .. score, 10, 10, 18, 1, 1, 0, 1)
end

UI​

Global: UI

Elementos de UI immediate-mode via Renderer2D. Coordenadas em pixels de tela.

FunçãoParâmetrosRetornoDescrição
UI.panel(x, y, w, h, r?, g?, b?, a?)pos, size, cor—Painel de fundo.
UI.label(text, x, y, size?, r?, g?, b?, a?)text, pos, size, cor—Rótulo de texto.
UI.progress_bar(x, y, w, h, value, r?, g?, b?, a?)pos, size, valor [0,1], cor—Barra de progresso.
UI.button(text, x, y, w, h)text, pos, sizebooleanBotão clicável. Retorna true no frame do clique.
function on_render(entity)
UI.panel(0, 0, 200, 50, 0, 0, 0, 0.6)
UI.label("Score: " .. score, 10, 12, 20, 1, 1, 0, 1)
UI.progress_bar(10, 40, 180, 8, hp / max_hp, 0.2, 0.8, 0.2, 1)
if UI.button("Play", 300, 200, 120, 40) then
state = "playing"
end
end

Audio​

Global: Audio

SoundID é um handle inteiro retornado pelas funções play. 0 é o ID inválido.

FunçãoParâmetrosRetornoDescrição
Audio.play(path, vol?)path, vol? (padrão 1.0)SoundIDToca um som one-shot.
Audio.play_music(path, loop?, fade?)path, loop?, fade? (padrão 0.5s)SoundIDToca trilha; para a música anterior com fade.
Audio.stop_music()——Para música atual imediatamente.
Audio.stop(id)id: SoundID—Para e libera instância de som.
Audio.pause(id)id: SoundID—Pausa sem liberar.
Audio.resume(id)id: SoundID—Retoma som pausado.
Audio.set_volume(id, vol)id, vol: number—Volume por instância [0, 1].
Audio.set_master_volume(vol)vol: number—Volume master.
Audio.fade_in(id, duration)id, duration—Fade de 0 ao volume base.
Audio.fade_out(id, duration, stop?)id, duration, stop?—Fade para 0, opcionalmente para.

Physics​

Global: Physics

Aviso: A implementação de física de corpos rígidos (Jolt) é um stub. Use Physics.overlap para AABB 2D.

FunçãoParâmetrosRetornoDescrição
Physics.overlap(x1,y1,w1,h1, x2,y2,w2,h2)dois AABBbooleanColisão AABB pura.
Physics.check_collision(a, b)dois tables {x,y,w,h}booleanAlias para overlap via tables.
Physics.raycast(ox,oy,oz, dx,dy,dz, maxDist?)origem, direção, dist maxhit, dist, entityRaycast 3D (stub — retorna hit=false).
Physics.set_gravity(x, y, z)——Define vetor gravidade.

World (ECS)​

Global: World

Entidades são representadas como um único inteiro empacotado: (index << 16) | generation.

FunçãoParâmetrosRetornoDescrição
World.create(name?)name?entity: integerCria entidade com Transform.
World.destroy(entity)entity—Destrói entidade e filhos recursivamente.
World.is_alive(entity)entitybooleanVerificação de geração.
World.find_by_name(name)name: stringentity ou nilBusca linear por nome.
World.get_transform(entity)entitytable{position, rotation, scale} — rotação em graus.
World.set_transform(entity, t)entity, table—Define Transform a partir da table.
World.add_tag(entity, tag)entity, tag: string—Adiciona tag de string à entidade.
World.has_tag(entity, tag)entity, tag: stringboolean—
World.set_parent(child, parent)child, parent—Vincula filho ao pai.
World.get_children(entity)entitytable[]Array de filhos.

SaveSystem​

Global: SaveSystem

Serializa tables Lua como JSON usando nlohmann/json.

FunçãoParâmetrosRetornoDescrição
SaveSystem.save(filename, table)filename: string, tablebooleanSalva table como JSON. Retorna true se OK.
SaveSystem.load(filename)filename: stringtable ou nilCarrega JSON e retorna como table Lua.
-- Salvar
SaveSystem.save("save.json", { score = 1000, level = 3 })

-- Carregar
local data = SaveSystem.load("save.json")
if data then
score = data.score
end

Vec3​

Global: Vec3

Um Vec3 em Lua é uma table {x, y, z}.

FunçãoParâmetrosRetornoDescrição
Vec3.new(x?, y?, z?)numbersvec3 tableCria Vec3.
Vec3.add(a, b)vec3, vec3vec3Soma componente a componente.
Vec3.sub(a, b)vec3, vec3vec3Subtração.
Vec3.mul(a, s)vec3, numbervec3Multiplicação escalar.
Vec3.dot(a, b)vec3, vec3numberProduto escalar.
Vec3.cross(a, b)vec3, vec3vec3Produto vetorial.
Vec3.length(a)vec3numberComprimento euclidiano.
Vec3.normalize(a)vec3vec3Vetor normalizado.
Vec3.lerp(a, b, t)vec3, vec3, numbervec3Interpolação linear.
Vec3.distance(a, b)vec3, vec3numberDistância euclidiana.

Math Extensions​

O math padrão do Lua é estendido com:

FunçãoParâmetrosRetornoDescrição
math.clamp(v, lo, hi)numbersnumberLimita v ao intervalo [lo, hi].
math.lerp(a, b, t)numbersnumberInterpolação linear: a + (b-a)*t.
math.deg2rad(degrees)numbernumberGraus para radianos.
math.rad2deg(radians)numbernumberRadianos para graus.

Event​

Global: Event

Sistema pub/sub dentro dos scripts Lua. Eventos identificados por string.

FunçãoParâmetrosRetornoDescrição
Event.subscribe(name, callback)name, functionhandle: integerRegistra callback. Retorna handle para cancelamento.
Event.unsubscribe(name, handle)name, handle—Remove callback pelo handle.
Event.publish(name, ...)name, ...any—Chama todos os callbacks do evento. Síncrono.

Callbacks do Ciclo de Vida​

Quando o runtime carrega um arquivo Lua, procura estas funções globais:

CallbackAssinaturaQuando chamado
on_startfunction(entity_index)Uma vez, após carregar o script.
on_updatefunction(entity_index, dt)Todo frame. dt em segundos.
on_renderfunction(entity_index)Todo frame, após on_update.
on_destroyfunction(entity_index)Uma vez, ao sair do jogo.