]> Untitled Git - frog-ninja.git/blobdiff - player/input/InputHandler.gd
Separated the Visual from the Model
[frog-ninja.git] / player / input / InputHandler.gd
index d7f2fb41b2e531bb34f3a11f6b26e930ca84762c..5a0e98d5c71c3e8ee3de3604db532d49ba62e96e 100644 (file)
@@ -2,24 +2,49 @@ extends Node
 class_name InputHandler
 
 
 class_name InputHandler
 
 
+var camera: Camera3D
+
+
 func get_camera_input_direction() -> Vector2:
        return Input.get_vector(
                "camera-left", "camera-right", "camera-up", "camera-down"
                )
 
 
 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"
                )
 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")
        
        if Input.is_action_just_pressed("player-dash"):
                p.actions.append("dash")
        
        if p.movement_direction != Vector2.ZERO:
                p.actions.append("walk")
        
        if Input.is_action_just_pressed("player-dash"):
                p.actions.append("dash")
        
+       if Input.is_action_just_pressed("player-slash"):
+               p.actions.append("slash")
+       
+       if Input.is_action_just_pressed("player-shoot"):
+               p.actions.append("shoot")
+       
        if p.actions.is_empty():
                p.actions.append("idle")
                
        if p.actions.is_empty():
                p.actions.append("idle")