From 5e5a09ad83259ba6cab48bb87a07ffb30b1d7d83 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Sat, 6 Oct 2018 16:37:44 +0200 Subject: [PATCH] Disabled debug mode for TeaVM --- .../main/java/it/cavallium/warppi/Engine.java | 9 +- .../java/it/cavallium/warppi/Platform.java | 2 + .../it/cavallium/warppi/device/Keyboard.java | 377 ++++++++++-------- .../warppi/device/PIHardwareDisplay.java | 2 +- .../warppi/extra/mario/MarioScreen.java | 44 +- .../warppi/extra/tetris/TetrisGame.java | 12 +- .../warppi/extra/tetris/TetrisScreen.java | 170 ++------ core/src/main/resources/tetrisskin.png | Bin 0 -> 29408 bytes core/src/main/resources/tetrisskin.xcf | Bin 0 -> 96275 bytes .../warppi/desktop/DesktopPlatform.java | 11 + .../graphicengine/impl/swing/SwingWindow.java | 13 +- .../warppi/hardware/HardwarePlatform.java | 7 + .../gui/graphicengine/html/HtmlEngine.java | 96 +++-- .../gui/graphicengine/html/HtmlRenderer.java | 2 +- .../cavallium/warppi/teavm/TeaVMPlatform.java | 5 + .../cavallium/warppi/teavm/TeaVMSettings.java | 2 +- 16 files changed, 379 insertions(+), 373 deletions(-) create mode 100644 core/src/main/resources/tetrisskin.png create mode 100644 core/src/main/resources/tetrisskin.xcf diff --git a/core/src/main/java/it/cavallium/warppi/Engine.java b/core/src/main/java/it/cavallium/warppi/Engine.java index 39cb380c..ef863750 100644 --- a/core/src/main/java/it/cavallium/warppi/Engine.java +++ b/core/src/main/java/it/cavallium/warppi/Engine.java @@ -89,12 +89,17 @@ public class Engine { } Engine.platform.getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, args); checkDeviceType(); - if (Engine.getPlatform().isRunningOnRaspberry() && args.isRaspberryModeAllowed()) { + if (args.isRaspberryModeAllowed() == false) { + Engine.getPlatform().setRunningOnRaspberry(false); + } + if (Engine.getPlatform().isRunningOnRaspberry()) { Engine.getPlatform().getGpio().wiringPiSetupPhys(); Engine.getPlatform().getGpio().pinMode(12, Engine.getPlatform().getGpio().valuePwmOutput()); } else { StaticVars.screenPos = new int[] { 0, 0 }; - Engine.getPlatform().getSettings().setDebugEnabled(true); + if (Engine.getPlatform().isJavascript() == false) { + Engine.getPlatform().getSettings().setDebugEnabled(true); + } } } diff --git a/core/src/main/java/it/cavallium/warppi/Platform.java b/core/src/main/java/it/cavallium/warppi/Platform.java index bf762917..5951cfaf 100644 --- a/core/src/main/java/it/cavallium/warppi/Platform.java +++ b/core/src/main/java/it/cavallium/warppi/Platform.java @@ -36,6 +36,8 @@ public interface Platform { boolean isJavascript(); + void setRunningOnRaspberry(boolean b); + boolean isRunningOnRaspberry(); String getOsName(); diff --git a/core/src/main/java/it/cavallium/warppi/device/Keyboard.java b/core/src/main/java/it/cavallium/warppi/device/Keyboard.java index f55af5ee..8aa67e43 100644 --- a/core/src/main/java/it/cavallium/warppi/device/Keyboard.java +++ b/core/src/main/java/it/cavallium/warppi/device/Keyboard.java @@ -12,6 +12,7 @@ import it.cavallium.warppi.event.KeyPressedEvent; import it.cavallium.warppi.event.KeyReleasedEvent; import it.cavallium.warppi.event.KeyboardEventListener; import it.cavallium.warppi.extra.mario.MarioScreen; +import it.cavallium.warppi.extra.tetris.TetrisScreen; import it.cavallium.warppi.gui.GUIErrorMessage; import it.cavallium.warppi.gui.screens.KeyboardDebugScreen; import it.cavallium.warppi.gui.screens.Screen; @@ -41,15 +42,15 @@ public class Keyboard { public synchronized void startKeyboard() { final Thread kt = new Thread(() -> { - if (Engine.getPlatform().getSettings().isDebugEnabled()) { + if (Engine.getPlatform().isRunningOnRaspberry() == false) { try { while (true) { if (Keyboard.debugKeyCode != -1) { - Keyboard.debugKeyPressed(Keyboard.debugKeyCode); + Keyboard.debugKey(Keyboard.debugKeyCode, false); Keyboard.debugKeyCode = -1; } if (Keyboard.debugKeyCodeRelease != -1) { - Keyboard.debugKeyReleased(Keyboard.debugKeyCodeRelease); + Keyboard.debugKey(Keyboard.debugKeyCodeRelease, true); Keyboard.debugKeyCodeRelease = -1; } Thread.sleep(50); @@ -88,9 +89,9 @@ public class Keyboard { if (data[row] == true && Keyboard.precedentStates[row][col] == false) { // System.out.println("Pressed button at " + (row + 1) + ", " + (col + 1)); // KeyboardDebugScreen.log("Pressed button at " + (row + 1) + ", " + (col + 1)); - Keyboard.keyPressedRaw(row, col); + Keyboard.keyRaw(row, col, false); } else if (data[row] == false && Keyboard.precedentStates[row][col] == true) { - Keyboard.keyReleasedRaw(row, col); + Keyboard.keyRaw(row, col, true); } // KeyboardDebugScreen.log("Released button at " + (row + 1) + ", " + (col + 1)); Keyboard.precedentStates[row][col] = data[row]; @@ -105,123 +106,141 @@ public class Keyboard { kt.start(); } - public static void debugKeyPressed(final int keyCode) { + /** + * + * @param k + * @param released true: released, false: pressed + */ + private static void debugKey(Key k, boolean released) { + if (released) { + Keyboard.keyReleased(k); + } else { + Keyboard.keyPressed(k); + } + } + + /** + * + * @param keyCode + * @param released true: released, false: pressed + */ + public static void debugKey(final int keyCode, boolean released) { switch (keyCode) { case KeyEvent.VK_ESCAPE: - Keyboard.keyPressed(Key.BACK); + debugKey(Key.BACK, released); break; case KeyEvent.VK_S: if (Keyboard.shift) { - Keyboard.keyPressed(Key.ARCSINE); + debugKey(Key.ARCSINE, released); } else if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_S); + debugKey(Key.LETTER_S, released); } else { - Keyboard.keyPressed(Key.SINE); + debugKey(Key.SINE, released); } break; case KeyEvent.VK_C: if (Keyboard.shift) { - Keyboard.keyPressed(Key.ARCCOSINE); + debugKey(Key.ARCCOSINE, released); } else if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_C); + debugKey(Key.LETTER_C, released); } else { - Keyboard.keyPressed(Key.COSINE); + debugKey(Key.COSINE, released); } break; case KeyEvent.VK_T: if (Keyboard.shift) { - Keyboard.keyPressed(Key.ARCTANGENT); + debugKey(Key.ARCTANGENT, released); } else if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_T); + debugKey(Key.LETTER_T, released); } else { - Keyboard.keyPressed(Key.TANGENT); + debugKey(Key.TANGENT, released); } break; case KeyEvent.VK_D: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.debug_DEG); + debugKey(Key.debug_DEG, released); } else if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_D); + debugKey(Key.LETTER_D, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_R: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.debug_RAD); + debugKey(Key.debug_RAD, released); } else if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_R); + debugKey(Key.LETTER_R, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_G: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.debug_GRA); + debugKey(Key.debug_GRA, released); } else if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_G); + debugKey(Key.LETTER_G, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_X: if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_X); + debugKey(Key.LETTER_X, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_P: if (Keyboard.shift) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_P); + debugKey(Key.LETTER_P, released); } else { - Keyboard.keyPressed(Key.PI); + debugKey(Key.PI, released); } break; case KeyEvent.VK_E: if (Keyboard.shift) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_E); + debugKey(Key.LETTER_E, released); } else { - Keyboard.keyPressed(Key.EULER_NUMBER); + debugKey(Key.EULER_NUMBER, released); } break; case KeyEvent.VK_Y: if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_Y); + debugKey(Key.LETTER_Y, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_B: if (Keyboard.shift) { - Keyboard.keyPressed(Key.BRIGHTNESS_CYCLE_REVERSE); + debugKey(Key.BRIGHTNESS_CYCLE_REVERSE, released); } else if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.BRIGHTNESS_CYCLE); + debugKey(Key.BRIGHTNESS_CYCLE, released); } else { - Keyboard.keyPressed(Key.LETTER_B); + debugKey(Key.LETTER_B, released); } break; case KeyEvent.VK_L: if (Keyboard.shift) { - Keyboard.keyPressed(Key.LOGARITHM); + debugKey(Key.LOGARITHM, released); } else if (Keyboard.alpha) { - Keyboard.keyPressed(Key.LETTER_L); + debugKey(Key.LETTER_L, released); } else { - Keyboard.keyPressed(Key.LOGARITHM); + debugKey(Key.LOGARITHM, released); } break; case KeyboardJogampValues.VK_ENTER: case KeyEvent.VK_ENTER: if (Keyboard.shift) { - Keyboard.keyPressed(Key.STEP); + debugKey(Key.STEP, released); } else if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.SIMPLIFY); + debugKey(Key.SIMPLIFY, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } int row = 2; int col = 1; @@ -229,134 +248,134 @@ public class Keyboard { break; case KeyEvent.VK_1: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NUM1); + debugKey(Key.NUM1, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_2: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NUM2); + debugKey(Key.NUM2, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_3: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NUM3); + debugKey(Key.NUM3, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_4: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NUM4); + debugKey(Key.NUM4, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_5: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NUM5); + debugKey(Key.NUM5, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_6: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NUM6); + debugKey(Key.NUM6, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_7: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NUM7); + debugKey(Key.NUM7, released); } else if (Keyboard.shift) { - if (Engine.getPlatform().getSettings().isDebugEnabled()) { - Keyboard.keyPressed(Key.DIVIDE); + if (Engine.getPlatform().isRunningOnRaspberry() == false) { + debugKey(Key.DIVIDE, released); } } break; case KeyEvent.VK_8: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NUM8); + debugKey(Key.NUM8, released); } else if (Keyboard.shift) { - Keyboard.keyPressed(Key.PARENTHESIS_OPEN); + debugKey(Key.PARENTHESIS_OPEN, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_9: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NUM9); + debugKey(Key.NUM9, released); } else if (Keyboard.shift) { - Keyboard.keyPressed(Key.PARENTHESIS_CLOSE); + debugKey(Key.PARENTHESIS_CLOSE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_0: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NUM0); + debugKey(Key.NUM0, released); } else if (Keyboard.shift) { - Keyboard.keyPressed(Key.EQUAL); + debugKey(Key.EQUAL, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_M: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.SURD_MODE); + debugKey(Key.SURD_MODE, released); } else if (Keyboard.shift) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.LETTER_M); + debugKey(Key.LETTER_M, released); } break; case KeyboardJogampValues.VK_ADD: case KeyEvent.VK_ADD: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.PLUS); + debugKey(Key.PLUS, released); } else if (Keyboard.shift) { - Keyboard.keyPressed(Key.PLUS_MINUS); + debugKey(Key.PLUS_MINUS, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyboardJogampValues.VK_SUBTRACT: case KeyEvent.VK_SUBTRACT: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.MINUS); + debugKey(Key.MINUS, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyboardJogampValues.VK_MULTIPLY: case KeyEvent.VK_MULTIPLY: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.MULTIPLY); + debugKey(Key.MULTIPLY, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyboardJogampValues.VK_DIVIDE: case KeyEvent.VK_DIVIDE: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.DIVIDE); + debugKey(Key.DIVIDE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_BACK_SPACE: - Keyboard.keyPressed(Key.DELETE); + debugKey(Key.DELETE, released); break; case KeyboardJogampValues.VK_DELETE: case KeyEvent.VK_DELETE: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.RESET); + debugKey(Key.RESET, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyboardJogampValues.VK_LEFT: @@ -366,9 +385,9 @@ public class Keyboard { col = 3; Keyboard.debugKeysDown[row - 1][col - 1] = true; if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.LEFT); + debugKey(Key.LEFT, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyboardJogampValues.VK_RIGHT: @@ -378,9 +397,9 @@ public class Keyboard { col = 5; Keyboard.debugKeysDown[row - 1][col - 1] = true; if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.RIGHT); + debugKey(Key.RIGHT, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyboardJogampValues.VK_UP: @@ -390,9 +409,9 @@ public class Keyboard { col = 4; Keyboard.debugKeysDown[row - 1][col - 1] = true; if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.UP); + debugKey(Key.UP, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyboardJogampValues.VK_DOWN: @@ -402,9 +421,9 @@ public class Keyboard { col = 4; Keyboard.debugKeysDown[row - 1][col - 1] = true; if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.DOWN); + debugKey(Key.DOWN, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case (short) 12: @@ -413,199 +432,199 @@ public class Keyboard { col = 4; Keyboard.debugKeysDown[row - 1][col - 1] = true; if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.OK); + debugKey(Key.OK, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyboardJogampValues.VK_NUMPAD4: case KeyEvent.VK_NUMPAD4: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.HISTORY_BACK); + debugKey(Key.HISTORY_BACK, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyboardJogampValues.VK_NUMPAD6: case KeyEvent.VK_NUMPAD6: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.HISTORY_FORWARD); + debugKey(Key.HISTORY_FORWARD, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_PERIOD: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.DOT); + debugKey(Key.DOT, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_A: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_A); + debugKey(Key.LETTER_A, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_F: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_F); + debugKey(Key.LETTER_F, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_H: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_H); + debugKey(Key.LETTER_H, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_I: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_I); + debugKey(Key.LETTER_I, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_J: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_J); + debugKey(Key.LETTER_J, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_K: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_K); + debugKey(Key.LETTER_K, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_N: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_N); + debugKey(Key.LETTER_N, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_O: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_O); + debugKey(Key.LETTER_O, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_Q: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_Q); + debugKey(Key.LETTER_Q, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_U: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_U); + debugKey(Key.LETTER_U, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_V: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_V); + debugKey(Key.LETTER_V, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_W: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_W); + debugKey(Key.LETTER_W, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyEvent.VK_Z: if (!Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } else if (Keyboard.alpha && !Keyboard.shift) { - Keyboard.keyPressed(Key.LETTER_Z); + debugKey(Key.LETTER_Z, released); } else if (Keyboard.shift && !Keyboard.alpha) { - Keyboard.keyPressed(Key.ZOOM_MODE); + debugKey(Key.ZOOM_MODE, released); } else { - Keyboard.keyPressed(Key.NONE); + debugKey(Key.NONE, released); } break; case KeyboardJogampValues.VK_SHIFT: case KeyEvent.VK_SHIFT: - Keyboard.keyPressed(Key.SHIFT); + debugKey(Key.SHIFT, released); break; case KeyEvent.VK_CONTROL: - Keyboard.keyPressed(Key.ALPHA); + debugKey(Key.ALPHA, released); break; case KeyboardJogampValues.VK_NUMPAD1: case KeyEvent.VK_NUMPAD1: - Keyboard.keyPressed(Key.SQRT); + debugKey(Key.SQRT, released); break; case KeyboardJogampValues.VK_NUMPAD2: case KeyEvent.VK_NUMPAD2: - Keyboard.keyPressed(Key.ROOT); + debugKey(Key.ROOT, released); break; case KeyboardJogampValues.VK_NUMPAD3: case KeyEvent.VK_NUMPAD3: - Keyboard.keyPressed(Key.POWER_OF_2); + debugKey(Key.POWER_OF_2, released); break; case KeyboardJogampValues.VK_NUMPAD5: case KeyEvent.VK_NUMPAD5: - Keyboard.keyPressed(Key.POWER_OF_x); + debugKey(Key.POWER_OF_x, released); break; } } @@ -655,22 +674,21 @@ public class Keyboard { } } + /** + * + * @param row + * @param col + * @return + */ + @Deprecated public static boolean isKeyDown(final int row, final int col) { - if (Engine.getPlatform().getSettings().isDebugEnabled() == false) { + if (Engine.getPlatform().isRunningOnRaspberry()) { return Keyboard.precedentStates[row - 1][col - 1]; } else { return Keyboard.debugKeysDown[row - 1][col - 1]; } } - public synchronized static void keyReleasedRaw(final int row, final int col) { -// KeyboardDebugScreen.keyX = row; -// KeyboardDebugScreen.keyY = col; - if (row == 1 && col == 1) { - //keyReleased(Key.BRIGHTNESS_CYCLE); - } - } - static final String[][][] KeyLabelsMap = /* [ROW, COLUMN, (0:normal 1:shift 2:alpha)] */ { { /* ROW 0 */ { "⇪", "⇪", null }, /* 0,0 */ @@ -687,8 +705,8 @@ public class Keyboard { { "⇦", null, null }, /* 1,2 */ { "OK", null, null }, /* 1,3 */ { "⇨", null, null }, /* 1,4 */ - { "↤", null, null }, /* 1,5 */ - { "↦", null, null }, /* 1,6 */ + { "≪", null, null }, /* 1,5 */ + { "≫", null, null }, /* 1,6 */ { "", null, null } /* 1,7 */ }, { /* ROW 2 */ { "", null, null }, /* 2,0 */ @@ -850,19 +868,33 @@ public class Keyboard { } } - public static synchronized void keyPressedRaw(final int row, final int col) { + /** + * + * @param row + * @param col + * @param released true: released, false: pressed + */ + public static synchronized void keyRaw(final int row, final int col, final boolean released) { // KeyboardDebugScreen.keyX = row; // KeyboardDebugScreen.keyY = col; final Key k = Keyboard.keyMap[row][col][Keyboard.shift ? 1 : Keyboard.alpha ? 2 : 0]; if (k != null) { - Keyboard.keyPressed(k); + if (released) { + Keyboard.keyReleased(k); + } else { + Keyboard.keyPressed(k); + } } else { - Keyboard.keyPressed(Key.NONE); + if (released) { + Keyboard.keyReleased(Key.NONE); + } else { + Keyboard.keyPressed(Key.NONE); + } } } public static void stopKeyboard() { - if (Engine.getPlatform().getSettings().isDebugEnabled() == false) { + if (Engine.getPlatform().isRunningOnRaspberry()) { Engine.getPlatform().getGpio().digitalWrite(33, false); Engine.getPlatform().getGpio().digitalWrite(35, false); Engine.getPlatform().getGpio().digitalWrite(36, false); @@ -900,6 +932,7 @@ public class Keyboard { case NONE: break; case BRIGHTNESS_CYCLE: + Engine.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(new TetrisScreen()); //TODO: rimuovere: prova Engine.INSTANCE.getHardwareDevice().getDisplayManager().cycleBrightness(false); refresh = true; break; diff --git a/core/src/main/java/it/cavallium/warppi/device/PIHardwareDisplay.java b/core/src/main/java/it/cavallium/warppi/device/PIHardwareDisplay.java index 8a506681..f652581e 100644 --- a/core/src/main/java/it/cavallium/warppi/device/PIHardwareDisplay.java +++ b/core/src/main/java/it/cavallium/warppi/device/PIHardwareDisplay.java @@ -13,7 +13,7 @@ public class PIHardwareDisplay implements HardwareDisplay { @Override public void setBrightness(final double value) { - if (Engine.getPlatform().getSettings().isDebugEnabled() == false) { + if (Engine.getPlatform().isRunningOnRaspberry()) { Engine.getPlatform().getGpio().pwmWrite(12, (int) Math.ceil(value * 1024f)); // SoftPwm.softPwmWrite(12, (int)(Math.ceil(brightness*10))); } else { diff --git a/core/src/main/java/it/cavallium/warppi/extra/mario/MarioScreen.java b/core/src/main/java/it/cavallium/warppi/extra/mario/MarioScreen.java index 70f9a000..8b5e00c2 100644 --- a/core/src/main/java/it/cavallium/warppi/extra/mario/MarioScreen.java +++ b/core/src/main/java/it/cavallium/warppi/extra/mario/MarioScreen.java @@ -7,6 +7,7 @@ import it.cavallium.warppi.StaticVars; import it.cavallium.warppi.Platform.ConsoleUtils; import it.cavallium.warppi.device.Keyboard; import it.cavallium.warppi.event.KeyPressedEvent; +import it.cavallium.warppi.event.KeyReleasedEvent; import it.cavallium.warppi.gui.HistoryBehavior; import it.cavallium.warppi.gui.graphicengine.BinaryFont; import it.cavallium.warppi.gui.graphicengine.Skin; @@ -87,12 +88,49 @@ public class MarioScreen extends Screen { } } + boolean rightPressed, leftPressed, jumpPressed; + + @Override + public boolean onKeyPressed(KeyPressedEvent k) { + switch(k.getKey()) { + case OK: + case SIMPLIFY: + case STEP: + jumpPressed = true; + return true; + case LEFT: + leftPressed = true; + return true; + case RIGHT: + rightPressed = true; + return true; + default: + return false; + } + } + + @Override + public boolean onKeyReleased(KeyReleasedEvent k) { + switch(k.getKey()) { + case OK: + case SIMPLIFY: + case STEP: + jumpPressed = false; + return true; + case LEFT: + leftPressed = false; + return true; + case RIGHT: + rightPressed = false; + return true; + default: + return false; + } + } + @Override public void beforeRender(final float dt) { if (!errored) { - final boolean rightPressed = Keyboard.isKeyDown(2, 5); - final boolean leftPressed = Keyboard.isKeyDown(2, 3); - final boolean jumpPressed = Keyboard.isKeyDown(2, 1); final boolean upPressed = false, downPressed = false, runPressed = false; g.gameTick(dt, upPressed, downPressed, leftPressed, rightPressed, jumpPressed, runPressed); diff --git a/core/src/main/java/it/cavallium/warppi/extra/tetris/TetrisGame.java b/core/src/main/java/it/cavallium/warppi/extra/tetris/TetrisGame.java index 3a3bc5a9..151a74b8 100644 --- a/core/src/main/java/it/cavallium/warppi/extra/tetris/TetrisGame.java +++ b/core/src/main/java/it/cavallium/warppi/extra/tetris/TetrisGame.java @@ -2,17 +2,17 @@ package it.cavallium.warppi.extra.tetris; public class TetrisGame { - private static final int WIDTH = 10, HEIGHT = 22; - private BlockType[] grid; - private BlockType[] hovergrid; - private GameStatus gameStatus = GameStatus.INITIAL; - private int score = 0; + static final int WIDTH = 10, HEIGHT = 22; + BlockType[] grid; + BlockType[] hovergrid; + GameStatus gameStatus = GameStatus.INITIAL; + int score = 0; public TetrisGame() { } - private void playAgain() { + void playAgain() { grid = new BlockType[WIDTH * HEIGHT]; hovergrid = new BlockType[WIDTH * HEIGHT]; score = 0; diff --git a/core/src/main/java/it/cavallium/warppi/extra/tetris/TetrisScreen.java b/core/src/main/java/it/cavallium/warppi/extra/tetris/TetrisScreen.java index 23dae466..76ba5e4f 100644 --- a/core/src/main/java/it/cavallium/warppi/extra/tetris/TetrisScreen.java +++ b/core/src/main/java/it/cavallium/warppi/extra/tetris/TetrisScreen.java @@ -5,8 +5,12 @@ import java.io.IOException; import it.cavallium.warppi.Engine; import it.cavallium.warppi.StaticVars; import it.cavallium.warppi.device.Keyboard; +import it.cavallium.warppi.event.KeyPressedEvent; +import it.cavallium.warppi.event.KeyReleasedEvent; import it.cavallium.warppi.gui.HistoryBehavior; import it.cavallium.warppi.gui.graphicengine.BinaryFont; +import it.cavallium.warppi.gui.graphicengine.GraphicEngine; +import it.cavallium.warppi.gui.graphicengine.Renderer; import it.cavallium.warppi.gui.graphicengine.Skin; import it.cavallium.warppi.gui.screens.Screen; @@ -14,6 +18,10 @@ public class TetrisScreen extends Screen { private TetrisGame g; + private GraphicEngine e; + + private Renderer r; + private static Skin skin; public TetrisScreen() { @@ -23,153 +31,32 @@ public class TetrisScreen extends Screen { @Override public void initialized() { -// try { -// if (TetrisScreen.skin == null) { -// TetrisScreen.skin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("/marioskin.png"); -// } -// if (TetrisScreen.groundskin == null) { -// TetrisScreen.groundskin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("/marioground.png"); -// } -// if (TetrisScreen.gpuTest2 == null) { -// try { -// TetrisScreen.gpuTest2 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("N:\\gputest\\gputest2"); -// } catch (final Exception ex) {} -// } -// if (TetrisScreen.gpuTest1 == null) { -// try { -// TetrisScreen.gpuTest1 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("N:\\gputest\\gputest12"); -// TetrisScreen.gpuTest12 = true; -// } catch (final Exception ex) { -// TetrisScreen.gpuTest12 = false; -// try { -// TetrisScreen.gpuTest1 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadFont("N:\\gputest\\gputest1"); -// } catch (final Exception ex2) {} -// } -// } -// if (TetrisScreen.gpuTest3 == null) { -// try { -// TetrisScreen.gpuTest3 = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("N:\\gputest\\font_gputest3.png"); -// } catch (final Exception ex) { -// ex.printStackTrace(); -// } -// } -// } catch (final IOException e) { -// e.printStackTrace(); -// } + try { + e = d.engine; + r = d.renderer; + if (TetrisScreen.skin == null) { + TetrisScreen.skin = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.loadSkin("/tetrisskin.png"); + } + } catch (final IOException e) { + e.printStackTrace(); + } } @Override public void created() throws InterruptedException { -// if (!errored) { -// g = new MarioGame(); -// } + g = new TetrisGame(); } @Override public void beforeRender(final float dt) { -// if (!errored) { -// final boolean rightPressed = Keyboard.isKeyDown(2, 5); -// final boolean leftPressed = Keyboard.isKeyDown(2, 3); -// final boolean jumpPressed = Keyboard.isKeyDown(2, 1); -// final boolean upPressed = false, downPressed = false, runPressed = false; -// g.gameTick(dt, upPressed, downPressed, leftPressed, rightPressed, jumpPressed, runPressed); -// -// gpuTestElapsed += dt; -// while (gpuTestElapsed >= 0.04) { -// gpuTestNum = (gpuTestNum + 1) % gpuTestMax; -// gpuTestElapsed -= 0.04; -// } -// gpuCharTestt1Elapsed += dt; -// while (gpuCharTestt1Elapsed >= 1.5) { -// gpuCharTest1Num = (gpuCharTest1Num + 1) % gpuCharTest1.length; -// gpuCharTestt1Elapsed -= 1.5; -// } -// -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glClearColor(0xff000000); -// } + Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glClearColor(0xff000000); } @Override public void render() { -// if (errored) { -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringLeft(0, 20, "ERROR"); -// } else { -// if (TetrisScreen.groundskin != null) { -// final double playerX = g.getPlayer().getX(); -// final double playerY = g.getPlayer().getY(); -// TetrisScreen.groundskin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); -// final MarioWorld w = g.getCurrentWorld(); -// final int width = w.getWidth(); -// final int height = w.getHeight(); -// final float screenX = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth() / 2f - 8f; -// final float screenY = Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() / 2f - 8f; -// final float shiftX = -8 + 16 * (float) playerX; -// final float shiftY = -8 + 16 * (height - (float) playerY); -// int blue = -1; -// for (int ix = 0; ix < width; ix++) { -// for (int iy = 0; iy < height; iy++) { -// final double distX = Math.abs(playerX - ix); -// final double distY = Math.abs(playerY - iy - 1.5d); -// if (distX * distX + distY * distY / 2d < 25d) { -// final byte b = w.getBlockIdAt(ix, iy); -// if (b == 0) { -// if (blue != 1) { -// blue = 1; -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xff9290ff); -// } -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillColor(screenX - shiftX + 16 * ix, screenY - shiftY + 16 * (height - iy), 16, 16); -// } else { -// if (blue != 0) { -// blue = 0; -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xffffffff); -// } -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(screenX - shiftX + 16 * ix, screenY - shiftY + 16 * (height - iy), 16, 16, 0, 0, 16, 16); -// } -// } -// } -// } -// if (blue != 0) { -// blue = 0; -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xffffffff); -// } -// -// //DRAW MARIO -// TetrisScreen.skin.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(screenX - (g.getPlayer().flipped ? 3 : 0), screenY, 35, 27, 35 * (g.getPlayer().marioSkinPos[0] + (g.getPlayer().flipped ? 2 : 1)), 27 * g.getPlayer().marioSkinPos[1], 35 * (g.getPlayer().flipped ? -1 : 1), 27); -//// PIDisplay.renderer.glDrawSkin(getPosX() - 18, 25 + getPosY(), 35 * (marioSkinPos[0] + (flipped ? 2 : 1)), 27 * marioSkinPos[1], 35 * (marioSkinPos[0] + (flipped ? 1 : 2)), 27 * (marioSkinPos[1] + 1), true); -// } -// -//// GPU PERFORMANCE TEST -// if (TetrisScreen.gpuTest1 != null) { -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3f(1, 1, 1); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillColor(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth() - (TetrisScreen.gpuTest12 ? 512 : 256), Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() / 2 - (TetrisScreen.gpuTest12 ? 256 : 128), TetrisScreen.gpuTest12 ? 512 : 256, TetrisScreen.gpuTest12 ? 512 : 256); -// TetrisScreen.gpuTest1.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor3f(0, 0, 0); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getWidth(), Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() / 2 - (TetrisScreen.gpuTest12 ? 256 : 128), gpuCharTest1[gpuCharTest1Num]); -// } -// if (TetrisScreen.gpuTest3 != null) { -// TetrisScreen.gpuTest3.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor4f(1, 1, 1, 0.7f); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glFillRect(0, StaticVars.screenSize[1] - 128, 224, 128, gpuTestNum * 224, 0, 224, 128); -// } -// if (TetrisScreen.gpuTest2 != null) { -// TetrisScreen.gpuTest2.use(Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFF000000); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - TetrisScreen.gpuTest2.getCharacterHeight(), "A"); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFF800000); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - TetrisScreen.gpuTest2.getCharacterHeight(), "B"); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFeea28e); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - TetrisScreen.gpuTest2.getCharacterHeight(), "C"); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFee7255); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - TetrisScreen.gpuTest2.getCharacterHeight(), "D"); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFeac0b0); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - TetrisScreen.gpuTest2.getCharacterHeight(), "E"); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFf3d8ce); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - TetrisScreen.gpuTest2.getCharacterHeight(), "F"); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glColor(0xFFffede7); -// Engine.INSTANCE.getHardwareDevice().getDisplayManager().renderer.glDrawStringRight(StaticVars.screenSize[0], Engine.INSTANCE.getHardwareDevice().getDisplayManager().engine.getHeight() - TetrisScreen.gpuTest2.getCharacterHeight(), "G"); -// } -// } + if (TetrisScreen.skin != null) { + TetrisScreen.skin.use(e); + } } @Override @@ -179,7 +66,18 @@ public class TetrisScreen extends Screen { @Override public String getSessionTitle() { - return "Absolutely not Super Mario"; + return "Absolutely Not Tetris"; } + @Override + public boolean onKeyPressed(KeyPressedEvent k) { + System.out.println("pr:"+k.getKey()); + return super.onKeyPressed(k); + } + + @Override + public boolean onKeyReleased(KeyReleasedEvent k) { + System.out.println("re:"+k.getKey()); + return super.onKeyReleased(k); + } } diff --git a/core/src/main/resources/tetrisskin.png b/core/src/main/resources/tetrisskin.png new file mode 100644 index 0000000000000000000000000000000000000000..11cfd9964fcf305ce9223dedf03f5b91c3e93028 GIT binary patch literal 29408 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

yxZxsqS2hIC;eQN!t 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 pOa&+J=L6_H;D!p2@mn2Z+5Kv&z!!hJ<~bDHFeM zjx%<%VGAuLE{BV4siGCDqP z(zr}wH$S$Se`Y49HNcJFtAk9NN|MNMT%m;^2re^e35pwDYh73N{3B^^$-cVbjWkA6 zUT6>SpbblgI2YBALLROL$4?sjD^PEs$eD)uJLJl8^F#<$Ey=q;)F)vT#pvL1_Hfv; zs(|_MjLSNvW64Iluu)XO^4zWYYip?rw=(OH*BecceNZhHt^4Agc1>c!Hv*}^whQPd_+q_OL;HT5M0ClV`N`Zjj+$rU&j=3mhgXL0PJ9l6ip7^y* zh|&UA(lcJC29a&e#Q@r)owyAJ@|g;Xj- z40+UXYrcW0CWnv?8>=y|D4UW-<(a`>aR(T>bYa*)O<#9gCn|~Hj+m5ccoZwtJikNp zNiU=Q5R$f&kM2-hjLv|R0klrASw(&d!#7FI-LW}^zPN?bhBXpwS08s?Ltf9m1tPrf ziQ~W{d1sOu>vF~&#RAAv*?Ne(ny<$a)%3KM%h_mRC*O-13XUiyKjv<*^>Xj-1bW;~ z)qTEEb=r-P&@s&XGN?1IYPjev-WaP z#p{j3o{ZkxbyxsI^#eOV_KuuiI*6rov*H9WIbz1+D*4>-`EVmE<1ew)yXnNe;CAr` z_;2JAy4}%J=7}osiG`jAZ7`+}8EdGrpyny|~G>MBRp4){GnZ39~7jRNy})lAg=6&k}OGHy3*qbzkx@X~U5KMrt# z_!3Ncb*)~;P*kOfwBQe#=3|*Hg$U$KEK@FIF&DN_4BVENgeOA`zEK@gY1`k&g+z`8 z-(Y6nk)&zP8ig&3ashN!-cMgbG}*dujDhV^By6%sVwwpKzSlAfc}vhd#a_}Z;3?1e zBeHVDWM|6P@5T-wJV;#pr$a_@s`J>?N$4(5rX7~-XC_FE?sK;OlO>pYEZ|aL9 zSxtCnp9k8~Ay9zwJ_m?DDC9=!}-_@RP|B zgUOZmxoG#Fm2pV1G+M7$LAq_4lqu3m@5C861DSH}#J z5%!cK_y|2cr5|O@H!hP5+(5j9hGb;Q&2tG{@9ZY)#nz!83-fpxf`W^q zffW$*#ktTgXV-dKppfO>&zrYaa2W+KIuF9P?8=O!!fy~I�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 el; private final DesktopSettings settings; + private Boolean runningOnRaspberryOverride = null; public DesktopPlatform() { cu = new DesktopConsoleUtils(); @@ -205,8 +206,18 @@ public class DesktopPlatform implements Platform { return org.eclipse.jdt.internal.compiler.batch.Main.compile(command, printWriter, errors, null); } + @Override + public void setRunningOnRaspberry(boolean b) { + if (isRunningOnRaspberry()) { + runningOnRaspberryOverride = b; + } else { + runningOnRaspberryOverride = false; + } + } + @Override public boolean isRunningOnRaspberry() { + if (runningOnRaspberryOverride != null) return runningOnRaspberryOverride; return CacheUtils.get("isRunningOnRaspberry", 24 * 60 * 60 * 1000, () -> { if (Engine.getPlatform().isJavascript()) return false; diff --git a/desktop/src/main/java/it/cavallium/warppi/gui/graphicengine/impl/swing/SwingWindow.java b/desktop/src/main/java/it/cavallium/warppi/gui/graphicengine/impl/swing/SwingWindow.java index 666a56dc..a417bf3e 100644 --- a/desktop/src/main/java/it/cavallium/warppi/gui/graphicengine/impl/swing/SwingWindow.java +++ b/desktop/src/main/java/it/cavallium/warppi/gui/graphicengine/impl/swing/SwingWindow.java @@ -244,21 +244,16 @@ public class SwingWindow extends JFrame { b.setFont(f); b.setBackground(new Color(200, 200, 200)); b.setFocusable(true); - b.addActionListener(e -> { - Keyboard.keyPressedRaw(row, col); - Keyboard.keyReleasedRaw(row, col); - c.grabFocus(); - }); b.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) { - // TODO Auto-generated method stub - + Keyboard.keyRaw(row, col, true); + c.grabFocus(); } @Override public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub - + Keyboard.keyRaw(row, col, false); + c.grabFocus(); } @Override public void mouseExited(MouseEvent e) { diff --git a/hardware/src/main/java/it/cavallium/warppi/hardware/HardwarePlatform.java b/hardware/src/main/java/it/cavallium/warppi/hardware/HardwarePlatform.java index e1ab9c94..75aa321c 100644 --- a/hardware/src/main/java/it/cavallium/warppi/hardware/HardwarePlatform.java +++ b/hardware/src/main/java/it/cavallium/warppi/hardware/HardwarePlatform.java @@ -25,6 +25,7 @@ public class HardwarePlatform implements Platform { private final String on; private final Map el; private final HardwareSettings settings; + private Boolean runningOnRaspberryOverride = null; public HardwarePlatform() { cu = new HardwareConsoleUtils(); @@ -194,8 +195,14 @@ public class HardwarePlatform implements Platform { return org.eclipse.jdt.internal.compiler.batch.Main.compile(command, printWriter, errors, null); } + @Override + public void setRunningOnRaspberry(boolean b) { + runningOnRaspberryOverride = b; + } + @Override public boolean isRunningOnRaspberry() { + if (runningOnRaspberryOverride != null) return runningOnRaspberryOverride; return true; /* return CacheUtils.get("isRunningOnRaspberry", 24 * 60 * 60 * 1000, () -> { diff --git a/teavm/src/main/java/it/cavallium/warppi/gui/graphicengine/html/HtmlEngine.java b/teavm/src/main/java/it/cavallium/warppi/gui/graphicengine/html/HtmlEngine.java index e9f8d0fa..8843fddc 100644 --- a/teavm/src/main/java/it/cavallium/warppi/gui/graphicengine/html/HtmlEngine.java +++ b/teavm/src/main/java/it/cavallium/warppi/gui/graphicengine/html/HtmlEngine.java @@ -70,15 +70,10 @@ public class HtmlEngine implements GraphicEngine { } private String previousValue = ""; - - @JSBody(params = { "ctx", "enabled" }, script = "" - + "ctx.mozImageSmoothingEnabled = enabled;" - + "ctx.oImageSmoothingEnabled = enabled;" - + "ctx.webkitImageSmoothingEnabled = enabled;" - + "ctx.msImageSmoothingEnabled = enabled;" - + "ctx.imageSmoothingEnabled = enabled;") + + @JSBody(params = { "ctx", "enabled" }, script = "" + "ctx.mozImageSmoothingEnabled = enabled;" + "ctx.oImageSmoothingEnabled = enabled;" + "ctx.webkitImageSmoothingEnabled = enabled;" + "ctx.msImageSmoothingEnabled = enabled;" + "ctx.imageSmoothingEnabled = enabled;") public static native void setImageSmoothingEnabled(CanvasRenderingContext2D ctx, boolean enabled); - + @Override public void create(final Runnable onInitialized) { exitSemaphore = Engine.getPlatform().newSemaphore(0); @@ -93,14 +88,14 @@ public class HtmlEngine implements GraphicEngine { onZoom.subscribe((windowZoom) -> { if (windowZoom != 0) { if (suppportsZoom()) { - canvas.setWidth((int)(480 / 1)); - canvas.setHeight((int)(320 / 1)); + canvas.setWidth((int) (480 / 1)); + canvas.setHeight((int) (320 / 1)); canvas.getStyle().setProperty("zoom", "" + (1 + 1)); } else { - canvas.setWidth((int)(480 * 2)); - canvas.setHeight((int)(320 * 2)); + canvas.setWidth((int) (480 * 2)); + canvas.setHeight((int) (320 * 2)); } - canvas.getStyle().setProperty("max-height", (int)(44 / (1+1)) + "vh"); + canvas.getStyle().setProperty("max-height", (int) (44 / (1 + 1)) + "vh"); width = 480 / windowZoom.intValue(); height = 320 / windowZoom.intValue(); this.mult = windowZoom.intValue(); @@ -114,11 +109,13 @@ public class HtmlEngine implements GraphicEngine { HtmlEngine.document.getElementById("container").appendChild(canvas); HtmlEngine.document.getBody().appendChild(keyInput); keyInput.setTabIndex(0); + keyInput.setValue("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); keyInput.addEventListener("keydown", (final KeyboardEvent evt) -> { evt.preventDefault(); new Thread(() -> { previousValue = keyInput.getValue(); - Keyboard.debugKeyPressed(evt.getKeyCode()); + Keyboard.debugKey(evt.getKeyCode(), false); + Keyboard.debugKey(evt.getKeyCode(), true); System.out.println(evt.getKeyCode()); System.out.println("" + (int) evt.getKey().charAt(0)); }).start(); @@ -133,14 +130,17 @@ public class HtmlEngine implements GraphicEngine { new Thread(() -> { if (newLen == prevLen) { - } else if (newLen - prevLen == 1) - Keyboard.debugKeyPressed(newValue.toUpperCase().charAt(newLen - 1)); + } else if (newLen - prevLen == 1) { + Keyboard.debugKey(newValue.toUpperCase().charAt(newLen - 1), false); + Keyboard.debugKey(newValue.toUpperCase().charAt(newLen - 1), true);} else if (newLen - prevLen > 1) - for (int i = 0; i < newLen - prevLen; i++) - Keyboard.debugKeyPressed(newValue.toUpperCase().charAt(prevLen + i)); + for (int i = 0; i < newLen - prevLen; i++) { + Keyboard.debugKey(newValue.toUpperCase().charAt(prevLen + i), false); + Keyboard.debugKey(newValue.toUpperCase().charAt(prevLen + i), true);} else if (newLen - prevLen < 1) - for (int i = 0; i < prevLen - newLen; i++) - Keyboard.debugKeyPressed(8); + for (int i = 0; i < prevLen - newLen; i++) { + Keyboard.debugKey(8, false); + Keyboard.debugKey(8, true);} }).start(); }); canvas.addEventListener("click", (final Event evt) -> { @@ -163,36 +163,48 @@ public class HtmlEngine implements GraphicEngine { final String[] coordinates = code.split(",", 2); final boolean removeshift = Keyboard.shift && Integer.parseInt(coordinates[0]) != 0 && Integer.parseInt(coordinates[1]) != 0; final boolean removealpha = Keyboard.alpha && Integer.parseInt(coordinates[0]) != 0 && Integer.parseInt(coordinates[1]) != 1; - Keyboard.keyPressedRaw(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1])); + Keyboard.keyRaw(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1]), false); if (removeshift) - Keyboard.keyPressedRaw(0, 0); + Keyboard.keyRaw(0, 0, false); if (removealpha) - Keyboard.keyPressedRaw(0, 1); + Keyboard.keyRaw(0, 1, false); Thread.sleep(100); - Keyboard.keyReleasedRaw(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1])); + Keyboard.keyRaw(Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1]), true); if (removeshift) - Keyboard.keyReleasedRaw(0, 0); + Keyboard.keyRaw(0, 0, true); if (removealpha) - Keyboard.keyReleasedRaw(0, 1); + Keyboard.keyRaw(0, 1, true); } else if (Keyboard.alpha && !Keyboard.shift) { - if (button.hasAttribute("keycodea")) - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodea"))); - else - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); + if (button.hasAttribute("keycodea")) { + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycodea")), false); + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycodea")), true); + } else { + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycode")), false); + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycode")), true); + } } else if (!Keyboard.alpha && Keyboard.shift) { - if (button.hasAttribute("keycodes")) - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodes"))); - else - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); + if (button.hasAttribute("keycodes")) { + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycodes")), false); + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycodes")), true); + } else { + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycode")), false); + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycode")), true); + } } else if (Keyboard.alpha && Keyboard.shift) { - if (button.hasAttribute("keycodesa")) - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodesa"))); - else if (button.hasAttribute("keycodes")) - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycodes"))); - else - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); - } else - Keyboard.debugKeyPressed(Integer.parseInt(button.getAttribute("keycode"))); + if (button.hasAttribute("keycodesa")) { + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycodesa")), false); + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycodesa")), true); + } else if (button.hasAttribute("keycodes")) { + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycodes")), false); + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycodes")), true); + } else { + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycode")), false); + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycode")), true); + } + } else { + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycode")), false); + Keyboard.debugKey(Integer.parseInt(button.getAttribute("keycode")), true); + } } catch (final Exception ex) { ex.printStackTrace(); } diff --git a/teavm/src/main/java/it/cavallium/warppi/gui/graphicengine/html/HtmlRenderer.java b/teavm/src/main/java/it/cavallium/warppi/gui/graphicengine/html/HtmlRenderer.java index cf42b542..5c124516 100644 --- a/teavm/src/main/java/it/cavallium/warppi/gui/graphicengine/html/HtmlRenderer.java +++ b/teavm/src/main/java/it/cavallium/warppi/gui/graphicengine/html/HtmlRenderer.java @@ -7,7 +7,7 @@ import it.cavallium.warppi.gui.graphicengine.Renderer; public class HtmlRenderer implements Renderer { private String currentColor = "#000000ff"; - private String clearColor = "#000000ff"; + private String clearColor = "#c5c2afff"; HtmlFont f = null; HtmlSkin currentSkin = null; private final CanvasRenderingContext2D g; diff --git a/teavm/src/main/java/it/cavallium/warppi/teavm/TeaVMPlatform.java b/teavm/src/main/java/it/cavallium/warppi/teavm/TeaVMPlatform.java index a053be53..d63899ae 100644 --- a/teavm/src/main/java/it/cavallium/warppi/teavm/TeaVMPlatform.java +++ b/teavm/src/main/java/it/cavallium/warppi/teavm/TeaVMPlatform.java @@ -23,6 +23,7 @@ public class TeaVMPlatform implements Platform { private final Map el; private final TeaVMPngUtils pu; private final TeaVMSettings settings; + private Boolean runningOnRaspberryOverride = null; public TeaVMPlatform() { cu = new TeaVMConsoleUtils(); @@ -208,6 +209,10 @@ public class TeaVMPlatform implements Platform { throw new java.lang.UnsupportedOperationException("Not implemented."); } + @Override + public void setRunningOnRaspberry(boolean b) { + } + @Override public boolean isRunningOnRaspberry() { return false; diff --git a/teavm/src/main/java/it/cavallium/warppi/teavm/TeaVMSettings.java b/teavm/src/main/java/it/cavallium/warppi/teavm/TeaVMSettings.java index c4ef8ea3..1102dbf3 100644 --- a/teavm/src/main/java/it/cavallium/warppi/teavm/TeaVMSettings.java +++ b/teavm/src/main/java/it/cavallium/warppi/teavm/TeaVMSettings.java @@ -7,7 +7,7 @@ public class TeaVMSettings implements Settings { private boolean debug; public TeaVMSettings() { - debug = true; + debug = false; } @Override