embed event api compatibility lua script
probably temporary, can't deprecate and remove an extremely common api in the same version. lua script embed code mostly copied from my mod
This commit is contained in:
parent
e48bd482f6
commit
2929264885
@ -180,7 +180,7 @@ if GetOption("msvc"):
|
||||
env.Append(LIBPATH=['StaticLibs/'])
|
||||
else:
|
||||
env.Append(LIBPATH=['Libraries/'])
|
||||
env.Append(CPPPATH=['includes/'])
|
||||
env.Append(CPPPATH=['includes/', 'resources/'])
|
||||
|
||||
#Check 32/64 bit
|
||||
def CheckBit(context):
|
||||
|
@ -1,4 +1,5 @@
|
||||
#define IDI_ICON1 101
|
||||
#define IDI_ICON2 102
|
||||
#include "resource.h"
|
||||
|
||||
IDI_ICON1 ICON DISCARDABLE "powder.ico"
|
||||
IDI_ICON2 ICON DISCARDABLE "document.ico"
|
||||
IDI_EVENTCOMPAT LUASCRIPT "../src/lua/luascripts/eventcompat.lua"
|
||||
|
7
resources/resource.h
Normal file
7
resources/resource.h
Normal file
@ -0,0 +1,7 @@
|
||||
#define LUASCRIPT 256
|
||||
|
||||
#define IDI_ICON1 101
|
||||
#define IDI_ICON2 102
|
||||
#define IDI_TPTMP 103
|
||||
#define IDI_SCRIPTMANAGER 104
|
||||
#define IDI_EVENTCOMPAT 105
|
@ -132,4 +132,16 @@ long unsigned int GetTime()
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void LoadFileInResource(int name, int type, unsigned int& size, const char*& data)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
HMODULE handle = ::GetModuleHandle(NULL);
|
||||
HRSRC rc = ::FindResource(handle, MAKEINTRESOURCE(name), MAKEINTRESOURCE(type));
|
||||
HGLOBAL rcData = ::LoadResource(handle, rc);
|
||||
size = ::SizeofResource(handle, rc);
|
||||
data = static_cast<const char*>(::LockResource(rcData));
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ namespace Platform
|
||||
|
||||
void Millisleep(long int t);
|
||||
long unsigned int GetTime();
|
||||
|
||||
void LoadFileInResource(int name, int type, unsigned int& size, const char*& data);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -19,6 +19,7 @@ extern int tptPropertiesVersion;
|
||||
extern int tptElements; //Table for TPT element names
|
||||
extern int tptParts, tptPartsMeta, tptElementTransitions, tptPartsCData, tptPartMeta, tptPart, cIndex;
|
||||
|
||||
void luaopen_eventcompat(lua_State *l);
|
||||
void luacon_hook(lua_State *L, lua_Debug *ar);
|
||||
int luacon_eval(const char *command);
|
||||
String luacon_geterror();
|
||||
|
@ -335,6 +335,9 @@ tpt.partsdata = nil");
|
||||
lua_setmetatable(l, -2);
|
||||
|
||||
initLegacyProps();
|
||||
|
||||
ui::Engine::Ref().LastTick(Platform::GetTime());
|
||||
luaopen_eventcompat(l);
|
||||
}
|
||||
|
||||
void LuaScriptInterface::Init()
|
||||
|
174
src/lua/luascripts/eventcompat.lua
Normal file
174
src/lua/luascripts/eventcompat.lua
Normal file
@ -0,0 +1,174 @@
|
||||
if not event then
|
||||
return
|
||||
end
|
||||
|
||||
local deprecated_scripts = {}
|
||||
local timer = nil
|
||||
local function print_deprecation_warnings()
|
||||
if not timer or timer <= 0 then
|
||||
event.unregister(event.tick, print_deprecation_warnings)
|
||||
else
|
||||
timer = timer - 1
|
||||
return
|
||||
end
|
||||
|
||||
local deprecated = {}
|
||||
for k,v in pairs(deprecated_scripts) do
|
||||
table.insert(deprecated, k)
|
||||
end
|
||||
local start_message = #deprecated == 1 and "This script is" or "These scripts are"
|
||||
print(start_message.." using a legacy event api and should be updated: ")
|
||||
print("\""..table.concat(deprecated, "\", \"").."\"")
|
||||
end
|
||||
|
||||
local function deprecationwarning()
|
||||
-- no warning for now
|
||||
--[[local calling_file_info = debug.getinfo(3, "S")
|
||||
if calling_file_info then
|
||||
calling_file_info = calling_file_info["short_src"]
|
||||
|
||||
if calling_file_info then
|
||||
deprecated_scripts[calling_file_info] = true
|
||||
if not timer then
|
||||
timer = 5
|
||||
event.register(event.tick, print_deprecation_warnings)
|
||||
end
|
||||
end
|
||||
end]]
|
||||
end
|
||||
|
||||
|
||||
function tpt.register_step(f)
|
||||
deprecationwarning()
|
||||
|
||||
event.register(event.tick, f)
|
||||
end
|
||||
|
||||
function tpt.unregister_step(f)
|
||||
deprecationwarning()
|
||||
|
||||
event.unregister(event.tick, f)
|
||||
end
|
||||
|
||||
local registered_mouseclicks = {}
|
||||
function tpt.register_mouseclick(f)
|
||||
deprecationwarning()
|
||||
|
||||
local mousex = -1
|
||||
local mousey = -1
|
||||
local mousedown = -1
|
||||
local function mousedownfunc(x, y, button)
|
||||
--replicate hack in original function
|
||||
if button == 3 then
|
||||
button = 4
|
||||
end
|
||||
mousex = x
|
||||
mousey = y
|
||||
mousedown = button
|
||||
return f(x, y, button, 1, 0)
|
||||
end
|
||||
local function mouseupfunc(x, y, button, evt)
|
||||
--ignore automatic mouseup event sent when switching windows
|
||||
if mousedown == -1 and evt == 1 then
|
||||
return
|
||||
end
|
||||
--replicate hack in original function
|
||||
if button == 3 then
|
||||
button = 4
|
||||
end
|
||||
local evtType = 2
|
||||
if evt == 1 then
|
||||
evtType = 4
|
||||
elseif evt == 2 then
|
||||
evtType = 5
|
||||
end
|
||||
--zoom window cancel
|
||||
--Original function would have started returning 0 for mousetick events
|
||||
--(until the actual mousedown), but we don't replicate that here
|
||||
if evt ~= 2 then
|
||||
mousedown = -1
|
||||
end
|
||||
return f(x, y, button, evtType, 0)
|
||||
end
|
||||
local function mousemovefunc(x, y, dx, dy)
|
||||
mousex = x
|
||||
mousey = y
|
||||
end
|
||||
local function mousewheelfunc(x, y, d)
|
||||
return f(x, y, 0, 0, d)
|
||||
end
|
||||
local function tickfunc()
|
||||
if mousedown ~= -1 then
|
||||
return f(mousex, mousey, mousedown, 3, 0)
|
||||
end
|
||||
end
|
||||
|
||||
event.register(event.mousedown, mousedownfunc)
|
||||
event.register(event.mouseup, mouseupfunc)
|
||||
event.register(event.mousemove, mousemovefunc)
|
||||
event.register(event.mousewheel, mousewheelfunc)
|
||||
event.register(event.tick, tickfunc)
|
||||
|
||||
local funcs = {mousedownfunc, mouseupfunc, mousemovefunc, mousewheelfunc, tickfunc}
|
||||
registered_mouseclicks[f] = funcs
|
||||
end
|
||||
tpt.register_mouseevent = tpt.register_mouseclick
|
||||
|
||||
function tpt.unregister_mouseclick(f)
|
||||
if not registered_mouseclicks[f] then return end
|
||||
|
||||
local funcs = registered_mouseclicks[f]
|
||||
event.unregister(event.mousedown, funcs[1])
|
||||
event.unregister(event.mouseup, funcs[2])
|
||||
event.unregister(event.mousemove, funcs[3])
|
||||
event.unregister(event.mousewheel, funcs[4])
|
||||
event.unregister(event.tick, funcs[5])
|
||||
end
|
||||
tpt.unregister_mouseevent = tpt.unregister_mouseclick
|
||||
|
||||
function tpt.register_keypress(f)
|
||||
deprecationwarning()
|
||||
|
||||
local keyMapping = {}
|
||||
|
||||
-- lctrl, rctlr, lshift, rshift, lalt, ralt
|
||||
keyMapping[225] = 304
|
||||
keyMapping[229] = 303
|
||||
keyMapping[224] = 306
|
||||
keyMapping[228] = 305
|
||||
keyMapping[226] = 308
|
||||
keyMapping[230] = 307
|
||||
|
||||
--up, down, right, left
|
||||
keyMapping[82] = 273
|
||||
keyMapping[81] = 274
|
||||
keyMapping[79] = 275
|
||||
keyMapping[80] = 276
|
||||
|
||||
event.register(event.keypress, function(key, scan, rep, shift, ctrl, alt)
|
||||
if rep then return end
|
||||
local mod = event.getmodifiers()
|
||||
|
||||
-- attempt to convert to string representation
|
||||
err, keyStr = pcall(string.char, key)
|
||||
if not err then keyStr = "" end
|
||||
if keyStr ~= "" and shift then keyStr = string.upper(keyStr) end
|
||||
|
||||
-- key mapping for common keys, extremely incomplete
|
||||
if keyMapping[scan] then key = keyMapping[scan] end
|
||||
return f(keyStr, key, mod, 1)
|
||||
end)
|
||||
|
||||
event.register(event.keyrelease, function(key, scan, rep, shift, ctrl, alt)
|
||||
local mod = event.getmodifiers()
|
||||
|
||||
-- attempt to convert to string representation
|
||||
err, keyStr = pcall(string.char, key)
|
||||
if not err then keyStr = "" end
|
||||
|
||||
-- key mapping for common keys, extremely incomplete
|
||||
if keyMapping[scan] then key = keyMapping[scan] end
|
||||
return f(keyStr, key, mod, 2)
|
||||
end)
|
||||
end
|
||||
tpt.register_keyevent = tpt.register_keypress
|
27
src/lua/luascripts/eventcompat.lua.cpp
Normal file
27
src/lua/luascripts/eventcompat.lua.cpp
Normal file
File diff suppressed because one or more lines are too long
27
src/lua/luascripts/eventcompat.lua.orig
Normal file
27
src/lua/luascripts/eventcompat.lua.orig
Normal file
@ -0,0 +1,27 @@
|
||||
#ifdef LUACONSOLE
|
||||
#ifdef _MSC_VER
|
||||
#include "Platform.h"
|
||||
#include "resource.h"
|
||||
#endif
|
||||
#include "lua/LuaCompat.h"
|
||||
|
||||
void luaopen_eventcompat(lua_State *l)
|
||||
{
|
||||
#ifndef _MSC_VER
|
||||
int eventcompat_luac_sz = /*#SIZE*/;
|
||||
const char* eventcompat_luac = /*#DATA*/;
|
||||
luaL_loadbuffer(l, eventcompat_luac, eventcompat_luac_sz, "@eventcompat.lua");
|
||||
lua_pcall(l, 0, 0, 0);
|
||||
#else
|
||||
unsigned int size = 0;
|
||||
const char* data = NULL;
|
||||
Platform::LoadFileInResource(IDI_EVENTCOMPAT, LUASCRIPT, size, data);
|
||||
char *buffer = new char[size+1];
|
||||
::memcpy(buffer, data, size);
|
||||
buffer[size] = 0;
|
||||
luaL_loadbuffer(l, buffer, size, "@eventcompat.lua");
|
||||
lua_pcall(l, 0, 0, 0);
|
||||
delete[] buffer;
|
||||
#endif
|
||||
}
|
||||
#endif
|
27
src/lua/luascripts/file2c.py
Normal file
27
src/lua/luascripts/file2c.py
Normal file
@ -0,0 +1,27 @@
|
||||
#file from mniip, https://github.com/mniip/The-Powder-Toy/commit/d46d9f3f815d
|
||||
import sys
|
||||
import re
|
||||
|
||||
def encode(x):
|
||||
x = x.group(0)
|
||||
if x == '\n':
|
||||
return '\\n';
|
||||
if x == '"':
|
||||
return '\\"';
|
||||
if x == '\\':
|
||||
return '\\\\';
|
||||
return '\\{0:03o}'.format(ord(x))
|
||||
|
||||
f = open(sys.argv[2], 'rb')
|
||||
|
||||
data = f.read().decode('utf-8')
|
||||
f.close()
|
||||
size = len(data)
|
||||
data = '"' + re.sub(r'[^ -~]|"|\\', encode, data) + '"';
|
||||
|
||||
i = open(sys.argv[3], 'r')
|
||||
o = open(sys.argv[1], 'w')
|
||||
o.write(i.read().replace('/*#SIZE*/', str(size)).replace('/*#DATA*/', data))
|
||||
i.close()
|
||||
o.close()
|
||||
|
Loading…
Reference in New Issue
Block a user