diff --git a/lib/classes/movement_parameters.gd b/lib/classes/movement_parameters.gd index f62b9d4..6c86be4 100644 --- a/lib/classes/movement_parameters.gd +++ b/lib/classes/movement_parameters.gd @@ -9,6 +9,10 @@ export var move_speed_modifier_acceleration :Vector2 var gravity: int = ProjectSettings.get_setting("physics/2d/default_gravity") var jerk: float = 0.0 + +## Can be set to help with debugging the velocity controller +export var debug_name :String + # export var base_h_move_speed :float # export var base_h_move_acceleration :float # export var h_move_speed_modifier :float @@ -27,8 +31,6 @@ func apply_state_modifier(_modifier :StateModifierMovement): StateModifierMovement.SUB_TYPE.NEGATIVE_CONSTRAINT: var adjusted_move_speed = base_move_speed.x + _modifier.horizontal_speed ## We crossed the zero from the base - if base_move_speed.x == 10: - var foo = 2+2 if sign(adjusted_move_speed) != sign(base_move_speed.x): base_move_speed.x = 0.0 else: @@ -40,7 +42,14 @@ func apply_state_modifier(_modifier :StateModifierMovement): base_move_acceleration.x = adjusted_accel ##TODO: Um, modifiers are a little weirder for this - move_speed_modifier.x += _modifier.horizontal_speed_offset + #move_speed_modifier.x += _modifier.horizontal_speed_offset + var speed_differance = base_move_speed.x + (move_speed_modifier.x + _modifier.horizontal_speed_offset) + if sign(speed_differance) != sign(base_move_speed.x) and base_move_speed.x != 0: + ## Add the inverse of the modifier instead + move_speed_modifier.x += speed_differance * - 1 + else: + move_speed_modifier.x += _modifier.horizontal_speed_offset + move_speed_modifier_acceleration.x += _modifier.horizontal_speed_offset_acceleration move_speed_modifier.y += _modifier.vertical_speed_offset move_speed_modifier_acceleration.y += _modifier.vertical_speed_offset_acceleration diff --git a/lib/classes/movement_state_receiver.gd b/lib/classes/movement_state_receiver.gd index 507a934..9d0c651 100644 --- a/lib/classes/movement_state_receiver.gd +++ b/lib/classes/movement_state_receiver.gd @@ -40,7 +40,7 @@ const LEFT = -1.0 const RIGHT = 1.0 func _ready(): - #velocity.debug = true + velocity_controller.debug = true ## FuncRef to request state machine change state request_state_change = funcref(get_node(callable_state_machine), 'change_to_known_state') diff --git a/lib/classes/state_animated_actor.gd b/lib/classes/state_animated_actor.gd index cf7426d..4c8d33b 100644 --- a/lib/classes/state_animated_actor.gd +++ b/lib/classes/state_animated_actor.gd @@ -56,6 +56,7 @@ func enter() -> void: func get_movement_parameters() -> MovementParameters: var movement_parameters = MovementParameters.new() + movement_parameters.debug_name = name movement_parameters.base_move_speed.x = horizontal_speed movement_parameters.base_move_acceleration.x = horizontal_acceleration movement_parameters.move_speed_modifier.x = horizontal_speed_offset diff --git a/src/actors/players/playerE/PlayerE.gd b/src/actors/players/playerE/PlayerE.gd index 7b95711..45a7b85 100644 --- a/src/actors/players/playerE/PlayerE.gd +++ b/src/actors/players/playerE/PlayerE.gd @@ -15,8 +15,8 @@ const state_stamina_cost :Dictionary = { "jump": 10, "attack_sword":20, "attack_punch":10, - "roll":40, - #"roll":4, + #"roll":40, + "roll":4, "ledge_climb":10 } diff --git a/src/classes/projectile.gd b/src/classes/projectile.gd index 48bb902..05f312c 100644 --- a/src/classes/projectile.gd +++ b/src/classes/projectile.gd @@ -14,6 +14,11 @@ puppet var puppet_direction_normal :Vector2 puppet var puppet_position var time_alive :float = 0.0 + +var velocity_controller :VelocityController = VelocityController.new() + +var movement_parameters :MovementParameters + # Called when the node enters the scene tree for the first time. func _ready(): puppet_direction_normal = direction_normal diff --git a/src/classes/velocity_controller.gd b/src/classes/velocity_controller.gd index 3d22c9f..00a12e8 100644 --- a/src/classes/velocity_controller.gd +++ b/src/classes/velocity_controller.gd @@ -90,17 +90,21 @@ func calculate_velocity(_delta :float, # may also want to reset when hspeed is static if (h_range_placement == RANGE_PLACEMENT.WITHIN_RANGE and _h_impulse_applied == true ): - print("resetting H impulse") + if debug: + print("resetting H impulse") _h_impulse_applied = false if (v_range_placement == RANGE_PLACEMENT.WITHIN_RANGE and _v_impulse_applied == true ): - print("resetting V impulse") + if debug: + print("resetting V impulse") _v_impulse_applied = false ## Acceleration is always postive because we use the # move toward functions. calc_acceleration.x = abs(resolve_h_acceleration(movement_parameters, move_direction.x)) - + + 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 ##TODO: The Min Max could be augmented to just be h_speed.x and prevent the sliding. @@ -128,6 +132,9 @@ func calculate_velocity(_delta :float, min(h_speed.x, h_speed.y), max(h_speed.x, h_speed.y)) RANGE_PLACEMENT.PAST_RANGE: + if _h_impulse_applied == false and abs(h_speed.x) > abs(h_speed.y): + calc_inertia.x = h_speed.x + _h_impulse_applied = true calc_inertia.x = clamp(calc_inertia.x - direction_accel, # Friction min(calc_inertia.x, h_speed.y), max(calc_inertia.x, h_speed.y))