aboutsummaryrefslogtreecommitdiff
path: root/src/lua/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/modules')
-rw-r--r--src/lua/modules/_embed/boot.lua.h171
-rw-r--r--src/lua/modules/_embed/embed.h46
-rw-r--r--src/lua/modules/_embed/graphics.lua.h4
-rw-r--r--src/lua/modules/_embed/keyboard.lua.h15
-rw-r--r--src/lua/modules/_embed/mouse.lua.h14
-rw-r--r--src/lua/modules/_embed/net.lua.h4
-rw-r--r--src/lua/modules/_embed/path.lua.h14
-rw-r--r--src/lua/modules/event/event.cpp50
-rw-r--r--src/lua/modules/graphics/graphics.cpp1
-rw-r--r--src/lua/modules/jin.cpp109
-rw-r--r--src/lua/modules/jin.h27
-rw-r--r--src/lua/modules/joypad/joypad.cpp2
-rw-r--r--src/lua/modules/keyboard/keyboard.cpp1
-rw-r--r--src/lua/modules/luax.h2
-rw-r--r--src/lua/modules/thread/Thread.cpp2
15 files changed, 38 insertions, 424 deletions
diff --git a/src/lua/modules/_embed/boot.lua.h b/src/lua/modules/_embed/boot.lua.h
deleted file mode 100644
index f7ffc43..0000000
--- a/src/lua/modules/_embed/boot.lua.h
+++ /dev/null
@@ -1,171 +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)
- 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
-
-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)
- local tab = ' '
- print("Error:\n" .. msg)
- function jin.core.onEvent(e)
- if e.type == 'quit' then
- jin.core.stop()
- end
- end
- local ww, wh = jin.graphics.getSize()
- function jin.core.onDraw()
- jin.graphics.write("Error: ", 10, 10, 30, 3, 30)
- jin.graphics.write(msg, 10, 50)
- end
-end
-
-local function boot()
- if jin.filesystem.exist("main.lua") then
- -- require main game script
- xpcall(function() require"main" end, onError)
- jin.core.run()
- 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)
-
-)";
diff --git a/src/lua/modules/_embed/embed.h b/src/lua/modules/_embed/embed.h
deleted file mode 100644
index 8d0ba85..0000000
--- a/src/lua/modules/_embed/embed.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef __JIN_LUA_EMBED_H
-#define __JIN_LUA_EMBED_H
-#include <cstring>
-
-namespace jin
-{
-namespace embed
-{
-
-#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;
- };
-
- static void boot(lua_State* L)
- {
- // embed scripts
- #include "graphics.lua.h"
- #include "keyboard.lua.h"
- #include "mouse.lua.h"
- #include "boot.lua.h"
-
- // in order
- const jin_Embed scripts[] = {
- { "graphics.lua", graphics_lua },
- { "keyboard.lua", keyboard_lua },
- { "mouse.lua", mouse_lua },
- { "boot.lua", boot_lua },
- { 0, 0 }
- };
-
- for (int i = 0; scripts[i].file; ++i)
- embed(L, scripts[i].source, scripts[i].file);
- }
-
-} // embed
-} // jin
-
-#endif \ No newline at end of file
diff --git a/src/lua/modules/_embed/graphics.lua.h b/src/lua/modules/_embed/graphics.lua.h
deleted file mode 100644
index 1414efc..0000000
--- a/src/lua/modules/_embed/graphics.lua.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* graphics.lua */
-static const char* graphics_lua = R"(
-jin.graphics = jin.graphics or {}
-)";
diff --git a/src/lua/modules/_embed/keyboard.lua.h b/src/lua/modules/_embed/keyboard.lua.h
deleted file mode 100644
index 77bf3a9..0000000
--- a/src/lua/modules/_embed/keyboard.lua.h
+++ /dev/null
@@ -1,15 +0,0 @@
-
-static const char* keyboard_lua = R"(
-jin.keyboard = jin.keyboard or {}
-
-local keys = {}
-
-function jin.keyboard.isDown(k)
- return keys[k]
-end
-
-function jin.keyboard.set(k, status)
- keys[k] = status
-end
-
-)";
diff --git a/src/lua/modules/_embed/mouse.lua.h b/src/lua/modules/_embed/mouse.lua.h
deleted file mode 100644
index 3c222f3..0000000
--- a/src/lua/modules/_embed/mouse.lua.h
+++ /dev/null
@@ -1,14 +0,0 @@
-static const char* mouse_lua = R"(
-jin.mouse = jin.mouse or {}
-
-local button = {}
-
-function jin.mouse.isDown(btn)
- return button[btn]
-end
-
-function jin.mouse.set(btn, status)
- button[btn] = status
-end
-
-)"; \ No newline at end of file
diff --git a/src/lua/modules/_embed/net.lua.h b/src/lua/modules/_embed/net.lua.h
deleted file mode 100644
index 4d89dc7..0000000
--- a/src/lua/modules/_embed/net.lua.h
+++ /dev/null
@@ -1,4 +0,0 @@
-/* net.lua */
-static const char* net_lua = R"(
-jin.net = jin.net or {}
-)"; \ No newline at end of file
diff --git a/src/lua/modules/_embed/path.lua.h b/src/lua/modules/_embed/path.lua.h
deleted file mode 100644
index 648adf8..0000000
--- a/src/lua/modules/_embed/path.lua.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* path.lua */
-static const char* path_lua = R"(
-jin.path = jin.path or {}
-
--- game root directory
-jin._root = nil
-
--- return full path of a given path
-function jin.path.full(path)
- local root = jin._dir .. '/' .. jin._argv[2]
- return root .. '/' .. path
-end
-
-)"; \ No newline at end of file
diff --git a/src/lua/modules/event/event.cpp b/src/lua/modules/event/event.cpp
index 0fb438f..be54cf4 100644
--- a/src/lua/modules/event/event.cpp
+++ b/src/lua/modules/event/event.cpp
@@ -16,7 +16,7 @@ namespace lua
*/
static int l_event_poll(lua_State *L)
{
- // table to store events
+ /* table to store events */
luax_newtable(L);
static Event e;
int i = 1;
@@ -35,14 +35,10 @@ namespace lua
break;
case EventType::KEY_DOWN:
- luax_setfieldstring(L, "type", "KeyDown");
- luax_setfieldstring(L, "key", getKeyName(e.key.keysym.sym));
- break;
-
case EventType::KEY_UP:
- luax_setfieldstring(L, "type", "KeyUp");
+ luax_setfieldstring(L, "type", EventType::KEY_DOWN ? "KeyDown" : "KeyUp");
luax_setfieldstring(L, "key", getKeyName(e.key.keysym.sym));
- break;
+ break;
case EventType::MOUSE_MOTION:
luax_setfieldstring(L, "type", "MouseMotion");
@@ -51,18 +47,12 @@ namespace lua
break;
case EventType::MOUSE_BUTTON_DOWN:
- luax_setfieldstring(L, "type", "MouseButtonDown");
- luax_setfieldstring(L, "button", getButtonName(e.button.button));
- luax_setfieldnumber(L, "x", e.button.x);
- luax_setfieldnumber(L, "y", e.button.y);
- break;
-
case EventType::MOUSE_BUTTON_UP:
- luax_setfieldstring(L, "type", "MouseButtonUp");
+ luax_setfieldstring(L, "type", e.type == EventType::MOUSE_BUTTON_DOWN ? "MouseButtonDown" : "MouseButtonUp");
luax_setfieldstring(L, "button", getButtonName(e.button.button));
luax_setfieldnumber(L, "x", e.button.x);
luax_setfieldnumber(L, "y", e.button.y);
- break;
+ break;
case EventType::MOUSE_WHEEL:
luax_setfieldstring(L, "type", "Wheel");
@@ -80,6 +70,36 @@ namespace lua
luax_setfieldstring(L, "y", "None");
break;
+ case EventType::JOYBUTTONDOWN:
+ case EventType::JOYBUTTONUP:
+ luax_setfieldstring(L, "type", e.type == EventType::JOYBUTTONDOWN ? "JoyButtonDown" : "JoyButtonUp");
+ luax_setfieldinteger(L, "which", e.jbutton.which);
+ luax_setfieldstring(L, "button", input::getJoyButtonName(e.jbutton.button));
+ break;
+
+ case EventType::JOYAXISMOTION:
+ luax_setfieldstring(L, "type", "JoyAxisMotion");
+ luax_setfieldinteger(L, "which", e.jaxis.which);
+ luax_setfieldfstring(L, "axis", input::getJoyAxisName(e.jaxis.axis));
+ break;
+
+ case EventType::JOYBALLMOTION:
+ case EventType::JOYHATMOTION:
+
+ case EventType::JOYDEVICEADDED:
+ case EventType::JOYDEVICEREMOVED:
+ luax_setfieldfstring(L, "type", e.type == EventType::JOYDEVICEADDED ? "JoyDeviceAdded" : "JoyDeviceRemoved");
+ luax_setfieldinteger(L, "which", e.jdevice.which);
+ break;
+
+ //https://stackoverflow.com/questions/50022316/what-is-sdl-joystick-and-what-is-sdl-gamecontroller-what-are-the-relationships
+ case EventType::CONTROLLERBUTTONDOWN:
+ case EventType::CONTROLLERBUTTONUP:
+
+
+ case EventType::CONTROLLERAXISMOTION:
+
+
default:
/* ignore other events */
luax_pop(L, 1); // pop table out
diff --git a/src/lua/modules/graphics/graphics.cpp b/src/lua/modules/graphics/graphics.cpp
index 92bc7d5..d374f51 100644
--- a/src/lua/modules/graphics/graphics.cpp
+++ b/src/lua/modules/graphics/graphics.cpp
@@ -2,7 +2,6 @@
#include "lua/modules/types.h"
#include "libjin/jin.h"
#include "lua/common/common.h"
-#include "lua/modules/_embed/graphics.lua.h"
namespace jin
{
diff --git a/src/lua/modules/jin.cpp b/src/lua/modules/jin.cpp
deleted file mode 100644
index 5e92ce1..0000000
--- a/src/lua/modules/jin.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-#include "jin.h"
-#include "lua/modules/luax.h"
-#include "_embed/embed.h"
-
-namespace jin
-{
-namespace lua
-{
-
- extern int luaopen_core(lua_State* L);
- extern int luaopen_graphics(lua_State* L);
- extern int luaopen_audio(lua_State* L);
- extern int luaopen_net(lua_State* L);
- extern int luaopen_event(lua_State* L);
- extern int luaopen_time(lua_State* L);
- extern int luaopen_mouse(lua_State* L);
- extern int luaopen_keyboard(lua_State* L);
- extern int luaopen_filesystem(lua_State* L);
- extern int luaopen_joypad(lua_State* L);
- extern int luaopen_math(lua_State* L);
- extern int luaopen_thread(lua_State* L);
- extern int luaopen_bit(lua_State* L);
-
- static int l_getversion(lua_State* L)
- {
- luax_pushstring(L, VERSION);
- return 1;
- }
-
- static int l_getAuthor(lua_State* L)
- {
- luax_pushstring(L, AUTHOR);
- return 1;
- }
-
- static int l_getOS(lua_State* L)
- {
- #ifdef _WIN32
- luax_pushstring(L, "windows");
- #elif defined __unix__
- luax_pushstring(L, "unix");
- #elif defined __APPLE__
- luax_pushstring(L, "macos");
- #endif
- return 1;
- }
-
- static int l_revision(lua_State* L)
- {
- luax_pushnumber(L, REVISION);
- return 1;
- }
-
- static const luax_Str s[] = {
- { "version", VERSION },
- { "author", AUTHOR },
- { "codename", CODE_NAME },
- { 0, 0 }
- };
-
- static const luax_Num n[] = {
- { "revision", REVISION },
- { 0, 0 }
- };
-
- /* sub modules */
- static const luax_Ref mods[] = {
- { "core", luaopen_core },
- { "event", luaopen_event },
- { "graphics", luaopen_graphics },
- { "time", luaopen_time },
- { "mouse", luaopen_mouse },
- { "keyboard", luaopen_keyboard },
- { "filesystem", luaopen_filesystem },
- { "net", luaopen_net },
- { "audio", luaopen_audio },
- { "joypad", luaopen_joypad },
- { "math", luaopen_math },
- { "thread", luaopen_thread },
- { "bit", luaopen_bit },
- { 0, 0 }
- };
-
- /* register jin module, keep it on the top of stack */
- int luaopen_jin(lua_State* L)
- {
- luax_globaltable(L, MODULE_NAME);
-
- /* register values */
- luax_setfieldstrings(L, s);
- luax_setfieldnumbers(L, n);
-
- /* register submodules */
- for (int i = 0; mods[i].name; ++i)
- {
- mods[i].func(L);
- luax_setfield(L, -2, mods[i].name);
- }
-
- return 1;
- }
-
- void boot(lua_State* L)
- {
- jin::embed::boot(L);
- }
-
-} // lua
-} // jin \ No newline at end of file
diff --git a/src/lua/modules/jin.h b/src/lua/modules/jin.h
deleted file mode 100644
index fe8d6dd..0000000
--- a/src/lua/modules/jin.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
-* Copyright (C) 2016~2018 chai
-*/
-
-#ifndef __JIN_M_JIN_H
-#define __JIN_M_JIN_H
-#include "luax.h"
-
-#define MODULE_NAME "jin"
-#define CODE_NAME "Side Part"
-#define VERSION "0.1.1"
-#define REVISION_S "101"
-#define REVISION 101
-#define AUTHOR "chai"
-
-namespace jin
-{
-namespace lua
-{
-
- int luaopen_jin(lua_State* L);
- void boot(lua_State* L);
-
-} // jin
-} // lua
-
-#endif // __JIN_M_JIN_H \ No newline at end of file
diff --git a/src/lua/modules/joypad/joypad.cpp b/src/lua/modules/joypad/joypad.cpp
index e951702..0f0f350 100644
--- a/src/lua/modules/joypad/joypad.cpp
+++ b/src/lua/modules/joypad/joypad.cpp
@@ -16,6 +16,6 @@ namespace lua
return 1;
}
-
+ /*SDL_JoystickGetButton*/
} // lua
} // jin \ No newline at end of file
diff --git a/src/lua/modules/keyboard/keyboard.cpp b/src/lua/modules/keyboard/keyboard.cpp
index ffbc6b9..e384671 100644
--- a/src/lua/modules/keyboard/keyboard.cpp
+++ b/src/lua/modules/keyboard/keyboard.cpp
@@ -1,5 +1,4 @@
#include "lua/modules/luax.h"
-#include "lua/modules/_embed/keyboard.lua.h"
namespace jin
{
diff --git a/src/lua/modules/luax.h b/src/lua/modules/luax.h
index 24d74e4..f45af39 100644
--- a/src/lua/modules/luax.h
+++ b/src/lua/modules/luax.h
@@ -1,6 +1,6 @@
#ifndef __JIN_MODULES_LUAX_H
#define __JIN_MODULES_LUAX_H
-#include "../../luax.h"
+#include "../luax.h"
#endif \ No newline at end of file
diff --git a/src/lua/modules/thread/Thread.cpp b/src/lua/modules/thread/Thread.cpp
index 5f458ab..43c5903 100644
--- a/src/lua/modules/thread/Thread.cpp
+++ b/src/lua/modules/thread/Thread.cpp
@@ -1,7 +1,7 @@
#include "lua/modules/luax.h"
#include "lua/modules/types.h"
#include "libjin/jin.h"
-#include "lua/modules/jin.h"
+#include "lua/jin.h"
#include "lua/common/common.h"
#include "thread.h"