aboutsummaryrefslogtreecommitdiff
path: root/src/lua/embed/boot.lua.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/embed/boot.lua.h')
-rw-r--r--src/lua/embed/boot.lua.h156
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()
+
+)";