LÖVE backend + build target (compat/luajit.lua shims, Roblox build unchanged), examples/example_love, examples/example_shared (same app on Roblox and LÖVE), LuaJIT checksum tests
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
-- One UI that runs unchanged on Roblox and LÖVE: only the Dear ImGui API is used, and the code is plain Lua 5.1
|
||||
-- (no Luau-only syntax), so both Luau and LuaJIT run it. The platform launchers are roblox.client.luau and main.lua.
|
||||
-- local App = require(app)(G) -- G = the table returned by the ImGui bundle
|
||||
-- every frame, between ImGui.NewFrame() and ImGui.Render(): App.Frame()
|
||||
return function(G)
|
||||
local ImGui, ImVec2, ImVec4 = G.ImGui, G.ImVec2, G.ImVec4
|
||||
local App = {
|
||||
Platform = "?", -- set by the launcher ("Roblox" / "LÖVE")
|
||||
ClearColor = ImVec4(0.45, 0.55, 0.60, 1.00), -- launchers may use it as the background colour
|
||||
}
|
||||
local show_demo, show_table = false, true
|
||||
local counter, speed = 0, 1.0
|
||||
local name = ImGui.NewTextBuffer("Player", 64)
|
||||
local samples, t = {}, 0.0
|
||||
local items = { { "Sword", 1, 120 }, { "Potion", 5, 15 }, { "Arrow", 64, 1 }, { "Shield", 1, 80 } }
|
||||
|
||||
function App.Frame()
|
||||
local io = ImGui.GetIO()
|
||||
t = t + io.DeltaTime * speed
|
||||
for i = 1, 90 do samples[i] = math.sin(i / 90 * math.pi * 4 + t * 3) end
|
||||
|
||||
ImGui.SetNextWindowPos(ImVec2(20, 20), G.ImGuiCond.FirstUseEver)
|
||||
ImGui.SetNextWindowSize(ImVec2(420, 360), G.ImGuiCond.FirstUseEver)
|
||||
ImGui.Begin("Shared Example")
|
||||
ImGui.Text("Running on %s (%.1f FPS)", App.Platform, io.Framerate)
|
||||
ImGui.Separator()
|
||||
ImGui.InputText("name", name, 64)
|
||||
if ImGui.Button("Click me") then counter = counter + 1 end
|
||||
ImGui.SameLine(); ImGui.Text("%s clicked %d times", ImGui.TextBufferToString(name), counter)
|
||||
speed = ImGui.SliderFloat("speed", speed, 0.0, 4.0)
|
||||
ImGui.ColorEdit3("background", App.ClearColor)
|
||||
ImGui.PlotLines("wave", samples, nil, #samples, 0, nil, -1.0, 1.0, ImVec2(0, 60))
|
||||
local _
|
||||
_, show_table = ImGui.Checkbox("Inventory table", show_table)
|
||||
ImGui.SameLine(); _, show_demo = ImGui.Checkbox("Demo window", show_demo)
|
||||
if show_table and ImGui.BeginTable("inv", 3, bit32.bor(G.ImGuiTableFlags.Borders, G.ImGuiTableFlags.RowBg, G.ImGuiTableFlags.Sortable)) then
|
||||
ImGui.TableSetupColumn("Item"); ImGui.TableSetupColumn("Count"); ImGui.TableSetupColumn("Value")
|
||||
ImGui.TableHeadersRow()
|
||||
for _, it in ipairs(items) do
|
||||
ImGui.TableNextRow()
|
||||
ImGui.TableNextColumn(); ImGui.Text(it[1])
|
||||
ImGui.TableNextColumn(); ImGui.Text("%d", it[2])
|
||||
ImGui.TableNextColumn(); ImGui.Text("%d", it[3])
|
||||
end
|
||||
ImGui.EndTable()
|
||||
end
|
||||
ImGui.End()
|
||||
|
||||
if show_demo and ImGui.ShowDemoWindow then show_demo = ImGui.ShowDemoWindow(show_demo) end
|
||||
end
|
||||
|
||||
return App
|
||||
end
|
||||
Reference in New Issue
Block a user