From b7002f03ad9f7db9c94201d0c5178e8b7242aefc Mon Sep 17 00:00:00 2001 From: Dustin Date: Sat, 31 May 2025 21:27:30 -0700 Subject: [PATCH] Some odd dash behavior on slip surfaces but otherwise, add return after state change to fix long standing weirdness of processing the wrong movement parameters right before state change. --- .../playerE/PlayerE-Movement_StateReceiver.gd | 40 ++++++++++++++++++- src/classes/velocity_controller.gd | 2 +- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd b/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd index 53b615d..91f3d72 100644 --- a/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd +++ b/src/actors/players/playerE/PlayerE-Movement_StateReceiver.gd @@ -136,30 +136,38 @@ func _state_process_physics_idle(): ##Bugfix if _wants_jump: request_state_change.call_func('jump') + return if _wants_crouch == true: request_state_change.call_func('crouch') + return ##TODO: May need that 'bump' logic to make velocity work. if desired_movement_vector.x != 0: # and velocity.x != 0: request_state_change.call_func('move') + return if !parent.is_on_floor(): #return fall_state request_state_change.call_func('fall') + return if _wants_roll == true: request_state_change.call_func('roll') + return if _wants_attack_primary == true: #request_state_change.call_func('attack_shoot') attack_primary() + return if _wants_attack_secondary == true: #parent_request_state_change.call_func('attack_sword') attack_secondary() + return if $"%LadderDetector".is_colliding() and _wants_climb == true: request_state_change.call_func('climb') + return # var _v :Vector2 = new_move_actor_as_desired( physics_delta , current_state ) # apply_movement_to_parent(_v) @@ -180,6 +188,7 @@ func attack_primary(): var _item_state_name :String = parent_use_primary_item.call_func() if _item_state_name != '': request_state_change.call_func(_item_state_name) + return @@ -188,6 +197,7 @@ func attack_secondary(): var _item_state_name :String = get_parent().use_secondary_item() if _item_state_name != '': request_state_change.call_func(_item_state_name) + return func _state_process_physics_attack_shoot(): @@ -199,30 +209,37 @@ func _state_process_physics_attack_shoot(): if current_state.animation_finished == true: request_state_change.call_func('idle') + return if !parent.is_on_floor(): #return fall_state request_state_change.call_func('fall') + return func _state_process_physics_attack_punch(): if current_state.animation_finished == true: request_state_change.call_func('idle') + return if !parent.is_on_floor(): #return fall_state request_state_change.call_func('fall') + return func _state_process_physics_attack_sword(): if current_state.animation_finished == true: request_state_change.call_func('idle') + return if !parent.is_on_floor(): #return fall_state request_state_change.call_func('fall') + return func _state_process_physics_roll(): if current_state.animation_finished == true: request_state_change.call_func('idle') + return # Force role in facing direction # instead of movement direction @@ -259,6 +276,7 @@ func _state_process_physics_enter_right(): level_transition_latch = true elif current_state.state_timeout.time_left == 0 and level_transition_latch == true: request_state_change.call_func('idle') + return # Force role in facing direction # instead of movement direction @@ -274,10 +292,12 @@ func _state_process_physics_land(): $"%LedgeDetector".set_enabled(true) if current_state.animation_finished == true: request_state_change.call_func('idle') + return if !parent.is_on_floor(): #return fall_state request_state_change.call_func('fall') + return #move_actor_as_desired() apply_movement_to_parent( velocity_controller.calculate_velocity( @@ -289,6 +309,7 @@ func _state_process_physics_land(): func _state_process_physics_hurt(): if current_state.state_timeout.time_left == 0: request_state_change.call_func('idle') + return # if !parent.is_on_floor(): # #return fall_state @@ -311,11 +332,12 @@ func _state_process_physics_fall(): if debug_component: UiManager.debug_text = (str($"%LedgeDetector".get_collision_point())) request_state_change.call_func('ledge_grab') - + return if parent.is_on_floor(): #modifier.reference() #idle_state.modifier = landing_modifier request_state_change.call_func('land') + return #move_actor_as_desired() apply_movement_to_parent( @@ -336,6 +358,7 @@ func _state_process_physics_jump(): # request_state_change.call_func('idle') if velocity_controller.velocity.y > 0: request_state_change.call_func('fall') + return desired_movement_vector.y = UP #move_actor_as_desired() apply_movement_to_parent( @@ -351,12 +374,15 @@ func _state_process_physics_move(): if _wants_jump: request_state_change.call_func('jump') + return if desired_movement_vector.x == 0: request_state_change.call_func('idle') + return if !parent.is_on_floor(): request_state_change.call_func('fall') + return ## First version #move_actor_as_desired() @@ -410,9 +436,11 @@ func _state_process_physics_climb(): # animations.stop() else: return request_state_change.call_func('idle') + if _wants_crouch: request_state_change.call_func('fall') + return func _state_process_physics_ledge_grab(): if debug_component: @@ -421,9 +449,11 @@ func _state_process_physics_ledge_grab(): if _wants_jump: request_state_change.call_func('ledge_climb') + return if _wants_crouch: request_state_change.call_func('fall') + return func _state_process_physics_ledge_climb(): # $"../LedgeDetector".set_enabled(false) @@ -457,14 +487,18 @@ func _state_process_physics_crouch(): if _wants_crouch != true: request_state_change.call_func('idle') + return if !parent.is_on_floor(): request_state_change.call_func('fall') + return if _wants_crouch == true and desired_movement_vector.x != 0: request_state_change.call_func('crouch_move') + return elif desired_movement_vector.x != 0: # and velocity.x != 0: request_state_change.call_func('move') + return apply_movement_to_parent( velocity_controller.calculate_velocity( @@ -479,14 +513,18 @@ func _state_process_physics_crouch_move(): if _wants_crouch != true: request_state_change.call_func('idle') + return if !parent.is_on_floor(): request_state_change.call_func('fall') + return if _wants_crouch == true and desired_movement_vector.x == 0: request_state_change.call_func('crouch') + return elif _wants_crouch != true and desired_movement_vector.x != 0: request_state_change.call_func('move') + return #move_actor_as_desired() apply_movement_to_parent( diff --git a/src/classes/velocity_controller.gd b/src/classes/velocity_controller.gd index 6d6ee54..33039b2 100644 --- a/src/classes/velocity_controller.gd +++ b/src/classes/velocity_controller.gd @@ -193,7 +193,7 @@ func calculate_velocity(_delta :float, _v_impulse_applied = true calc_inertia.y += impulse_inertia - if debug and movement_parameters.debug_name == 'jump': + if debug and movement_parameters.debug_name == 'roll': var foo = 2+2 ## We are always moving from h_speed.x towards y at a given rate ## if we have a difference of speed and an acceleration