diff options
Diffstat (limited to 'src/lua/embed/boot.lua.h')
-rw-r--r-- | src/lua/embed/boot.lua.h | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/src/lua/embed/boot.lua.h b/src/lua/embed/boot.lua.h new file mode 100644 index 0000000..21c1899 --- /dev/null +++ b/src/lua/embed/boot.lua.h @@ -0,0 +1,156 @@ +/* boot.lua */ +static const char* boot_lua = R"( + +-- init filesystem +jin._argv[2] = jin._argv[2] or '.' +jin.filesystem.init() +jin.filesystem.mount(jin._argv[2]) + +-- config +local conf = {} +if jin.filesystem.exist("config.lua") then + conf = require "config" +end +conf.width = conf.width or 600 +conf.height = conf.height or 500 +conf.fps = conf.fps or 60 +conf.vsync = conf.vsync or false +conf.title = conf.title or ("jin v" .. jin.version()) + +-- initialize subsystems +jin.graphics.init(conf) +--jin.audio.init(conf) + +-- open debug mode, must after jin.graphics.init +if jin._argv[3] == '-d' then + jin.debug.init() +end + +function jin.core.run() + local load = jin.core.load + local running = jin.core.running + local second = jin.time.second + local sleep = jin.time.sleep + local poll = jin.event.poll + local unbind = jin.graphics.unbind + local clear = jin.graphics.clear + local color = jin.graphics.color + local study = jin.graphics.study + local onDraw = jin.core.onDraw + local onUpdate = jin.core.onUpdate + local onEvent = jin.core.onEvent + local present = jin.graphics.present + local setkey = jin.keyboard.set + + local dstatus = jin.debug.status + local drender = jin.debug.render + + local fps = conf.fps + + local _onEvent = function (e) + if e.type == "keydown" then + setkey(e.key, true) + elseif e.type == "keyup" then + setkey(e.key, false) + end + if onEvent then + onEvent(e) + end + end + + if load then + load() + end + + local now = second() + local last = now + local fsec = 1/fps + local dt = 0 + + while(running()) do + -- frame controle + last = now + now = second() + dt = now - last + if dt < fsec then + sleep(fsec - dt) + dt = fsec + end + + -- handle events + for _, e in pairs(poll()) do + if _onEvent then + _onEvent(e) + end + end + + -- update + if onUpdate then + onUpdate(dt) + end + + -- bind to default render buffer + unbind() + clear() + color() + study() + + -- custom drawing + if onDraw then + onDraw() + end + + -- render debug window + if dstatus() then + drender() + end + + -- swap window buffer + present() + end +end + +local function onError(msg) + local tab = ' ' + print("Error:\n" .. msg) + function jin.core.onEvent(e) + if e.type == 'quit' then + jin.core.quit() + end + end + local ww, wh = jin.graphics.size() + function jin.core.onDraw() + jin.graphics.write("Error: ", 10, 10, 30, 3, 30) + jin.graphics.write(msg, 10, 50) + end +end + +local function main() + if jin.filesystem.exist("main.lua") then + -- require main game script + xpcall(function() require"main" end, onError) + jin.core.run() + else + -- no game + function jin.core.onEvent(e) + if e.type == 'quit' then + jin.core.quit() + end + end + function jin.core.onDraw() + jin.graphics.clear(111, 134, 125, 255) + local ww, wh = jin.graphics.size() + local fw, fh = jin.graphics.box("no game", 20, 1, 20) + jin.graphics.write("no game", ww /2 - fw / 2, wh * 2/3, 16, 1, 18) + end + jin.core.run() + end + -- quit subsystems + jin.graphics.destroy() + -- exit whole game + jin.core.exit() +end + +main() + +)"; |