I want to make my player flyin such where my mouse/camera view is pointed my player will fly that direction if I am pressing the "W" key.
Here is my script:
extends KinematicBody
var verticalvelocity = 0
var gravity = 50
var direction = Vector3.FORWARD
var directionfly = Vector3.UP
var velocity = Vector3.ZERO
var strafe_dir = Vector3.ZERO
var jumpmagnitude = 18
var jumpblend = "parameters/jumpblend/blendposition"
var agtransition = "parameters/agtransition/current"
var agtransitionactive = "parameters/jump_blend/acitve"
var fligthmagnitude = 2
var velocityfly = 0
var movementspeed = 0
var walkspeed = 3
var runspeed = 12
var acceleration = 7
var angularacceleration = 7
var superspeed = 50
var speedincrease_increment = 1
func physicsprocess(delta):
if Input.isactionpressed("Forward") || Input.isactionpressed("Backward") || Input.isactionpressed("Left") || Input.isactionpressed("Right"):
var h_rot = $Camroot/h.global_transform.basis.get_euler().y
direction = Vector3(Input.get_action_strength("Left") - Input.get_action_strength("Right"),
0,
Input.get_action_strength("Forward") - Input.get_action_strength("Backward")).rotated(Vector3.UP,h_rot).normalized()
if Input.is_action_pressed("Sprint"):
movement_speed = run_speed
$AnimationTree.set("parameters/iwr_blend/blend_amount", lerp($AnimationTree.get("parameters/iwr_blend/blend_amount"), 1 , delta * acceleration))
else:
$AnimationTree.set("parameters/iwr_blend/blend_amount", lerp($AnimationTree.get("parameters/iwr_blend/blend_amount"), 0 , delta * acceleration))
movement_speed = walk_speed
else :
$AnimationTree.set("parameters/iwr_blend/blend_amount", lerp($AnimationTree.get("parameters/iwr_blend/blend_amount"), -1 , delta * acceleration))
movement_speed = 0
# faz com que o botão que foi pressionado ative uma ação e se for pressionado de novo desativa a ação
if is_on_floor():
if Input.is_action_pressed("Jump"):
vertical_velocity = jump_magnitude
$AnimationTree.set(ag_transition,0)
else :
$AnimationTree.set(ag_transition,1)
$AnimationTree.set(jump_blend, lerp($AnimationTree.get(jump_blend), vertical_velocity/jump_magnitude, delta * 10 ))
if gravity <0:
gravity = 50
if Input.is_action_just_pressed("Flight"):
if gravity == 0:
gravity = 50
vertical_velocity = 0
run_speed =12
walk_speed = 3
else:
gravity = 0
vertical_velocity = delta * gravity
run_speed = 50
walk_speed = 5
if gravity ==0 and !is_on_floor():
if Input.is_action_pressed("Up"):
velocity.y += fligth_magnitude * 2
if Input.is_action_pressed("E"):
velocity.y -= fligth_magnitude * 2
elif is_on_floor():
velocity.y = 0
if Input.is_action_pressed("r") and !is_on_floor():
gravity = 1
movement_speed = 30
else:
gravity = 50
velocity = lerp(velocity,direction * movement_speed, delta * acceleration)
move_and_slide(velocity + Vector3.UP * vertical_velocity,Vector3.UP)
if !is_on_floor():
vertical_velocity -= gravity * delta
else:
vertical_velocity = 0
$Mesh/MineCharatertrue/SimplePlayerarma.rotation.y = lerp_angle($Mesh/MineCharatertrue/SimplePlayerarma.rotation.y,atan2(direction.x,direction.z), delta * angular_acceleration)