]> Untitled Git - frog-ninja.git/blobdiff - player/input/InputHandler.gd
Separated the Visual from the Model
[frog-ninja.git] / player / input / InputHandler.gd
index 1a02a87487cd42cb7017e2da5dd9a94275e180c9..5a0e98d5c71c3e8ee3de3604db532d49ba62e96e 100644 (file)
@@ -2,18 +2,37 @@ extends Node
 class_name InputHandler
 
 
+var camera: Camera3D
+
+
 func get_camera_input_direction() -> Vector2:
        return Input.get_vector(
                "camera-left", "camera-right", "camera-up", "camera-down"
                )
 
 
+# Get the XZ input direction based on player's input relative to the camera
+func get_player_input_relative_to_camera(raw_input: Vector2) -> Vector3:
+       if camera:
+               var forward := camera.global_basis.z
+               var right := camera.global_basis.x
+               var dir := (
+                       forward * raw_input.y + right * raw_input.x
+                       ).normalized()
+               return dir
+       else:
+               return Vector3.ZERO
+
+
 func get_player_input() -> InputPacket:
        var p: InputPacket = InputPacket.new()
                
        p.movement_direction = Input.get_vector(
                "player-left", "player-right", "player-forward", "player-backward"
                )
+       p.camera_movement_direction = get_player_input_relative_to_camera(
+               p.movement_direction
+               )
        if p.movement_direction != Vector2.ZERO:
                p.actions.append("walk")