34 lines
1.2 KiB
Lua
34 lines
1.2 KiB
Lua
require 'winapi'
|
|
|
|
fceuxWindowDY = 0;
|
|
fceuxWindowDX = 0;
|
|
MIN_JUMP_POWER = -20;
|
|
|
|
function jumpingWindow()
|
|
desktopWidth, desktopHeight = winapi.get_desktop_window():get_bounds();
|
|
|
|
fceuxWindow = winapi.find_window("FCEUXWindowClass", nil);
|
|
fceuxWindowX, fceuxWindowY = fceuxWindow:get_position();
|
|
fceuxWindowWidth, fceuxWindowHeight = fceuxWindow:get_bounds();
|
|
|
|
fceuxWindowDY = fceuxWindowDY + 1; -- gravity
|
|
fceuxWindowY = fceuxWindowY + fceuxWindowDY;
|
|
if (fceuxWindowY + fceuxWindowHeight >= desktopHeight and fceuxWindowDY >= 0) then
|
|
fceuxWindowY = desktopHeight - fceuxWindowHeight - 1;
|
|
-- bounce from floor
|
|
fceuxWindowDY = (0 - fceuxWindowDY) * 0.9;
|
|
if (fceuxWindowDY > MIN_JUMP_POWER) then fceuxWindowDY = MIN_JUMP_POWER - math.random(10); end
|
|
fceuxWindowDX = math.random(-7, 7);
|
|
end
|
|
|
|
fceuxWindowX = fceuxWindowX + fceuxWindowDX;
|
|
if ((fceuxWindowX < 0 and fceuxWindowDX < 0) or (fceuxWindowX + fceuxWindowWidth >= desktopWidth and fceuxWindowDX > 0)) then
|
|
-- bounce from sides
|
|
fceuxWindowDX = 0 - fceuxWindowDX;
|
|
end
|
|
|
|
fceuxWindow:resize(fceuxWindowX, fceuxWindowY, fceuxWindowWidth, fceuxWindowHeight);
|
|
end
|
|
|
|
emu.registerbefore(jumpingWindow);
|