|
|
|
|
@@ -160,19 +160,19 @@ int Lua_FileExists(lua_State *L) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int Lua_GetWorkingDir(lua_State *L) {
|
|
|
|
|
lua_pushlstring(LuaState, WorkingDir.data, WorkingDir.len);
|
|
|
|
|
lua_pushlstring(L, WorkingDir.data, WorkingDir.len);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int Lua_GetActiveMainWindowBufferName(lua_State *L) {
|
|
|
|
|
String name = GetActiveMainWindowBufferName();
|
|
|
|
|
lua_pushlstring(LuaState, name.data, name.len);
|
|
|
|
|
lua_pushlstring(L, name.data, name.len);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int Lua_GetActiveMainWindowBufferDir(lua_State *L) {
|
|
|
|
|
String name = GetActiveMainWindowBufferDir();
|
|
|
|
|
lua_pushlstring(LuaState, name.data, name.len);
|
|
|
|
|
lua_pushlstring(L, name.data, name.len);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -287,57 +287,62 @@ Color GetColor(String name, Color default_color) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Int GetInt(const char *name) {
|
|
|
|
|
lua_getfield(LuaState, -1, name);
|
|
|
|
|
lua_Integer num = lua_tointeger(LuaState, -1);
|
|
|
|
|
lua_pop(LuaState, 1);
|
|
|
|
|
Int GetInt(lua_State *L, const char *name) {
|
|
|
|
|
lua_getfield(L, -1, name);
|
|
|
|
|
lua_Integer num = lua_tointeger(L, -1);
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
return (Int)num;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const char *GetString(const char *name) {
|
|
|
|
|
lua_getfield(LuaState, -1, name);
|
|
|
|
|
const char *result = lua_tostring(LuaState, -1);
|
|
|
|
|
lua_pop(LuaState, 1);
|
|
|
|
|
const char *GetString(lua_State *L, const char *name) {
|
|
|
|
|
lua_getfield(L, -1, name);
|
|
|
|
|
const char *result = lua_tostring(L, -1);
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Vec2 GetVec2(const char *name) {
|
|
|
|
|
Vec2 GetVec2(lua_State *L, const char *name) {
|
|
|
|
|
Vec2 result = {};
|
|
|
|
|
lua_getfield(LuaState, -1, name);
|
|
|
|
|
defer { lua_pop(LuaState, 1); };
|
|
|
|
|
lua_getfield(L, -1, name);
|
|
|
|
|
defer { lua_pop(L, 1); };
|
|
|
|
|
|
|
|
|
|
lua_rawgeti(LuaState, -1, 1);
|
|
|
|
|
result.x = (float)lua_tonumber(LuaState, -1);
|
|
|
|
|
lua_pop(LuaState, 1);
|
|
|
|
|
{
|
|
|
|
|
lua_getfield(L, -1, "1");
|
|
|
|
|
defer { lua_pop(L, 1); };
|
|
|
|
|
result.x = (float)lua_tonumber(L, -1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lua_rawgeti(LuaState, -1, 2);
|
|
|
|
|
result.x = (float)lua_tonumber(LuaState, -1);
|
|
|
|
|
lua_pop(LuaState, 1);
|
|
|
|
|
{
|
|
|
|
|
lua_getfield(L, -1, "2");
|
|
|
|
|
defer { lua_pop(L, 1); };
|
|
|
|
|
result.y = (float)lua_tonumber(L, -1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lua_pop(LuaState, 3);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// :Event
|
|
|
|
|
int Lua_Play(lua_State *L) {
|
|
|
|
|
if (!lua_istable(L, -1)) luaL_error(LuaState, "expected a table of events");
|
|
|
|
|
if (!lua_istable(L, -1)) luaL_error(L, "expected a table of events");
|
|
|
|
|
defer { lua_pop(L, 1); };
|
|
|
|
|
|
|
|
|
|
size_t size = lua_rawlen(L, -1);
|
|
|
|
|
for (size_t i = 0; i < size; i += 1) {
|
|
|
|
|
lua_rawgeti(L, -1, i + 1);
|
|
|
|
|
int size = (int)lua_rawlen(L, -1);
|
|
|
|
|
for (int i = 0; i < size; i += 1) {
|
|
|
|
|
lua_geti(L, -1, i + 1);
|
|
|
|
|
if (!lua_istable(L, -1)) luaL_error(L, "expected a table of events");
|
|
|
|
|
defer { lua_pop(L, 1); };
|
|
|
|
|
|
|
|
|
|
Event event = {};
|
|
|
|
|
event.kind = (EventKind)GetInt("kind");
|
|
|
|
|
event.key = (SDL_Keycode)GetInt("key");
|
|
|
|
|
event.xmouse = (int16_t)GetInt("xmouse");
|
|
|
|
|
event.ymouse = (int16_t)GetInt("ymouse");
|
|
|
|
|
event.xwindow = (int16_t)GetInt("xwindow");
|
|
|
|
|
event.ywindow = (int16_t)GetInt("ywindow");
|
|
|
|
|
event.clicks = (uint8_t)GetInt("clicks");
|
|
|
|
|
event.flags = (uint8_t)GetInt("flags");
|
|
|
|
|
event.text = (char *)GetString("text");
|
|
|
|
|
event.wheel = GetVec2("wheel");
|
|
|
|
|
event.kind = (EventKind)GetInt(L, "kind");
|
|
|
|
|
event.key = (SDL_Keycode)GetInt(L, "key");
|
|
|
|
|
event.xmouse = (int16_t)GetInt(L, "xmouse");
|
|
|
|
|
event.ymouse = (int16_t)GetInt(L, "ymouse");
|
|
|
|
|
event.xwindow = (int16_t)GetInt(L, "xwindow");
|
|
|
|
|
event.ywindow = (int16_t)GetInt(L, "ywindow");
|
|
|
|
|
event.clicks = (uint8_t)GetInt(L, "clicks");
|
|
|
|
|
event.flags = (uint8_t)GetInt(L, "flags");
|
|
|
|
|
event.text = (char *)GetString(L, "text");
|
|
|
|
|
event.wheel = GetVec2(L, "wheel");
|
|
|
|
|
Add(&EventPlayback, event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -384,10 +389,9 @@ void UpdateLua() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lua_getglobal(LuaState, "OnUpdate");
|
|
|
|
|
if (lua_pcall(LuaState, 0, 0, 0) != 0) {
|
|
|
|
|
if (luaL_dostring(LuaState, "OnUpdate()") != 0) {
|
|
|
|
|
const char *error_message = lua_tostring(LuaState, -1);
|
|
|
|
|
ReportWarningf("Failed the call to OnUpdate! %s", error_message);
|
|
|
|
|
ReportWarningf("OnUpdate failed! %s", error_message);
|
|
|
|
|
lua_pop(LuaState, 1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|