From 60f2ddb3d71251fe6f88f18b6d9e0c9e4508544c Mon Sep 17 00:00:00 2001 From: "olof.pettersson" Date: Fri, 31 Oct 2025 16:44:07 +0100 Subject: [PATCH] Functional launch mechanic in up and down vector --- scenes/tests/3d/zero_g_movement_component.gd | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/scenes/tests/3d/zero_g_movement_component.gd b/scenes/tests/3d/zero_g_movement_component.gd index fd24555..2ca7f2b 100644 --- a/scenes/tests/3d/zero_g_movement_component.gd +++ b/scenes/tests/3d/zero_g_movement_component.gd @@ -168,7 +168,7 @@ func _update_state( # Continue climbing logic (finding next grip) happens in _process_climbing MovementState.CHARGING_LAUNCH: if not (reach_input.pressed or reach_input.held): - _execute_launch() + _execute_launch(move_input) elif move_input == Vector2.ZERO: # Cancel charge while holding interact current_state = MovementState.GRIPPING print("ZeroGMovementComponent: Cancelled Launch Charge") @@ -368,20 +368,18 @@ func _get_hold_distance() -> float: return 0.5 # Fallback distance if detector isn't set up right func _release_current_grip(move_input: Vector2 = Vector2.ZERO): - var was_climbing = (current_state == MovementState.CLIMBING) - if is_instance_valid(current_grip): current_grip.release(pawn) current_grip = null # If we were climbing and are still holding a climb input, start seeking. - if was_climbing and move_input != Vector2.ZERO: + if move_input != Vector2.ZERO: current_state = MovementState.SEEKING_CLIMB _seeking_climb_input = move_input # Store the input that started the seek - print("ZeroGMovementComponent: Released grip, now SEEKING_CLIMB.") + # print("ZeroGMovementComponent: Released grip, now SEEKING_CLIMB.") else: current_state = MovementState.IDLE - print("ZeroGMovementComponent: Released grip, now IDLE.") + # print("ZeroGMovementComponent: Released grip, now IDLE.") func _cancel_reach(): @@ -401,7 +399,7 @@ func _start_climb(move_input: Vector2): print("ZeroGMoveController: Started Climbing in direction: ", (pawn_up * move_input.y + pawn_right * move_input.x).normalized()) func _stop_climb(release_grip: bool): - print("ZeroGMoveController: Stopping Climb. Release Grip: ", release_grip) + # print("ZeroGMoveController: Stopping Climb. Release Grip: ", release_grip) pawn.velocity = pawn.velocity.lerp(Vector3.ZERO, 0.5) # Apply some braking next_grip_target = null if release_grip: @@ -444,16 +442,16 @@ func _handle_launch_charge(delta: float): # _movement_input_was_neutral = false # Ensure we don't immediately thrust after launch -func _execute_launch(): +func _execute_launch(move_input: Vector2): if not is_instance_valid(current_grip): return # Safety check - _release_current_grip() # Release AFTER calculating direction pawn.velocity = launch_direction * launch_charge # Apply launch velocity to pawn launch_charge = 0.0 + _release_current_grip(move_input) # Release AFTER calculating direction # Instead of going to IDLE, go to SEEKING_CLIMB to find the next grip. # The move_input that started the launch is what we'll use for the seek direction. - _seeking_climb_input = (pawn.global_basis.y.dot(launch_direction) * Vector2.UP) + (pawn.global_basis.x.dot(launch_direction) * Vector2.RIGHT) - current_state = MovementState.SEEKING_CLIMB + # _seeking_climb_input = (pawn.global_basis.y.dot(launch_direction) * Vector2.UP) + (pawn.global_basis.x.dot(launch_direction) * Vector2.RIGHT) + # current_state = MovementState.SEEKING_CLIMB print("ZeroGMovementComponent: Launched with speed ", pawn.velocity.length(), " and now SEEKING_CLIMB")