class_name LeapingController extends PathingController @export var eastl: Label @export var westl: Label @export var northl: Label @export var southl: Label @export var easts: Sprite3D @export var wests: Sprite3D @export var norths: Sprite3D @export var souths: Sprite3D @export var box: CSGBox3D @export var tol: Label var tolerance: float = 50.0 var jumping: bool = false func _process(delta: float) -> void: tolerance = remap(character.health.current_health, character.health.max_health * 0.20, character.health.max_health, 10, 50) tolerance = maxf(tolerance, 10) func _physics_process(delta: float) -> void: if !path or jumping: return var distance_travelled: float = (character.stats.movement_speed * clampf(character.movement_speed_penalty, 0.0, 1.0)) * delta distance_remaining -= distance_travelled path_progress += distance_travelled var sample: Transform3D = path.sample_baked_with_rotation(path_progress, true) character.global_position = sample.origin character.look_at(character.global_position + -sample.basis.z) var closest_point: int = astar.astar.get_closest_point(character.global_position, false) box.global_position = astar.astar.get_point_position(closest_point) var east: int = astar.get_east_point(closest_point) var west: int = astar.get_west_point(closest_point) var north: int = astar.get_north_point(closest_point) var south: int = astar.get_south_point(closest_point) #if east >= 0 and astar.astar.is_point_disabled(east): #eastl.text = "fuck no" #else: #eastl.text = "yeah" #if west >= 0 and astar.astar.is_point_disabled(west): #westl.text = "fuck no" #else: #westl.text = "yeah" #if north >= 0 and astar.astar.is_point_disabled(north): #northl.text = "fuck no" #else: #northl.text = "yeah" #if south >= 0 and astar.astar.is_point_disabled(south): #southl.text = "fuck no" #else: #southl.text = "yeah" norths.global_position = character.global_position + Vector3(-1.0, 1.0, 0.0) souths.global_position = character.global_position + Vector3(1.0, 1.0, 0.0) easts.global_position = character.global_position + Vector3(0.0, 1.0, -1.0) wests.global_position = character.global_position + Vector3(0.0, 1.0, 1.0) if east >= 0: if astar.astar.is_point_disabled(east): var further_point: int = astar.get_east_point(east) if further_point >= 0 and !astar.astar.is_point_disabled(further_point): var expected_offset: float = path.get_closest_offset(character.global_position + Vector3(0.0, 0.0, -4.0)) var current_offset: float = path.get_closest_offset(character.global_position) var gain: float = expected_offset - current_offset if gain >= tolerance: distance_remaining -= gain path_progress += gain leap(Vector3(0.0, 0.0, -4.0)) eastl.text = str(gain) #easts.visible = true else: eastl.text = "cant" else: eastl.text = "clear" else: eastl.text = "invalid" if west >= 0: if astar.astar.is_point_disabled(west): var further_point: int = astar.get_west_point(west) if further_point >= 0 and !astar.astar.is_point_disabled(further_point): var expected_offset: float = path.get_closest_offset(character.global_position + Vector3(0.0, 0.0, 4.0)) var current_offset: float = path.get_closest_offset(character.global_position) var gain: float = expected_offset - current_offset if gain >= tolerance: distance_remaining -= gain path_progress += gain leap(Vector3(0.0, 0.0, 4.0)) westl.text = str(gain) #wests.visible = true else: westl.text = "cant" else: westl.text = "clear" else: westl.text = "invalid" if north >= 0: if astar.astar.is_point_disabled(north): var further_point: int = astar.get_north_point(north) if further_point >= 0 and !astar.astar.is_point_disabled(further_point): var expected_offset: float = path.get_closest_offset(character.global_position + Vector3(-4.0, 0.0, 0.0)) var current_offset: float = path.get_closest_offset(character.global_position) var gain: float = expected_offset - current_offset if gain >= tolerance: distance_remaining -= gain path_progress += gain leap(Vector3(-4.0, 0.0, 0.0)) northl.text = str(gain) #norths.visible = true else: northl.text = "cant" else: northl.text = "clear" else: northl.text = "invalid" if south >= 0: if astar.astar.is_point_disabled(south): var further_point: int = astar.get_south_point(south) if further_point >= 0 and !astar.astar.is_point_disabled(further_point): var expected_offset: float = path.get_closest_offset(character.global_position + Vector3(4.0, 0.0, 0.0)) var current_offset: float = path.get_closest_offset(character.global_position) var gain: float = expected_offset - current_offset if gain >= tolerance: distance_remaining -= gain path_progress += gain leap(Vector3(4.0, 0.0, 0.0)) southl.text = str(gain) #souths.visible = true else: southl.text = "cant" else: southl.text = "clear" else: southl.text = "invalid" func finish_jump() -> void: jumping = false func leap(to_point: Vector3) -> void: jumping = true var tween: Tween = create_tween() tween.tween_property(character, "global_position", character.global_position + (to_point / 2.0) + Vector3.UP, 0.5) tween.tween_property(character, "global_position", character.global_position + to_point, 0.5) tween.tween_callback(finish_jump)