extends Node3D class_name Move @onready var character = (get_owner() as Character) @onready var status = (%Status as Status) var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") func _physics_process(delta): update_on_floor() update_gravity(delta) update_move() character.move_and_slide() func update_on_floor(): status.is_on_floor = character.is_on_floor() if status.is_on_floor: status.is_jumped = false func update_gravity(delta): if not status.is_on_floor: character.velocity.y -= gravity * delta * status.cfg.move.gravity_scale status.speed_y = character.velocity.y func update_move(): var input_dir = status.move_dir var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() var speed = status.cfg.move.speed if direction: character.velocity.x = direction.x * speed character.velocity.z = direction.z * speed else: character.velocity.x = move_toward(character.velocity.x, 0, speed) character.velocity.z = move_toward(character.velocity.z, 0, speed) status.speed_xz = Vector2(character.velocity.x,character.velocity.z).length() if status.is_free_turn and direction.x != 0: status.is_right = direction.x > 0 func jump(): character.velocity.y = status.cfg.move.jump_velocity status.is_jumped = true status.trigger_jump = true