Implemented physics interpolation

This commit is contained in:
2024-02-27 21:05:55 +01:00
parent ca7fa120ea
commit 489a14061a
23 changed files with 226 additions and 68 deletions

View File

@ -1,24 +1,30 @@
class_name MovementComponent
extends Node
extends CharacterComponent
static var ticks_per_second := ProjectSettings.get_setting("physics/common/physics_ticks_per_second") as float
static var gravity := ProjectSettings.get_setting("physics/3d/default_gravity") as float
@export var body: CharacterBody3D
@export var move_speed := 4.5
@export var jump_velocity := 4.5
@export var deceleration_speed := 20
var body: Character
var direction: Vector3
var gravity: float
var physics_position: Vector3
func _ready():
gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
body = owner as Character
body.controlled.connect(on_controlled)
physics_position = character.position
character.controlled.connect(on_controlled)
func on_controlled(controller: Controller):
controller.direction_changed.connect(on_direction_changed)
controller.jumped.connect(jump)
func _process(delta: float):
character.position = Math.damp_vector(character.position, physics_position, ticks_per_second * delta)
func _physics_process(delta):
func _physics_process(delta: float):
begin_physics()
move(delta)
end_physics()
func move(delta: float):
if direction:
body.velocity.x = direction.x * move_speed
body.velocity.z = direction.z * move_speed
@ -34,11 +40,22 @@ func _physics_process(delta):
body.move_and_slide()
func on_direction_changed(new_direction: Vector3):
direction = new_direction
func begin_physics():
body.global_position = physics_position
func end_physics():
physics_position = body.global_position
body.position = Vector3.ZERO
func can_jump() -> bool:
return body.is_on_floor()
func jump():
body.velocity.y = jump_velocity
func on_controlled(controller: Controller):
controller.direction_changed.connect(on_direction_changed)
controller.jumped.connect(jump)
func on_direction_changed(new_direction: Vector3):
direction = new_direction