Fixed some broken functions, added Lua test script to tools
Note I only plan to add files to the tools folder that are helpful for quickly testing the implemented Lua functions. (they aren't used in the build.)
This commit is contained in:
parent
487b80c06a
commit
7283efcb03
|
@ -258,6 +258,7 @@ public:
|
||||||
bool doAudioSync;
|
bool doAudioSync;
|
||||||
|
|
||||||
melonDS::u32 getInputMask(){return inputMask;}
|
melonDS::u32 getInputMask(){return inputMask;}
|
||||||
|
std::map<melonDS::u8,bool> KeyboardMask; //For Lua Scripts
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::unique_ptr<melonDS::Savestate> backupState;
|
std::unique_ptr<melonDS::Savestate> backupState;
|
||||||
|
|
|
@ -71,6 +71,10 @@ void EmuInstance::inputInit()
|
||||||
hotkeyMask = 0;
|
hotkeyMask = 0;
|
||||||
lastHotkeyMask = 0;
|
lastHotkeyMask = 0;
|
||||||
|
|
||||||
|
for (int i=0;i<256;i++){
|
||||||
|
KeyboardMask[i]=false;
|
||||||
|
}
|
||||||
|
|
||||||
joystick = nullptr;
|
joystick = nullptr;
|
||||||
controller = nullptr;
|
controller = nullptr;
|
||||||
hasRumble = false;
|
hasRumble = false;
|
||||||
|
@ -218,6 +222,11 @@ int getEventKeyVal(QKeyEvent* event)
|
||||||
|
|
||||||
void EmuInstance::onKeyPress(QKeyEvent* event)
|
void EmuInstance::onKeyPress(QKeyEvent* event)
|
||||||
{
|
{
|
||||||
|
if (event->key()<256)
|
||||||
|
KeyboardMask[event->key()]=true;
|
||||||
|
if ((event->key()&0x01000000)>0 && (event->key()&0xff)<0x41) //special keys (there is probably a less messy way to write this...)
|
||||||
|
KeyboardMask[0xff - (event->key()&0xff)]=true;
|
||||||
|
|
||||||
int keyHK = getEventKeyVal(event);
|
int keyHK = getEventKeyVal(event);
|
||||||
int keyKP = keyHK;
|
int keyKP = keyHK;
|
||||||
keyStrokes.push_back(keyHK);
|
keyStrokes.push_back(keyHK);
|
||||||
|
@ -235,6 +244,11 @@ void EmuInstance::onKeyPress(QKeyEvent* event)
|
||||||
|
|
||||||
void EmuInstance::onKeyRelease(QKeyEvent* event)
|
void EmuInstance::onKeyRelease(QKeyEvent* event)
|
||||||
{
|
{
|
||||||
|
if (event->key()<256)
|
||||||
|
KeyboardMask[event->key()]=false;
|
||||||
|
if ((event->key()&0x01000000)>0 && (event->key()&0xff)<0x41)//special keys
|
||||||
|
KeyboardMask[0xff - (event->key()&0xff)]=false;
|
||||||
|
|
||||||
int keyHK = getEventKeyVal(event);
|
int keyHK = getEventKeyVal(event);
|
||||||
int keyKP = keyHK;
|
int keyKP = keyHK;
|
||||||
if (event->modifiers() != Qt::KeypadModifier)
|
if (event->modifiers() != Qt::KeypadModifier)
|
||||||
|
|
|
@ -361,18 +361,20 @@ AddLuaFunction(Lua_Reads32,Reads32);
|
||||||
|
|
||||||
int Lua_NDSTapDown(lua_State* L)
|
int Lua_NDSTapDown(lua_State* L)
|
||||||
{
|
{
|
||||||
|
LuaBundle* bundle = get_bundle(L);
|
||||||
|
melonDS::NDS* nds = bundle->getEmuInstance()->getNDS();
|
||||||
int x = luaL_checkinteger(L,1);
|
int x = luaL_checkinteger(L,1);
|
||||||
int y = luaL_checkinteger(L,2);
|
int y = luaL_checkinteger(L,2);
|
||||||
//TODO
|
nds->TouchScreen(x,y);
|
||||||
//NDS::TouchScreen(x,y);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
AddLuaFunction(Lua_NDSTapDown,NDSTapDown);
|
AddLuaFunction(Lua_NDSTapDown,NDSTapDown);
|
||||||
|
|
||||||
int Lua_NDSTapUp(lua_State* L)
|
int Lua_NDSTapUp(lua_State* L)
|
||||||
{
|
{
|
||||||
//TODO
|
LuaBundle* bundle = get_bundle(L);
|
||||||
//NDS::ReleaseScreen();
|
melonDS::NDS* nds = bundle->getEmuInstance()->getNDS();
|
||||||
|
nds->ReleaseScreen();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
AddLuaFunction(Lua_NDSTapUp,NDSTapUp);
|
AddLuaFunction(Lua_NDSTapUp,NDSTapUp);
|
||||||
|
@ -424,6 +426,19 @@ int Lua_getMouse(lua_State* L)
|
||||||
}
|
}
|
||||||
AddLuaFunction(Lua_getMouse,GetMouse);
|
AddLuaFunction(Lua_getMouse,GetMouse);
|
||||||
|
|
||||||
|
int Lua_KeyboardMask(lua_State* L)
|
||||||
|
{
|
||||||
|
LuaBundle* bundle = get_bundle(L);
|
||||||
|
|
||||||
|
lua_createtable(L,0,256);
|
||||||
|
for (int i=0;i<256;i++){
|
||||||
|
lua_pushboolean(L,bundle->getEmuInstance()->KeyboardMask[i]);
|
||||||
|
lua_seti(L,-2,i);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
AddLuaFunction(Lua_KeyboardMask,KeyboardMask);
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------------------------
|
||||||
Front-end lua function definitions
|
Front-end lua function definitions
|
||||||
--------------------------------------------------------------------------------------------------*/
|
--------------------------------------------------------------------------------------------------*/
|
||||||
|
@ -472,7 +487,7 @@ int Lua_Flip(lua_State* L)
|
||||||
}
|
}
|
||||||
AddLuaFunction(Lua_Flip,Flip);
|
AddLuaFunction(Lua_Flip,Flip);
|
||||||
|
|
||||||
//text(int x, int y, string message, [u32 color = 'black'], [int fontsize = 9], [string fontfamily = Franklin Gothic Medium])
|
//Text(int x, int y, string message, [u32 color = 'black'], [int fontsize = 9], [string fontfamily = Franklin Gothic Medium])
|
||||||
int Lua_text(lua_State* L)
|
int Lua_text(lua_State* L)
|
||||||
{
|
{
|
||||||
LuaBundle* bundle = get_bundle(L);
|
LuaBundle* bundle = get_bundle(L);
|
||||||
|
@ -538,6 +553,21 @@ int Lua_fillrect(lua_State* L)
|
||||||
}
|
}
|
||||||
AddLuaFunction(Lua_fillrect,FillRect);
|
AddLuaFunction(Lua_fillrect,FillRect);
|
||||||
|
|
||||||
|
int Lua_Ellipse(lua_State* L)
|
||||||
|
{
|
||||||
|
LuaBundle* bundle = get_bundle(L);
|
||||||
|
melonDS::u32 color = luaL_checknumber(L,5);
|
||||||
|
int x = luaL_checknumber(L,1);
|
||||||
|
int y = luaL_checknumber(L,2);
|
||||||
|
int width = luaL_checknumber(L,3);
|
||||||
|
int height = luaL_checknumber(L,4);
|
||||||
|
QPainter painter(bundle->luaCanvas->imageBuffer);
|
||||||
|
painter.setPen(color);
|
||||||
|
painter.drawEllipse(x,y,width,height);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
AddLuaFunction(Lua_Ellipse,Ellipse);
|
||||||
|
|
||||||
int Lua_keystrokes(lua_State* L)
|
int Lua_keystrokes(lua_State* L)
|
||||||
{
|
{
|
||||||
LuaBundle* bundle = get_bundle(L);
|
LuaBundle* bundle = get_bundle(L);
|
||||||
|
@ -548,7 +578,6 @@ int Lua_keystrokes(lua_State* L)
|
||||||
lua_seti(L,-2,i);
|
lua_seti(L,-2,i);
|
||||||
}
|
}
|
||||||
bundle->getEmuInstance()->keyStrokes.clear();
|
bundle->getEmuInstance()->keyStrokes.clear();
|
||||||
lua_createtable(L,0,1);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
AddLuaFunction(Lua_keystrokes,Keys);
|
AddLuaFunction(Lua_keystrokes,Keys);
|
||||||
|
@ -590,7 +619,6 @@ AddLuaFunction(Lua_clearImageHash,ClearHash);
|
||||||
|
|
||||||
int Lua_getJoy(lua_State* L)
|
int Lua_getJoy(lua_State* L)
|
||||||
{
|
{
|
||||||
//TODO:
|
|
||||||
LuaBundle* bundle = get_bundle(L);
|
LuaBundle* bundle = get_bundle(L);
|
||||||
melonDS::u32 buttonMask=bundle->getEmuInstance()->getInputMask();//current button state.
|
melonDS::u32 buttonMask=bundle->getEmuInstance()->getInputMask();//current button state.
|
||||||
const char* keys[12] =
|
const char* keys[12] =
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 9.1 KiB |
|
@ -0,0 +1,153 @@
|
||||||
|
-- Simple Script to test most of the different Lua Functions for MelonDS
|
||||||
|
-- Written by NPO197
|
||||||
|
|
||||||
|
MelonClear()
|
||||||
|
|
||||||
|
MelonPrint("This text Should be cleared")
|
||||||
|
|
||||||
|
MelonClear()
|
||||||
|
|
||||||
|
MelonPrint("Running Test...")
|
||||||
|
|
||||||
|
u32Data = Readu32(0x00000000)
|
||||||
|
|
||||||
|
MelonPrint(string.format("DataZero: %x",u32Data))
|
||||||
|
|
||||||
|
NDSTapDown(0,0)
|
||||||
|
|
||||||
|
NDSTapUp()
|
||||||
|
|
||||||
|
--StateSave("SaveState_Auto")
|
||||||
|
|
||||||
|
--StateLoad("SaveState_Auto")
|
||||||
|
|
||||||
|
canvas = MakeCanvas(0,0,500,500)
|
||||||
|
|
||||||
|
SetCanvas(canvas)
|
||||||
|
|
||||||
|
ClearOverlay()
|
||||||
|
|
||||||
|
FillRect(0,0,55,11,0xffffffff)
|
||||||
|
|
||||||
|
Text(0,9,"Test Message")
|
||||||
|
|
||||||
|
Line(0,10,55,10,0x00ff00ff)
|
||||||
|
|
||||||
|
Rect(0,0,55,11,0xff00ff00)
|
||||||
|
|
||||||
|
DrawImage("Lua-Logo_128x128.png",0,60)
|
||||||
|
|
||||||
|
Text(0,200,"WASD to move \"lua Stylus\", Q to tap screen",0xffffff)
|
||||||
|
|
||||||
|
--ClearHash()
|
||||||
|
|
||||||
|
Flip()
|
||||||
|
|
||||||
|
|
||||||
|
-------- Main Loop ----------
|
||||||
|
|
||||||
|
typed = ""
|
||||||
|
keys = {}
|
||||||
|
joys = {}
|
||||||
|
|
||||||
|
--protected ints -> string
|
||||||
|
function pInts2Str(ints)
|
||||||
|
str = ""
|
||||||
|
for _,i in pairs(ints) do
|
||||||
|
if pcall(string.char,i) then
|
||||||
|
str = str..string.char(i)
|
||||||
|
else
|
||||||
|
MelonPrint("NonAscii:"..i)
|
||||||
|
typed = ""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return str
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
textFunctions = {
|
||||||
|
--MousePosText
|
||||||
|
[1] = function()
|
||||||
|
mouse = GetMouse()
|
||||||
|
return "MousePos:"..mouse.X..","..mouse.Y
|
||||||
|
end,
|
||||||
|
--MouseButtonText
|
||||||
|
[2] = function()
|
||||||
|
mouse = GetMouse()
|
||||||
|
str = ""
|
||||||
|
for k,v in pairs(mouse) do
|
||||||
|
if k~="X" and k~="Y" and v then
|
||||||
|
str = str..k
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return "MouseBtn:"..str
|
||||||
|
end,
|
||||||
|
--KeysText
|
||||||
|
[3] = function()
|
||||||
|
keys = Keys()
|
||||||
|
temp = pInts2Str(keys)
|
||||||
|
typed = typed..temp
|
||||||
|
return "Keys:"..typed
|
||||||
|
end,
|
||||||
|
--JoyText
|
||||||
|
[4] = function()
|
||||||
|
joys = GetJoy()
|
||||||
|
str = ""
|
||||||
|
for k,v in pairs(joys) do
|
||||||
|
if v then
|
||||||
|
str = str..k
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return "Joy:"..str
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
function TextLoop()
|
||||||
|
SetCanvas(textCanvas)
|
||||||
|
ClearOverlay()
|
||||||
|
y = 0
|
||||||
|
for _,tfunct in ipairs(textFunctions) do
|
||||||
|
y = y+10
|
||||||
|
Text(0,y,tfunct(),0xffffff)
|
||||||
|
end
|
||||||
|
Flip()
|
||||||
|
end
|
||||||
|
|
||||||
|
Stylus = {
|
||||||
|
x = 0,
|
||||||
|
y = 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
function Stylus:Loop()
|
||||||
|
move = {
|
||||||
|
--Key = {dx,dy}
|
||||||
|
["W"] = {0,-1},
|
||||||
|
["A"] = {-1,0},
|
||||||
|
["S"] = {0,1},
|
||||||
|
["D"] = {1,0}
|
||||||
|
}
|
||||||
|
mask = KeyboardMask()
|
||||||
|
for tkey,dir in pairs(move) do
|
||||||
|
if mask[string.byte(tkey)] then
|
||||||
|
self.x=self.x+dir[1]
|
||||||
|
self.y=self.y+dir[2]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if mask[string.byte("Q")] then
|
||||||
|
NDSTapDown(self.x,self.y)
|
||||||
|
else
|
||||||
|
NDSTapUp()
|
||||||
|
end
|
||||||
|
SetCanvas(vstylusCanvas)
|
||||||
|
ClearOverlay()
|
||||||
|
Ellipse(self.x-5,self.y-5,10,10,0xffffffff)
|
||||||
|
Ellipse(self.x-2,self.y-2,4,4,0x00000000)
|
||||||
|
Flip()
|
||||||
|
end
|
||||||
|
|
||||||
|
textCanvas = MakeCanvas(0,12,500,100)
|
||||||
|
vstylusCanvas = MakeCanvas(0,0,256,192,1) -- bottom screen
|
||||||
|
function _Update()
|
||||||
|
TextLoop()
|
||||||
|
Stylus:Loop()
|
||||||
|
end
|
Loading…
Reference in New Issue