0 votes

my code is this:

extends KinematicBody

var mousesensitivity = 1
var joystick
deadzone = 0.2

var runspeed = 20 # Running speed in m/s
var walk
speed = runspeed / 2
var crouch
speed = runspeed / 3
var jump
height = 4.5

var currentspeed = runspeed

var groundacceleration = 10
var air
acceleration = 5
var acceleration = air_acceleration

var direction = Vector3()
var velocity = Vector3() # Direction with acceleration added
var movement = Vector3() # Velocity with gravity added

var gravity = 14
var gravity_vec = Vector3()

var snapped = false
var canjump = true
var crouched = false
var can
crouch = true

Data:

var playerspeed = 0
var falling
velocity = 0

func ready():
Input.set
mousemode(Input.MOUSEMODE_CAPTURED)

func input(event):
# Look with the mouse
if event is InputEventMouseMotion:
rotation
degrees.y -= event.relative.x * mousesensitivity / 18
$Head.rotation
degrees.x -= event.relative.y * mousesensitivity / 18
$Head.rotation
degrees.x = clamp($Head.rotation_degrees.x, -90, 90)

direction = Vector3()

func physicsprocess(delta):
# Look with the right analog of the joystick
if Input.getjoyaxis(0, 2) < -joystickdeadzone or Input.getjoyaxis(0, 2) > joystickdeadzone:
rotationdegrees.y -= Input.getjoyaxis(0, 2) * 2
if Input.get
joyaxis(0, 3) < -joystickdeadzone or Input.getjoyaxis(0, 3) > joystickdeadzone:
$Head.rotation
degrees.x = clamp($Head.rotationdegrees.x - Input.getjoy_axis(0, 3) * 2, -90, 90)

# Direction inputs
direction = Vector3()

if Input.is_key_pressed(KEY_W) or Input.is_key_pressed(KEY_Z) or Input.is_key_pressed(KEY_UP):
    direction.z += -1
if Input.is_key_pressed(KEY_S) or Input.is_key_pressed(KEY_DOWN):
    direction.z += 1
if Input.is_key_pressed(KEY_A) or Input.is_key_pressed(KEY_Q) or Input.is_key_pressed(KEY_LEFT):
    direction.x += -1
if Input.is_key_pressed(KEY_D) or Input.is_key_pressed(KEY_RIGHT):
    direction.x += 1

direction = direction.normalized()

#If we aren't using the keyboard, take the input from the left analog of the joystick
if direction == Vector3():
    direction.z = Input.get_joy_axis(0, 1)
    direction.x = Input.get_joy_axis(0, 0)

    # Apply a deadzone to the joystick
    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

# Rotates the direction from the Y axis to move forward
direction = direction.rotated(Vector3.UP, rotation.y)

# Snaps the character on the ground and changes the gravity vector to climb
# slopes at the same speed until 45 degrees
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()

if Input.is_action_just_released("crouch") and is_on_ceiling():
    crouch_animation(false)

func landanimation():
var movement
y = 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.interpolate
property($MeshInstance, "mesh:midheight", $MeshInstance.mesh.midheight, 0.25, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolate
property($CollisionShape, "shape:height", $CollisionShape.shape.height, 0.25, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolate
property($Head, "translation:y", $Head.translation.y, 1.35, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.start()
crouched = true
else:
if crouched:
$CrouchTween.interpolate
property($MeshInstance, "mesh:midheight", $MeshInstance.mesh.midheight, 0.75, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolate
property($CollisionShape, "shape:height", $CollisionShape.shape.height, 0.75, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolate
property($Head, "translation:y", $Head.translation.y, 1.6, 0.2, Tween.TRANSSINE, Tween.EASEIN_OUT)
$CrouchTween.start()
crouched = false

Godot version 3.5.1
in Engine by (39 points)

Your code is quite a lot. Can you simply your question and post only the relevant code please.

2 Answers

0 votes

Hello!
Your project looks really cool, but I don't think you need that much code just for a sprint cooldown.
Watch this video by Garbaj (he adds a sprint cooldown near the end of the tutorial):
https://www.youtube.com/watch?v=q_rZvRmYnsk

This may be too basic for you, I'm not sure, but it covers the basics of it at least (I think)

by (57 points)
0 votes

WTF? I've made you an example project already. It is here in the comment:
https://godotengine.org/qa/141189/how-do-i-make-a-sprint-cooldown-for-my-3d-game

Direct GitHub link: https://github.com/Skipperro/Godot-Cooldown-Example

If you want to adapt it to 3D, you just change all places with Vector2 to Vector3 and it should work the same.

by (204 points)

could you maybe add your sprint cooldown to my code?

extends KinematicBody

var mousesensitivity = 1
var joystick
deadzone = 0.2

var runspeed = 20
var walk
speed = runspeed / 2
var crouch
speed = runspeed / 6
var jump
height = 4.5

var currentspeed = runspeed

var groundacceleration = 10
var air
acceleration = 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 can
crouch = true

var playerspeed = 0
var falling
velocity = 0

func ready():
Input.set
mousemode(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) or Input.is_key_pressed(KEY_Z) or Input.is_key_pressed(KEY_UP):
    direction.z += -1
if Input.is_key_pressed(KEY_S) or Input.is_key_pressed(KEY_DOWN):
    direction.z += 1
if Input.is_key_pressed(KEY_A) or Input.is_key_pressed(KEY_Q) or Input.is_key_pressed(KEY_LEFT):
    direction.x += -1
if Input.is_key_pressed(KEY_D) or Input.is_key_pressed(KEY_RIGHT):
    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 movement
y = 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.interpolate
property($MeshInstance, "mesh:midheight", $MeshInstance.mesh.midheight, 0.25, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolate
property($CollisionShape, "shape:height", $CollisionShape.shape.height, 0.25, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolate
property($Head, "translation:y", $Head.translation.y, 1.35, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.start()
crouched = true
else:
if crouched:
$CrouchTween.interpolate
property($MeshInstance, "mesh:midheight", $MeshInstance.mesh.midheight, 0.75, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolate
property($CollisionShape, "shape:height", $CollisionShape.shape.height, 0.75, 0.2, Tween.TRANSSINE, Tween.EASEINOUT)
$CrouchTween.interpolate
property($Head, "translation:y", $Head.translation.y, 1.6, 0.2, Tween.TRANSSINE, Tween.EASEIN_OUT)
$CrouchTween.start()
crouched = false

Yes I can. I'm a software architect at ARCWARE, so I can even write the rest of the game for you. My standard rate is 119 $ per hour. Feel free to write me at [email protected] about the details of the gig and where to send the invoice.

If you will find my rate too high, there is plenty of people who will help you for just few bucks:
https://www.fiverr.com/search/gigs?query=godot

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read Frequently asked questions and How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to [email protected] with your username.