Ethosa 5 лет назад
Родитель
Сommit
c95af308c5
4 измененных файлов с 55 добавлено и 2 удалено
  1. 4 2
      src/nodesnim/core/input.nim
  2. 4 0
      src/nodesnim/window.nim
  3. 1 0
      tests/README.md
  4. 46 0
      tests/test7.nim

+ 4 - 2
src/nodesnim/core/input.nim

@@ -85,6 +85,8 @@ var
   pressed_keys*: seq[string] = @[]
   pressed_keys_ints*: seq[int8] = @[]
   last_event*: InputEvent = InputEvent()
+  last_key_state*: bool = false
+  key_state*: bool = false
   press_state*: int = 0
   actionlist*: seq[InputAction] = @[]
   mouse_pressed*: bool = false
@@ -122,7 +124,7 @@ proc addKeyAction*(a: type Input, name, key: string) =
   ## - `key` - key, e.g.: "w", "1", etc.
   actionlist.add(InputAction(kind: KEYBOARD, name: name, key: key))
 
-proc addKeyAction*(a: type Input, name, key: int8) =
+proc addKeyAction*(a: type Input, name: string, key: int8) =
   ## Adds a new action on keyboard.
   ##
   ## Arguments:
@@ -154,7 +156,7 @@ proc isActionJustPressed*(a: type Input, name: string): bool =
         if press_state == 1:
           result = true
       elif action.kind == KEYBOARD and last_event.kind == KEYBOARD:
-        if action.key in pressed_keys or action.key_int in pressed_keys_ints:
+        if (action.key == last_event.key or action.key_int == last_event.key_int) and last_key_state == false:
           if press_state == 1:
             result = true
 

+ 4 - 0
src/nodesnim/window.nim

@@ -98,6 +98,8 @@ proc keyboardpress(c: int8, x, y: cint) {.cdecl.} =
     pressed_keys.add(key)
     pressed_keys_ints.add(c)
   last_event.kind = KEYBOARD
+  last_key_state = key_state
+  key_state = true
 
   current_scene.handleScene(last_event, mouse_on, paused)
 
@@ -110,6 +112,8 @@ proc keyboardup(c: int8, x, y: cint) {.cdecl.} =
   last_event.x = x.float
   last_event.y = y.float
   last_event.kind = KEYBOARD
+  last_key_state = key_state
+  key_state = false
   var i = 0
   for k in pressed_keys:
     if k == key:

+ 1 - 0
tests/README.md

@@ -6,3 +6,4 @@
 4. [Use ColorRect node.](https://github.com/Ethosa/nodesnim/blob/master/tests/test4.nim)
 5. [Handle Control node events.](https://github.com/Ethosa/nodesnim/blob/master/tests/test5.nim)
 6. [Anchor setting.](https://github.com/Ethosa/nodesnim/blob/master/tests/test6.nim)
+7. [Change scenes.](https://github.com/Ethosa/nodesnim/blob/master/tests/test7.nim)

+ 46 - 0
tests/test7.nim

@@ -0,0 +1,46 @@
+# --- Test 7. Change scenes. --- #
+import nodesnim
+
+
+Window("hello world")
+
+var
+  mainobj: SceneObj
+  secondobj: SceneObj
+
+  main = Scene("Main", mainobj)
+  second = Scene("Second scene", secondobj)
+
+  colorrectobj: ColorRectObj
+  lightblue = ColorRect(colorrectobj)
+
+  colorrect1obj: ColorRectObj
+  violet = ColorRect(colorrect1obj)
+
+
+Input.addKeyAction("change_scene", K_SPACE)
+
+main.addChild(violet)
+second.addChild(lightblue)
+
+violet.color = Color(0xccaaffff'u32)
+lightblue.color = Color(0xaaccffff'u32)
+lightblue.anchor = Anchor(0.5, 0.5, 0.5, 0.5)
+
+violet.process =
+  proc() =
+    if Input.isActionJustPressed("change_scene"):
+      echo "bye from main scene :("
+      changeScene("Second scene")
+
+lightblue.process =
+  proc() =
+    if Input.isActionJustPressed("change_scene"):
+      echo "bye from second scene :("
+      changeScene("Main")
+
+
+addScene(main)
+addScene(second)
+setMainScene("Main")
+windowLaunch()