Description
A binding library of minilight for Lua langauge.
Description
This library provides a way to write minilight component in Lua language.
README.md
minilight-lua
A binding library of minilight for Lua language.
NB: This package is in the very early stage.
What's this?
- minilight is a SDL2-based graphics library, equipped with component system.
- Lua is a lightweight interpreted language.
With this library, you can write a minilight component in Lua language.
Getting Started
See example directory. Main.hs
is an entrypoint for minilight engine.
mainFile = "example/main.lua"
main :: IO ()
main = runLightT $ runMiniloop
(defConfig { hotConfigReplacement = Just "example", appConfigFile = Just "" })
initial
(const mainloop)
where
initial = do
comp <- registerComponent mainFile newLuaComponent
reload mainFile
return ()
mainloop :: MiniLoop ()
mainloop = do
ref <- view _events
evs <- liftIO $ tryReadMVar ref
let notifys = case evs of
Just evs -> mapMaybe asNotifyEvent evs
_ -> []
unless (null notifys) $ reload mainFile
Some notes here:
- When you pass
hotConfigReplacement
field, minilight will watch the given directory and emits file changed/created/delete events during the mainloop. - For
registerComponent
you need to pass the filename likeexample/main.lua
. The path is relative where you runcabal run
. - In
mainloop
, watches any events andreload
the component. Thereload
function will load the lua file again and swap the component dynamically (code swapping).
local minilight = require("minilight")
function onDraw()
print("[LUA OUTPUT] hello")
return {
minilight.translate(50, 50, minilight.picture("example/example.png")),
minilight.translate(100, 100, minilight.text("こんにちは世界",
{0, 0, 0, 0})),
minilight.translate(30, 50,
minilight.text("Hello, World!", {255, 0, 0, 0}))
}
end
_G.onDraw = onDraw
For lua part:
- Require
minilight
library. This will be implicitly loaded by minilight-lua. - You need to export
onDraw : () -> Array<minilight.Figure>
function globally. This function will be called from Haskell and the returned array will be rendered in the component.