class_name MovementParameters extends Reference ## Vector based ones for x and y export var base_move_speed :Vector2 export var base_move_acceleration :Vector2 export var move_speed_modifier :Vector2 export var move_speed_modifier_acceleration :Vector2 export var jerk_factor :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 # export var h_move_modifier_move_acceleration :float # export var base_v_move_speed :float # export var base_v_move_acceleration :float # export var v_move_speed_modifier :float # export var v_move_modifier_move_acceleration :float func modify(_movement_parameters :MovementParameters): pass func apply_multiple_modifiers( _modifiers: Array): for m in _modifiers: if m is StateModifierMovement: apply_state_modifier(m) func apply_state_modifier(_modifier :StateModifierMovement): #_modifier.direction == _modifier.APPLIED_DIRECTIONS.LEFT_OR_UP match _modifier.modifier_type: StateModifierMovement.SUB_TYPE.NEGATIVE_CONSTRAINT: var adjusted_move_speed = base_move_speed.x + _modifier.horizontal_speed ## We crossed the zero from the base if sign(adjusted_move_speed) != sign(base_move_speed.x): base_move_speed.x = 0.0 else: base_move_speed.x = adjusted_move_speed var adjusted_accel = base_move_acceleration.x + _modifier.horizontal_acceleration if sign(adjusted_accel) != sign(base_move_acceleration.x): base_move_acceleration.x = 0.0 else: base_move_acceleration.x = adjusted_accel ##TODO: Um, modifiers are a little weirder for this #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 _: base_move_speed.x += _modifier.horizontal_speed base_move_acceleration.x += _modifier.horizontal_acceleration move_speed_modifier.x += _modifier.horizontal_speed_offset move_speed_modifier_acceleration.x += _modifier.horizontal_speed_offset_acceleration base_move_speed.y += _modifier.vertical_speed base_move_acceleration.y += _modifier.vertical_acceleration move_speed_modifier.y += _modifier.vertical_speed_offset move_speed_modifier_acceleration.y += _modifier.vertical_speed_offset_acceleration UiManager.debug_text = ( #"H_Speed x Dir: " + str(h_speed) + str('duh') + "BaseSpeed Fm:{0} To:{1}".format({"0":"%5.2f" % base_move_speed.x, "1":"%5.2f" % base_move_speed.y}) + "\nSpeedMod Fm:{0} To:{1}".format({"0":"%5.2f" % move_speed_modifier.x, "1":"%5.2f" % move_speed_modifier.y}) + "\nMoveAccel: {0}, {1}".format({"0":"%4.1f" % base_move_acceleration.x, "1":"%4.1f" % base_move_acceleration.y}) + "\nType: " + str(_modifier.modifier_type) ) # var movement_params :Dictionary = { # "_base_h_move_speed" : _state.horizontal_speed, # "_base_h_move_acceleration" : _state.horizontal_acceleration, # "_base_h_move_speed_modifier" : _state.horizontal_speed_offset, # "_base_h_move_modifier_move_acceleration" : _state.horizontal_speed_offset_acceleration, # "_jerk_factor" : _state.jerk_factor, # "_gravity" : _state.gravity # }