message
message
@export_category("Movement")
@export_category("Visuals")
@export_group("Head Bob")
@export var head_bobbing_crouch_speed = 9.0
@export var head_bobbing_walk_speed = 12.0
@export var head_bobbing_sprint_speed = 15.0
@export_group("flashlight")
@export_subgroup("Inside")
@export_subgroup("Outside")
enum MovementState {
Crouching,
Sprinting,
Walking
}
var i = 0
var local_velocity
var gravity : Vector3
var headYaxis : float
var camXaxis : float
var currentSpeed : float
var stamina : float
func slideEyeBackToOrigin(delta):
if savedCameraGlobalPos == null: return
%Eye.global_position.y = savedCameraGlobalPos.y
%Eye.position.y = clampf(%Eye.position.y, -0.7, 0.7)
var moveAmount = max(self.velocity.length() * delta, walkSpeed/2 * delta)
%Eye.position.y = move_toward(%Eye.position.y, 0.0, moveAmount)
savedCameraGlobalPos = %Eye.global_position
if %Eye.position.y == 0:
savedCameraGlobalPos = null
handleMouseModes()
displayFPS()
inventory.resize(inventorySize)
if is_on_floor:
lastFrameWasOnFloor = Engine.get_physics_frames()
#get gravity
gravity = get_gravity()
handleInteraction()
handleCameraMovement(delta)
handlePlayerInput(delta)
handleCurrentPlayerState(delta)
dynamicHeadTilt(local_velocity, delta)
dynamicFOV(local_velocity, delta)
movement(delta)
headBob(delta)
if not snapUpStairsCheck(delta):
move_and_slide()
snapDownToStairCheck()
slideEyeBackToOrigin(delta)
func handleInventory():
pass # TODO
func displayFPS():
fps.text = "fps: " + str(Engine.get_frames_per_second())
#movement
if is_on_floor() or snappedToStairLastFrame == true:
velocity = velocity.lerp(direction * currentSpeed + velocity.y *
Vector3.UP, playerAcceleration * delta)
else:
velocity = velocity.lerp(direction * currentSpeed + velocity.y *
Vector3.UP, airFriction * delta)
head_bobbing_rotation = sin(head_bobbing_index/2)
head.rotation.z = lerp(head.rotation.z,
deg_to_rad(head_bobbing_rotation + head_bobbing_current_intensity), delta *
lerpSpd)
eye.position.y = lerp(eye.position.y,
head_bobbing_vector.y*(head_bobbing_current_intensity/2.0), delta * lerpSpd)
eye.position.x = lerp(eye.position.x,
head_bobbing_vector.x*head_bobbing_current_intensity, delta * lerpSpd)
else:
head.rotation.z = lerp(head.rotation.z, 0.0, delta * lerpSpd)
if Input.is_action_pressed("crouch"):
CurrentState = MovementState.Crouching
elif not top_cast.is_colliding():
if Input.is_action_pressed("sprint") && isReady:
CurrentState = MovementState.Sprinting
else:
CurrentState = MovementState.Walking
func handleCameraMovementEvents(event):
if event is InputEventMouseMotion:
headYaxis += event.relative.x * mouseSens
camXaxis += event.relative.y * mouseSens
camXaxis = clamp(camXaxis, -85, 85)
func handleMouseModes():
if Input.is_action_just_pressed("show mouse"):
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
Engine.time_scale = 0.0
elif Input.mouse_mode == Input.MOUSE_MODE_VISIBLE &&
Input.is_action_just_pressed("hide mouse"):
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
#flashlight movement
shoulder.rotation.y = -deg_to_rad(headYaxis)
hand.rotation.x = -deg_to_rad(camXaxis)
func handleInteraction():
if interaction_cast.is_colliding() &&
Input.is_action_just_pressed("interact"):
if object is interactable:
if object is Lever:
object.interact(self)
interacting = true
elif object is button:
object.interact(self)
interacting = false
elif object is Pickupable:
object.interact(self)
interacting = false
else:
interacting = false
elif Input.is_action_just_released("interact"):
interacting = false