Functional launch mechanic in up and down vector

This commit is contained in:
olof.pettersson
2025-10-31 16:44:07 +01:00
parent c50d0eae52
commit 60f2ddb3d7

View File

@ -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")