i want to detect when my player is moving so i can add moving animations, like head bob and stuff. but i dont really know how to do this?
my code is this:
extends KinematicBody
var mousesensitivity = 1
var joystickdeadzone = 0.2
var runspeed = 20
var walkspeed = runspeed / 2
var crouchspeed = runspeed / 6
var jumpheight = 4.5
var currentspeed = runspeed
var groundacceleration = 10
var airacceleration = 5
var acceleration = air_acceleration
var direction = Vector3()
var velocity = Vector3()
var movement = Vector3()
var gravity = 14
var gravity_vec = Vector3()
var snapped = false
var canjump = true
var crouched = false
var cancrouch = true
var playerspeed = 0
var fallingvelocity = 0
func ready():
Input.setmousemode(Input.MOUSEMODE_CAPTURED)
func _input(event):
if event is InputEventMouseMotion:
rotation_degrees.y -= event.relative.x * mouse_sensitivity / 18
$Head.rotation_degrees.x -= event.relative.y * mouse_sensitivity / 18
$Head.rotation_degrees.x = clamp($Head.rotation_degrees.x, -90, 90)
direction = Vector3()
func physicsprocess(delta):
if Input.get_joy_axis(0, 2) < -joystick_deadzone or Input.get_joy_axis(0, 2) > joystick_deadzone:
rotation_degrees.y -= Input.get_joy_axis(0, 2) * 2
if Input.get_joy_axis(0, 3) < -joystick_deadzone or Input.get_joy_axis(0, 3) > joystick_deadzone:
$Head.rotation_degrees.x = clamp($Head.rotation_degrees.x - Input.get_joy_axis(0, 3) * 2, -90, 90)
direction = Vector3()
if Input.is_key_pressed(KEY_W):
direction.z += -1
if Input.is_key_pressed(KEY_S):
direction.z += 1
if Input.is_key_pressed(KEY_A):
direction.x += -1
if Input.is_key_pressed(KEY_D):
direction.x += 1
direction = direction.normalized()
if direction == Vector3():
direction.z = Input.get_joy_axis(0, 1)
direction.x = Input.get_joy_axis(0, 0)
if direction.z < joystick_deadzone and direction.z > -joystick_deadzone:
direction.z = 0
if direction.x < joystick_deadzone and direction.x > -joystick_deadzone:
direction.x = 0
direction = direction.rotated(Vector3.UP, rotation.y)
if is_on_floor():
if snapped == false:
falling_velocity = gravity_vec.y
land_animation()
acceleration = ground_acceleration
movement.y = 0
gravity_vec = -get_floor_normal() * 10
snapped = true
else:
acceleration = air_acceleration
if snapped:
gravity_vec = Vector3()
snapped = false
else:
gravity_vec += Vector3.DOWN * gravity * delta
if is_on_floor():
if Input.is_key_pressed(KEY_SHIFT) or Input.get_joy_axis(0, 6) >= 0.6:
current_speed = run_speed
else:
current_speed = walk_speed
if crouched:
current_speed = crouch_speed
if Input.is_key_pressed(KEY_SPACE) or Input.is_joy_button_pressed(0, JOY_XBOX_A):
if is_on_floor() and can_jump:
snapped = false
can_jump = false
gravity_vec = Vector3.UP * jump_height
else:
can_jump = true
if is_on_ceiling():
gravity_vec.y = 0
if Input.is_key_pressed(KEY_CONTROL) or Input.is_key_pressed(KEY_C) or Input.is_joy_button_pressed(0, JOY_XBOX_B):
crouch_animation(true)
else:
crouch_animation(false)
velocity = velocity.linear_interpolate(direction * current_speed, acceleration * delta)
movement.x = velocity.x + gravity_vec.x
movement.z = velocity.z + gravity_vec.z
movement.y = gravity_vec.y
movement = move_and_slide(movement, Vector3.UP)
player_speed = movement.length()
func landanimation():
var movementy = clamp(falling_velocity, -20, 0) / 40
$LandTween.interpolate_property($Head/Camera, "translation:y", 0, movement_y, 0.1, Tween.TRANS_SINE, Tween.EASE_OUT)
$LandTween.interpolate_property($Head/Camera, "translation:y", movement_y, 0, 0.25, Tween.TRANS_SINE, Tween.EASE_IN_OUT, 0.1)
$LandTween.start()
func crouchanimation(buttonpressed):
if buttonpressed:
if not crouched:
$CrouchTween.interpolateproperty($MeshInstance, "mesh:midheight", $MeshInstance.mesh.midheight, 0.25, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolateproperty($CollisionShape, "shape:height", $CollisionShape.shape.height, 0.25, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolateproperty($Head, "translation:y", $Head.translation.y, 1.35, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.start()
crouched = true
else:
if crouched:
$CrouchTween.interpolateproperty($MeshInstance, "mesh:midheight", $MeshInstance.mesh.midheight, 0.75, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolateproperty($CollisionShape, "shape:height", $CollisionShape.shape.height, 0.75, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolateproperty($Head, "translation:y", $Head.translation.y, 1.6, 0.2, Tween.TRANSSINE, Tween.EASEIN_OUT)
$CrouchTween.start()
crouched = false