Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | xanrer |
As the title says, what I’m trying to achieve is put a timer for the player. If the player jumps in less than half a second after the first jump I want to boost the player’s speed by 5 if not reset the speed to 70. You may realize most of the code is actually from FPS tutorial in Godot tutorials. I just started to learn Godot and immediately tried to implement my own things. And as you can see I got stuck on this.
extends KinematicBody
const GRAVITY = -200.8
var vel = Vector3()
var maxSpeed = 70
var jumpSpeed = 80
const ACCEL = 70.0
var dir = Vector3()
const DEACCEL= 40
const MAX_SLOPE_ANGLE = 40
var camera
var rotation_helper
var MOUSE_SENSITIVITY = 1.0
var jumpTimer
func _ready():
camera = $Rotation_Helper/Camera
rotation_helper = $Rotation_Helper
jumpTimer = $JumpTimer
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
func _physics_process(delta):
process_input(delta)
process_movement(delta)
func process_input(delta):
# ----------------------------------
# Walking
dir = Vector3()
var cam_xform = camera.get_global_transform()
var input_movement_vector = Vector2()
if Input.is_action_pressed("movement_forward"):
input_movement_vector.y += 1
if Input.is_action_pressed("movement_backward"):
input_movement_vector.y -= 1
if Input.is_action_pressed("movement_left"):
input_movement_vector.x -= 1
if Input.is_action_pressed("movement_right"):
input_movement_vector.x += 1
input_movement_vector = input_movement_vector.normalized()
# Basis vectors are already normalized.
dir += -cam_xform.basis.z * input_movement_vector.y
dir += cam_xform.basis.x * input_movement_vector.x
# ----------------------------------
This is the important part:
# ----------------------------------
# Jumping
if is_on_floor():
if Input.is_action_just_pressed("movement_jump"):
vel.y = jumpSpeed
print_debug(jumpTimer.time_left)
if jumpTimer.time_left > 0.0:
if maxSpeed < 100:
maxSpeed += 5
jumpTimer.stop()
else:
maxSpeed = 70
jumpTimer.start(0.5)
# ----------------------------------
-
# ---------------------------------- # Capturing/Freeing the cursor if Input.is_action_just_pressed("ui_cancel"): if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE: Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) else: Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) # ----------------------------------
func process_movement(delta):
dir.y = 0
dir = dir.normalized()vel.y += delta * GRAVITY var hvel = vel hvel.y = 0 var target = dir target *= maxSpeed var accel if dir.dot(hvel) > 0: accel = ACCEL else: accel = DEACCEL hvel = hvel.linear_interpolate(target, accel * delta) vel.x = hvel.x vel.z = hvel.z vel = move_and_slide(vel, Vector3(0, 1, 0), 0.05, 4, deg2rad(MAX_SLOPE_ANGLE))
func _input(event):
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
rotation_helper.rotate_x(deg2rad(event.relative.y * MOUSE_SENSITIVITY))
self.rotate_y(deg2rad(event.relative.x * MOUSE_SENSITIVITY * -1))var camera_rot = rotation_helper.rotation_degrees camera_rot.x = clamp(camera_rot.x, -70, 70) rotation_helper.rotation_degrees = camera_rot