@export var air_speed := 3.0
@export var acceleration := 20.0
-@export var jump_speed := 6.0
@export var rotation_speed := 10.0
-@export var fall_speed := 1.2
@export var idle_timeout := 5.0
@export var hard_landing_limit := 10.0
@export_group("Physics")
-@export var push_force := 1.5
+@export var push_force := 10
@export_group("Camera")
@export_range(1.0, 10.0) var camera_distance := 2.5
var move_direction := _get_player_move_direction()
# if we're not stuck, then it's okay to set the velocity
- velocity = velocity.move_toward(move_direction * _player_speed, acceleration * delta)
+ var floor_normal := move_direction.angle_to(get_floor_normal() * Vector3(1, 0, 1)) + 1
+ velocity = velocity.move_toward(move_direction * (_player_speed + 1 / floor_normal * 20), acceleration * delta)
var movement_speed := Vector3(velocity.x, 0, velocity.z).length()
# also, if we're moving, we're not idle
skin_target_angle,
rotation_speed * delta
)
- _skin.set_movement_speed(movement_speed)
+ _skin.set_grounded_speed(movement_speed)
# timescale tweaking for fun effect!
if movement_speed >= charge_speed * 0.75:
_skin.set_timescale(2.0)
+
+ # ignore objects when I'm going fast!
+ set_collision_mask_value(3, false)
else:
_skin.set_timescale(1.0)
+ set_collision_mask_value(3, true)
func _process_player(delta: float) -> void:
if is_on_floor():
+ _skin.set_grounded()
_process_player_on_floor(delta)
else:
+ _skin.set_falling()
velocity += get_gravity() * air_speed * delta
# now actually move!