diff options
author | chai <chaifix@163.com> | 2018-11-16 00:24:51 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-11-16 00:24:51 +0800 |
commit | 831e814ce9bdb84e86c06c4a52008f6bdaaa00d6 (patch) | |
tree | f91fccc7d2628d6e0a39886134b2bb174f5eede4 /src/lua/embed | |
parent | 6dc75930fe5fe02f1af5489917752d315cf9e48f (diff) |
*合并master到minimal分支
Diffstat (limited to 'src/lua/embed')
-rw-r--r-- | src/lua/embed/boot.lua.h | 175 | ||||
-rw-r--r-- | src/lua/embed/embed.h | 46 | ||||
-rw-r--r-- | src/lua/embed/graphics.lua.h | 46 | ||||
-rw-r--r-- | src/lua/embed/scripts/ai.lua.h | 26 | ||||
-rw-r--r-- | src/lua/embed/scripts/boot.lua.h | 139 | ||||
-rw-r--r-- | src/lua/embed/scripts/graphics.lua.h | 73 | ||||
-rw-r--r-- | src/lua/embed/scripts/keyboard.lua.h (renamed from src/lua/embed/keyboard.lua.h) | 2 | ||||
-rw-r--r-- | src/lua/embed/scripts/mouse.lua.h (renamed from src/lua/embed/mouse.lua.h) | 2 | ||||
-rw-r--r-- | src/lua/embed/scripts/net.lua.h (renamed from src/lua/embed/net.lua.h) | 3 | ||||
-rw-r--r-- | src/lua/embed/scripts/path.lua.h (renamed from src/lua/embed/path.lua.h) | 2 |
10 files changed, 269 insertions, 245 deletions
diff --git a/src/lua/embed/boot.lua.h b/src/lua/embed/boot.lua.h deleted file mode 100644 index 99e657b..0000000 --- a/src/lua/embed/boot.lua.h +++ /dev/null @@ -1,175 +0,0 @@ -/* boot.lua */ -static const char* boot_lua = R"( -jin.args[2] = jin.args[2] or '.' -jin.filesystem.init() -jin.filesystem.mount(jin.args[2]) - -------------------------------------------------------------------------- --- Config game -------------------------------------------------------------------------- - -jin.config = {} -if jin.filesystem.exist("config.lua") then - jin.config = require "config" -end -jin.config.width = jin.config.width or 576 -jin.config.height = jin.config.height or 448 -jin.config.vsync = jin.config.vsync or true -jin.config.title = jin.config.title or ("jin v" .. jin.version) -jin.config.resizable = jin.config.resizable or false -jin.config.fullscreen = jin.config.fullscreen or false -jin.config.fps = jin.config.fps or 60 - -------------------------------------------------------------------------- --- Initialize sub systems -------------------------------------------------------------------------- - -jin.graphics.init(jin.config) -jin.audio.init() --- TODO: ϵͳģ - -------------------------------------------------------------------------- --- Default game loop -------------------------------------------------------------------------- - -local function call(func, ...) - if func then - return func(...) - end -end - -function jin.core.run() - call(jin.core.onLoad) - jin.graphics.reset() - local dt = 0 - local previous = jin.time.second() - local current = previous - while jin.core.running() do - for _, e in pairs(jin.event.poll()) do - if e.type == "KeyDown" then - jin.keyboard.set(e.key, true) - elseif e.type == "KeyUp" then - jin.keyboard.set(e.key, false) - end - call(jin.core.onEvent, e) - end - previous = current - current = jin.time.second() - dt = current - previous - call(jin.core.onUpdate, dt) - jin.graphics.clear() - call(jin.core.onDraw) - jin.graphics.present() - -- Sleep 1 ms - jin.time.sleep(0.001) - end -end - -------------------------------------------------------------------------- --- No game handler -------------------------------------------------------------------------- - -jin.core.setHandler = function(handler) - if handler == nil then - return - end - jin.core.onLoad = handler.onLoad - jin.core.onEvent = handler.onEvent - jin.core.onUpdate = handler.onUpdate - jin.core.onDraw = handler.onDraw -end - --- TODO: Ĭͼbase64 -jin.nogame = { - cs = 64, - sw = jin.graphics.getWidth(), - sh = jin.graphics.getHeight(), - cw = 0, - ch = 0, - ww = 6, - ww2 = 6*2, - speed = 4, - t = 0, - onLoad = function() - local nogame = jin.nogame - nogame.cw = nogame.sw / nogame.cs - nogame.ch = nogame.sh / nogame.cs - nogame.t = nogame.ww - 1 - end, - onEvent = function(e) - if e.type == 'Quit' then - jin.core.stop() - end - end, - onUpdate = function(dt) - print(dt) - local nogame = jin.nogame - nogame.t = nogame.t + dt * nogame.speed - if nogame.t > nogame.ww2 then - nogame.t = nogame.t - nogame.ww2 - end - end, - circle = function(x, y, r) - local nogame = jin.nogame - if r % nogame.ww2 > nogame.ww then - return - end - r = math.sin((r/nogame.ww)*math.pi)*nogame.cs/2 - local fact = (x + y) / nogame.ch * nogame.cw - jin.graphics.setColor( - 155 + 100 * math.sin(fact), - 155 + 100 * math.cos(fact), - 155 + 100 * math.sin(fact * fact), - 255 - ) - jin.graphics.circle("fill", x*nogame.cs + nogame.cs/2, y*nogame.cs + nogame.cs/2, r) - end, - onDraw = function() - local nogame = jin.nogame - for y = 0, nogame.ch - 1 do - for x = 0, nogame.cw - 1 do - nogame.circle(x, y, nogame.t+x+y) - end - end - end -} - -------------------------------------------------------------------------- --- Boot jin -------------------------------------------------------------------------- - -local function onError(msg) - jin.graphics.reset() - jin.graphics.setClearColor(100, 100, 100, 255) - jin.graphics.clear() - jin.graphics.print("Error:\n" .. msg .. "\n" .. debug.traceback(), 5, 5) - jin.graphics.present() - while jin.core.running() do - for _, e in pairs(jin.event.poll()) do - if e.type == "Quit" then - jin.core.stop() - end - end - jin.time.sleep(0.001) - end - jin.core.quit() -end - -local function boot() - if jin.filesystem.exist("main.lua") then - -- Require main game script - xpcall(function() require"main" end, onError) - xpcall(function() jin.core.run() end, onError) - else - -- No game - jin.core.setHandler(jin.nogame) - jin.core.run() - end - jin.graphics.destroy() - jin.audio.destroy() - jin.core.quit() -end - -xpcall(boot, onError) - -)";
\ No newline at end of file diff --git a/src/lua/embed/embed.h b/src/lua/embed/embed.h index 18373c8..054672c 100644 --- a/src/lua/embed/embed.h +++ b/src/lua/embed/embed.h @@ -4,30 +4,26 @@ namespace JinEngine { -namespace embed -{ + namespace Embed + { -#define embed(L, script, name)\ - if(luax_loadbuffer(L, script, strlen(script), name) == 0)\ - lua_call(L, 0, 0); + #define embed(L, script, name)\ + if(luax_loadbuffer(L, script, strlen(script), name) == 0)\ + lua_call(L, 0, 0); - /** - * embed structure. - */ - struct jin_Embed - { - const char* file, *source; - }; + // Embed structure. + struct jin_Embed + { + const char* file, *source; + }; - static void boot(lua_State* L) - { - // embed scripts - #include "graphics.lua.h" - #include "keyboard.lua.h" - #include "mouse.lua.h" - #include "boot.lua.h" + // Embed scripts. + #include "scripts/graphics.lua.h" + #include "scripts/keyboard.lua.h" + #include "scripts/mouse.lua.h" + #include "scripts/boot.lua.h" - // in order + // In order. const jin_Embed scripts[] = { { "graphics.lua", graphics_lua }, { "keyboard.lua", keyboard_lua }, @@ -36,11 +32,13 @@ namespace embed { 0, 0 } }; - for (int i = 0; scripts[i].file; ++i) - embed(L, scripts[i].source, scripts[i].file); - } + static void boot(lua_State* L) + { + for (int i = 0; scripts[i].file; ++i) + embed(L, scripts[i].source, scripts[i].file); + } -} // embed + } // namespace Embed } // namespace JinEngine #endif
\ No newline at end of file diff --git a/src/lua/embed/graphics.lua.h b/src/lua/embed/graphics.lua.h deleted file mode 100644 index 5fa5dad..0000000 --- a/src/lua/embed/graphics.lua.h +++ /dev/null @@ -1,46 +0,0 @@ -/* graphics.lua */ -static const char* graphics_lua = R"( -jin.graphics = jin.graphics or {} - -local default_shader = nil -local default_shader_source = [[ -#VERTEX_SHADER - -Vertex vert(Vertex v) -{ - return v; -} - -#END_VERTEX_SHADER - -#FRAGMENT_SHADER - -Color frag(Color col, Texture tex, Vertex v) -{ - return col * texel(tex, v.uv); -} - -#END_FRAGMENT_SHADER -]] - -local _init = jin.graphics.init - -jin.graphics.init = function(setting) - _init(setting); - default_shader = jin.graphics.newShader(default_shader_source) - jin.graphics.useShader(default_shader) -end - -jin.graphics.unuseShader = function() - jin.graphics.useShader(default_shader) -end - --- Reset all attributes to default value. -jin.graphics.reset = function() - jin.graphics.setColor(255, 255, 255, 255) - jin.graphics.setClearColor(0, 0, 0, 255) - jin.graphics.clear() - jin.graphics.unsetFont() -end - -)"; diff --git a/src/lua/embed/scripts/ai.lua.h b/src/lua/embed/scripts/ai.lua.h new file mode 100644 index 0000000..a69da84 --- /dev/null +++ b/src/lua/embed/scripts/ai.lua.h @@ -0,0 +1,26 @@ +/* graphics.lua */ +static const char* ai_lua = R"( +jin.ai = jin.ai or {} + +local ja = jin.ai + +ja.StateMachineType = { + STEPWISE = 1, + ITERATIVE = 2, +} + + + +)"; + + +//local sp = jin.graphics.newSprite() +//local sm = jin.ai.newStateMachine(jin.StateMachineMode.STEPWISE, sp) +//sm:addState("run") +//sm:addEnterCallback("run", function(spr) +// spr:setRun() +//end) +// +//function jin.core.onUpdate(dt) +// sm:update() +//end diff --git a/src/lua/embed/scripts/boot.lua.h b/src/lua/embed/scripts/boot.lua.h new file mode 100644 index 0000000..af81c16 --- /dev/null +++ b/src/lua/embed/scripts/boot.lua.h @@ -0,0 +1,139 @@ +/* boot.lua */ +static const char* boot_lua = R"( +local cwd = jin.args['cwd'] or '.' +jin.filesystem.init() +jin.filesystem.mount(cwd) + +------------------------------------------------------------------------- +-- Config game +------------------------------------------------------------------------- + +jin.config = {} +if jin.filesystem.exist("config.lua") then + xpcall(function()jin.config = require "config" end, function()end) +end +jin.config.width = jin.config.width or 580 +jin.config.height = jin.config.height or 450 +jin.config.vsync = jin.config.vsync or true +jin.config.title = jin.config.title or ("jin v" .. jin.version) +jin.config.resizable = jin.config.resizable or false +jin.config.fullscreen = jin.config.fullscreen or false +jin.config.fps = jin.config.fps or 60 +jin.config.icon = jin.config.icon or "" + +------------------------------------------------------------------------- +-- Default game loop +------------------------------------------------------------------------- + +local function call(func, ...) + if func then + return func(...) + end +end + +local step = jin.time.step +jin.time.step = nil + +function jin.core.run() + jin.graphics.reset() + call(jin.core.onLoad) + local dt = 0 + while jin.core.running() do + for _, e in pairs(jin.event.poll()) do + if e.type == "KeyDown" then + jin.keyboard.set(e.key, true) + elseif e.type == "KeyUp" then + jin.keyboard.set(e.key, false) + end + call(jin.core.onEvent, e) + end + step() + dt = jin.time.getDelta() + call(jin.core.onUpdate) + jin.graphics.clear() + call(jin.core.onDraw) + jin.graphics.present() + jin.time.sleep(0.001) + end +end + +------------------------------------------------------------------------- +-- Boot game +------------------------------------------------------------------------- + +-- Display error message. +local function onError(msg) + jin.audio.destroy() + jin.graphics.showWindow() + local err = "Error:\n" .. msg .. "\n" .. debug.traceback() + jin.graphics.reset() + jin.graphics.setClearColor(100, 100, 100, 255) + jin.graphics.clear() + jin.graphics.print(err, 5, 5) + jin.graphics.present() + while jin.core.running() do + for _, e in pairs(jin.event.poll()) do + if e.type == "Quit" then + jin.core.stop() + end + end + jin.time.sleep(0.001) + end +end + +-- No game screen. +local function noGame() + jin.graphics.showWindow() + jin.graphics.reset() + jin.graphics.setClearColor(100, 100, 100, 255) + jin.graphics.clear() + jin.graphics.print("No Game", 5, 5) + jin.graphics.present() + while jin.core.running() do + for _, e in pairs(jin.event.poll()) do + if e.type == "Quit" then + jin.core.stop() + end + end + jin.time.sleep(0.001) + end +end + +local function boot() + if jin.filesystem.exist("main.lua") then + call(function() + require"main" + jin.core.run() + end) + else + noGame() + end +end + +------------------------------------------------------------------------- +-- Initialize sub systems +------------------------------------------------------------------------- + +jin.audio.init() +jin.graphics.init(jin.config) + +------------------------------------------------------------------------- +-- Boot game +------------------------------------------------------------------------- + +xpcall(boot, onError) + +------------------------------------------------------------------------- +-- Destroy sub-systems +------------------------------------------------------------------------- + +jin.graphics.destroy() +jin.audio.destroy() + +------------------------------------------------------------------------- +-- Quit game +------------------------------------------------------------------------- + +jin.core.quit() + +)";
\ No newline at end of file diff --git a/src/lua/embed/scripts/graphics.lua.h b/src/lua/embed/scripts/graphics.lua.h new file mode 100644 index 0000000..e1079b9 --- /dev/null +++ b/src/lua/embed/scripts/graphics.lua.h @@ -0,0 +1,73 @@ +/* graphics.lua */ +static const char* graphics_lua = R"( +jin.graphics = jin.graphics or {} + +local jg = jin.graphics + +jg.RenderMode = { + FILL = 1, + LINE = 2, +} + +jg.SpriteOrigin = { + TOPLEFT = 0, + TOPCENTER = 1, + TOPRIGHT = 2, + MIDDLELEFT = 3, + MIDDLECENTER = 4, + MIDDLERIGHT = 5, + BOTTOMLEFT = 6, + BOTTOMCENTER = 7, + BOTTOMRIGHT = 8 +} + +local default_shader = nil +local default_shader_source = [[ +#VERTEX_SHADER + +Vertex vert(Vertex v) +{ + return v; +} + +#END_VERTEX_SHADER + +#FRAGMENT_SHADER + +Color frag(Color col, Texture tex, Vertex v) +{ + return col * texel(tex, v.uv); +} + +#END_FRAGMENT_SHADER +]] + +local _init = jg.init +local initialized = false + +jg.init = function(setting) + if initialized then + return initialized + end + initialized = _init(setting) + if initialized then + default_shader = jg.newShader(default_shader_source) + jg.useShader(default_shader) + end + return initialized +end + +jg.unuseShader = function() + jg.useShader(default_shader) +end + +-- Reset all attributes to default value. +jg.reset = function() + jg.setColor(255, 255, 255, 255) + jg.setClearColor(0, 0, 0, 255) + jg.clear() + jg.unsetFont() + jg.unuseShader() +end + +)";
\ No newline at end of file diff --git a/src/lua/embed/keyboard.lua.h b/src/lua/embed/scripts/keyboard.lua.h index ee8428f..e989928 100644 --- a/src/lua/embed/keyboard.lua.h +++ b/src/lua/embed/scripts/keyboard.lua.h @@ -2,6 +2,8 @@ static const char* keyboard_lua = R"( jin.keyboard = jin.keyboard or {} +local jk = jin.keyboard + local keys = {} function jin.keyboard.isPressed(k) diff --git a/src/lua/embed/mouse.lua.h b/src/lua/embed/scripts/mouse.lua.h index 3c222f3..ca070a3 100644 --- a/src/lua/embed/mouse.lua.h +++ b/src/lua/embed/scripts/mouse.lua.h @@ -1,6 +1,8 @@ static const char* mouse_lua = R"( jin.mouse = jin.mouse or {} +local jm = jin.mouse + local button = {} function jin.mouse.isDown(btn) diff --git a/src/lua/embed/net.lua.h b/src/lua/embed/scripts/net.lua.h index 4d89dc7..a986ce6 100644 --- a/src/lua/embed/net.lua.h +++ b/src/lua/embed/scripts/net.lua.h @@ -1,4 +1,7 @@ /* net.lua */ static const char* net_lua = R"( jin.net = jin.net or {} + +local jn = jin.net + )";
\ No newline at end of file diff --git a/src/lua/embed/path.lua.h b/src/lua/embed/scripts/path.lua.h index 648adf8..f7e1ec3 100644 --- a/src/lua/embed/path.lua.h +++ b/src/lua/embed/scripts/path.lua.h @@ -2,6 +2,8 @@ static const char* path_lua = R"( jin.path = jin.path or {} +local jp = jin.path + -- game root directory jin._root = nil |