qmlfrontend/Page1.qml
changeset 16016 4933920eba89
parent 16012 caba603f461f
child 16017 e8afb1bf2779
--- a/qmlfrontend/Page1.qml	Sun May 19 15:55:26 2024 +0200
+++ b/qmlfrontend/Page1.qml	Mon May 20 14:58:30 2024 +0200
@@ -2,18 +2,70 @@
 import Hedgewars.Engine 1.0
 
 Page1Form {
+  property HWEngine hwEngine
+  property var keyBindings: ({
+      "long": {
+        [Qt.Key_Space]: Engine.Attack,
+        [Qt.Key_Up]: Engine.ArrowUp,
+        [Qt.Key_Right]: Engine.ArrowRight,
+        [Qt.Key_Down]: Engine.ArrowDown,
+        [Qt.Key_Left]: Engine.ArrowLeft,
+        [Qt.Key_Shift]: Engine.Precision
+      },
+      "simple": {
+        [Qt.Key_Tab]: Engine.SwitchHedgehog,
+        [Qt.Key_Enter]: Engine.LongJump,
+        [Qt.Key_Backspace]: Engine.HighJump,
+        [Qt.Key_Y]: Engine.Accept,
+        [Qt.Key_N]: Engine.Deny
+      }
+    })
+  property NetSession netSession
+
   focus: true
 
-  property HWEngine hwEngine
-  property NetSession netSession
+  Component.onCompleted: {
+    hwEngine = hwEngineComponent.createObject();
+  }
+  Keys.onPressed: event => {
+    if (event.isAutoRepeat) {
+      return;
+    }
+    let action = keyBindings["simple"][event.key];
+    if (action !== undefined) {
+      gameView.engineInstance.simpleEvent(action);
+      event.accepted = true;
+      return;
+    }
+    action = keyBindings["long"][event.key];
+    if (action !== undefined) {
+      gameView.engineInstance.longEvent(action, Engine.Set);
+      event.accepted = true;
+    }
+  }
+  Keys.onReleased: event => {
+    if (event.isAutoRepeat) {
+      return;
+    }
+    const action = keyBindings["long"][event.key];
+    if (action !== undefined) {
+      gameView.engineInstance.longEvent(action, Engine.Unset);
+      event.accepted = true;
+    }
+  }
+  netButton.onClicked: {
+    netSession = netSessionComponent.createObject();
+    netSession.open();
+  }
 
   Component {
     id: hwEngineComponent
 
     HWEngine {
+      dataPath: "../share/hedgewars/Data"
       engineLibrary: "../rust/lib-hedgewars-engine/target/debug/libhedgewars_engine.so"
-      dataPath: "../share/hedgewars/Data"
       previewAcceptor: PreviewAcceptor
+
       onPreviewImageChanged: previewImage.source = "image://preview/image"
       onPreviewIsRendering: previewImage.source = "qrc:/res/iconTime.png"
     }
@@ -28,58 +80,41 @@
     }
   }
 
-  Component.onCompleted: {
-    hwEngine = hwEngineComponent.createObject()
+  tickButton {
+    onClicked: {
+      tickButton.visible = false;
+      gameView.tick(100);
+    }
   }
 
-  tickButton {
-    onClicked: {
-      tickButton.visible = false
-      gameView.tick(100)
-    }
-  }
   gameButton {
     visible: !gameView.engineInstance
+
     onClicked: {
-      const engineInstance = hwEngine.runQuickGame()
-      gameView.engineInstance = engineInstance
+      const engineInstance = hwEngine.runQuickGame();
+      gameView.engineInstance = engineInstance;
     }
   }
+
   button1 {
     visible: !gameView.engineInstance
+
     onClicked: {
-      hwEngine.getPreview()
+      hwEngine.getPreview();
     }
   }
+
   preview {
     visible: !gameView.engineInstance
   }
 
-  netButton.onClicked: {
-    netSession = netSessionComponent.createObject()
-    netSession.open()
-  }
-
-  Keys.onPressed: {
-    if (event.key === Qt.Key_Enter)
-      gameView.engineInstance.longEvent(Engine.Attack, Engine.Set)
-  }
-
-  Keys.onReleased: {
-    if (event.key === Qt.Key_Enter)
-      gameView.engineInstance.longEvent(Engine.Attack, Engine.Unset)
-  }
-
   gameMouseArea {
+    onPositionChanged: event => {
+      gameView.engineInstance.moveCamera(Qt.point(event.x - gameMouseArea.lastPoint.x, event.y - gameMouseArea.lastPoint.y));
+      gameMouseArea.lastPoint = Qt.point(event.x, event.y);
+    }
     onPressed: event => {
-                 gameMouseArea.lastPoint = Qt.point(event.x, event.y)
-               }
-    onPositionChanged: event => {
-                         gameView.engineInstance.moveCamera(
-                           Qt.point(event.x - gameMouseArea.lastPoint.x,
-                                    event.y - gameMouseArea.lastPoint.y))
-
-                         gameMouseArea.lastPoint = Qt.point(event.x, event.y)
-                       }
+      gameMouseArea.lastPoint = Qt.point(event.x, event.y);
+    }
   }
 }