Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
- Loading branch information
Showing
11 changed files
with
284 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 = 4458; | ||
const char* eventcompat_luac = "if not event then\n\011return\nend\n\nlocal deprecated_scripts = {}\nlocal timer = nil\nlocal function print_deprecation_warnings()\n\011if not timer or timer <= 0 then\n\011\011event.unregister(event.tick, print_deprecation_warnings)\n\011else\n\011\011timer = timer - 1\n\011\011return\n\011end\n\n\011local deprecated = {}\n\011for k,v in pairs(deprecated_scripts) do\n\011\011table.insert(deprecated, k)\n\011end\n\011local start_message = #deprecated == 1 and \"This script is\" or \"These scripts are\"\n\011print(start_message..\" using a legacy event api and should be updated: \")\n\011print(\"\\\"\"..table.concat(deprecated, \"\\\", \\\"\")..\"\\\"\")\nend\n\nlocal function deprecationwarning()\n\011-- no warning for now\n\011--[[local calling_file_info = debug.getinfo(3, \"S\")\n\011if calling_file_info then\n\011\011calling_file_info = calling_file_info[\"short_src\"]\n\n\011\011if calling_file_info then\n\011\011\011deprecated_scripts[calling_file_info] = true\n\011\011\011if not timer then\n\011\011\011\011timer = 5\n\011\011\011\011event.register(event.tick, print_deprecation_warnings)\n\011\011\011end\n\011\011end\n\011end]]\nend\n\n\nfunction tpt.register_step(f)\n\011deprecationwarning()\n\n\011event.register(event.tick, f)\nend\n\nfunction tpt.unregister_step(f)\n\011deprecationwarning()\n\n\011event.unregister(event.tick, f)\nend\n\nlocal registered_mouseclicks = {}\nfunction tpt.register_mouseclick(f)\n\011deprecationwarning()\n\n\011local mousex = -1\n\011local mousey = -1\n\011local mousedown = -1\n\011local function mousedownfunc(x, y, button)\n\011\011--replicate hack in original function\n\011\011if button == 3 then\n\011\011\011button = 4\n\011\011end\n\011\011mousex = x\n\011\011mousey = y\n\011\011mousedown = button\n\011\011return f(x, y, button, 1, 0)\n\011end\n\011local function mouseupfunc(x, y, button, evt)\n\011\011--ignore automatic mouseup event sent when switching windows\n\011\011if mousedown == -1 and evt == 1 then\n\011\011\011return\n\011\011end\n\011\011--replicate hack in original function\n\011\011if button == 3 then\n\011\011\011button = 4\n\011\011end\n\011\011local evtType = 2\n\011\011if evt == 1 then\n\011\011\011evtType = 4\n\011\011elseif evt == 2 then\n\011\011\011evtType = 5\n\011\011end\n\011\011--zoom window cancel\n\011\011--Original function would have started returning 0 for mousetick events\n\011\011--(until the actual mousedown), but we don't replicate that here\n\011\011if evt ~= 2 then\n\011\011\011mousedown = -1\n\011\011end\n\011\011return f(x, y, button, evtType, 0)\n\011end\n\011local function mousemovefunc(x, y, dx, dy)\n\011\011mousex = x\n\011\011mousey = y\n\011end\n\011local function mousewheelfunc(x, y, d)\n\011\011return f(x, y, 0, 0, d)\n\011end\n\011local function tickfunc()\n\011\011if mousedown ~= -1 then\n\011\011\011return f(mousex, mousey, mousedown, 3, 0)\n\011\011end\n\011end\n\n\011event.register(event.mousedown, mousedownfunc)\n\011event.register(event.mouseup, mouseupfunc)\n\011event.register(event.mousemove, mousemovefunc)\n\011event.register(event.mousewheel, mousewheelfunc)\n\011event.register(event.tick, tickfunc)\n\011\n\011local funcs = {mousedownfunc, mouseupfunc, mousemovefunc, mousewheelfunc, tickfunc}\n\011registered_mouseclicks[f] = funcs\nend\ntpt.register_mouseevent = tpt.register_mouseclick\n\nfunction tpt.unregister_mouseclick(f)\n\011if not registered_mouseclicks[f] then return end\n\n\011local funcs = registered_mouseclicks[f]\n\011event.unregister(event.mousedown, funcs[1])\n\011event.unregister(event.mouseup, funcs[2])\n\011event.unregister(event.mousemove, funcs[3])\n\011event.unregister(event.mousewheel, funcs[4])\n\011event.unregister(event.tick, funcs[5])\nend\ntpt.unregister_mouseevent = tpt.unregister_mouseclick\n\nfunction tpt.register_keypress(f)\n\011deprecationwarning()\n\n\011local keyMapping = {}\n\n\011-- lctrl, rctlr, lshift, rshift, lalt, ralt\n\011keyMapping[225] = 304\n\011keyMapping[229] = 303\n\011keyMapping[224] = 306\n\011keyMapping[228] = 305\n\011keyMapping[226] = 308\n\011keyMapping[230] = 307\n\n\011--up, down, right, left\n\011keyMapping[82] = 273\n\011keyMapping[81] = 274\n\011keyMapping[79] = 275\n\011keyMapping[80] = 276\n\n\011event.register(event.keypress, function(key, scan, rep, shift, ctrl, alt)\n\011\011if rep then return end\n\011\011local mod = event.getmodifiers()\n\n\011\011-- attempt to convert to string representation\n\011\011err, keyStr = pcall(string.char, key)\n\011\011if not err then keyStr = \"\" end\n\011\011if keyStr ~= \"\" and shift then keyStr = string.upper(keyStr) end\n\n\011\011-- key mapping for common keys, extremely incomplete\n\011\011if keyMapping[scan] then key = keyMapping[scan] end\n\011\011return f(keyStr, key, mod, 1)\n\011end)\n\n\011event.register(event.keyrelease, function(key, scan, rep, shift, ctrl, alt)\n\011\011local mod = event.getmodifiers()\n\n\011\011-- attempt to convert to string representation\n\011\011err, keyStr = pcall(string.char, key)\n\011\011if not err then keyStr = \"\" end\n\n\011\011-- key mapping for common keys, extremely incomplete\n\011\011if keyMapping[scan] then key = keyMapping[scan] end\n\011\011return f(keyStr, key, mod, 2)\n\011end)\nend\ntpt.register_keyevent = tpt.register_keypress\n"; | ||
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() | ||
|