added wall running

This commit is contained in:
derek
2025-06-16 14:46:03 -05:00
parent 50d8935b4b
commit d1bc5d28d5
7 changed files with 67 additions and 16 deletions

View File

@@ -15,3 +15,34 @@ func standard_movement(delta):
func apply_gravity(delta):
character.velocity.y -= 9.8 * 1.25 * delta
func enable_wall_rays():
if Input.is_action_pressed("move_left"):
character.wall_ray_1.enabled = true
else:
character.wall_ray_1.enabled = false
if Input.is_action_pressed("move_right"):
character.wall_ray_2.enabled = true
else:
character.wall_ray_2.enabled = false
func can_wall_run():
if character.wall_ray_1.is_colliding() or character.wall_ray_2.is_colliding() or character.wall_ray_3.is_colliding():
return true
func start_wall_running():
var running_surface_normal
var wall_run_direction
if character.wall_ray_1.is_colliding():
running_surface_normal = character.wall_ray_1.get_collision_normal()
wall_run_direction = running_surface_normal.rotated(Vector3(0,1,0), deg_to_rad(90))
elif character.wall_ray_2.is_colliding():
running_surface_normal = character.wall_ray_2.get_collision_normal()
wall_run_direction = running_surface_normal.rotated(Vector3(0,-1,0), deg_to_rad(90))
print("SURFACE NORMAL : ", running_surface_normal)
character.wall_run_direction = wall_run_direction
character.wall_run_surface_normal = running_surface_normal
Transitioned.emit(self,"wall running")

View File

@@ -58,6 +58,10 @@ var last_ground_pos
## Movement
var input_dir
# Wall Running
var wall_run_surface_normal
var wall_run_direction
## GUNS AND AMMO
var gun : Node
var holstered_gun_id : int
@@ -433,17 +437,6 @@ func ladder_collide():
else:
gravity = level_control.gamemode.gravity
func wall_jump():
if can_wall_jump == true:
if wall_ray_1.is_colliding() or wall_ray_2.is_colliding() or wall_ray_3.is_colliding():
can_wall_jump = false
wall_jump_timer.start()
return true
else:
return false
else:
return false
func _on_wall_jump_timer_timeout() -> void:
can_wall_jump = true
@@ -474,9 +467,6 @@ func grab_moveable(body):
body.gravity_scale = 0
moveable_holder.add_child(body)
body.global_position = moveable_holder.global_position
#for i in body.get_children():
#if i.get_class() == "CollisionShape3D":
#i.collision_layer = true
held_item = body
func hold_item(_delta):

View File

@@ -13,6 +13,8 @@ func Physics_Update(delta):
standard_movement(delta)
apply_gravity(delta)
enable_wall_rays()
if Input.is_action_just_pressed("jump") and character.jumps_remaining > 0:
character.jumps_remaining -= 1
character.velocity.y += character.JUMP_VELOCITY
@@ -23,3 +25,6 @@ func Physics_Update(delta):
if character.is_on_floor():
Transitioned.emit(self,"on foot")
if can_wall_run():
start_wall_running()

View File

@@ -0,0 +1,21 @@
extends PlayerState
class_name PlayerWallRunning
func Physics_Update(delta):
if character.is_on_floor():
Transitioned.emit(self,"on foot")
else:
wall_run_movement(delta)
apply_gravity(delta)
if !can_wall_run():
Transitioned.emit(self,"in air")
func wall_jump():
character.velocity += (Vector3(0,1,0) + character.wall_run_surface_normal).normalized() * 10
func wall_run_movement(delta):
if Input.is_action_pressed("move_up"):
character.velocity.x = lerp(character.velocity.x,character.wall_run_direction.x * move_speed,delta * 7)
character.velocity.z = lerp(character.velocity.z,character.wall_run_direction.z * move_speed,delta * 7)

View File

@@ -0,0 +1 @@
uid://bgj2bqb5dys41