extends KinematicBody const SPEED_FORWARD = 5 const SPEED_TURN = 60 const SPEED_AIM = PI / 4 const FRICTION = 0.99 var velocity = Vector3() # Called when the node enters the scene tree for the first time. func _ready(): pass # Replace with function body. func get_player_input(delta): var vec_lateral = transform.basis.x var vec_vertical = transform.basis.y if Input.is_action_pressed("player_left"): velocity += SPEED_TURN * -vec_lateral * delta elif Input.is_action_pressed("player_right"): velocity += SPEED_TURN * vec_lateral * delta if Input.is_action_pressed("player_up"): velocity += SPEED_TURN * vec_vertical * delta elif Input.is_action_pressed("player_down"): velocity += SPEED_TURN * -vec_vertical * delta if Input.is_action_pressed("player_aim_up"): rotate_x(SPEED_AIM * delta) elif Input.is_action_pressed("player_aim_down"): rotate_x(-SPEED_AIM * delta) if Input.is_action_pressed("player_aim_left"): rotate_y(SPEED_AIM * delta) elif Input.is_action_pressed("player_aim_right"): rotate_y(-SPEED_AIM * delta) func _process(delta): # get velocity changes player asks for get_player_input(delta) velocity.x *= FRICTION velocity.y *= FRICTION # move foward according to the camera's POV var vec_forward = transform.basis.z velocity += SPEED_FORWARD * -vec_forward * delta func _physics_process(delta): velocity = move_and_slide(velocity, Vector3.UP)