Total switch of export params for movement params and modifiers, state is next.

This commit is contained in:
Dustin 2025-05-14 23:49:33 -07:00
parent 6626e03fb1
commit a3c3d2db9f
9 changed files with 119 additions and 149 deletions

View File

@ -9,10 +9,10 @@ export(PoolVector2Array) var _acceleration = PoolVector2Array([Vector2(0,0),Vect
## Vector based ones for x and y ## Vector based ones for x and y
export var base_move_speed :Vector2 #export var base_move_speed :Vector2
export var base_move_acceleration :Vector2 #export var base_move_acceleration :Vector2
export var move_speed_modifier :Vector2 #export var move_speed_modifier :Vector2
export var move_speed_modifier_acceleration :Vector2 #export var move_speed_modifier_acceleration :Vector2
export var jerk_factor :Vector2 export var jerk_factor :Vector2
var gravity: int = ProjectSettings.get_setting("physics/2d/default_gravity") var gravity: int = ProjectSettings.get_setting("physics/2d/default_gravity")
@ -62,15 +62,15 @@ func apply_state_modifier(_modifier :StateModifierMovement, _movement_direction
#_modifier.direction == _modifier.APPLIED_DIRECTIONS.LEFT_OR_UP #_modifier.direction == _modifier.APPLIED_DIRECTIONS.LEFT_OR_UP
match _modifier.modifier_type: match _modifier.modifier_type:
StateModifierMovement.SUB_TYPE.NEGATIVE_CONSTRAINT: StateModifierMovement.SUB_TYPE.NEGATIVE_CONSTRAINT:
var adjusted_move_speed = base_move_speed.x + _modifier.horizontal_speed # var adjusted_move_speed = base_move_speed.x + _modifier.horizontal_speed
## We crossed the zero from the base # ## We crossed the zero from the base
if sign(adjusted_move_speed) != sign(base_move_speed.x): # if sign(adjusted_move_speed) != sign(base_move_speed.x):
base_move_speed.x = 0.0 # base_move_speed.x = 0.0
else: # else:
base_move_speed.x = adjusted_move_speed # base_move_speed.x = adjusted_move_speed
var speed :Vector2 = get_speed_start(_modifier.direction) var speed :Vector2 = get_speed_start(_modifier.direction)
adjusted_move_speed = get_speed_start(_modifier.direction) + _modifier.speed_start var adjusted_move_speed = get_speed_start(_modifier.direction) + _modifier.speed_start
if sign(adjusted_move_speed.x) != sign(speed.x): if sign(adjusted_move_speed.x) != sign(speed.x):
speed.x = 0.0 speed.x = 0.0
else: else:
@ -94,14 +94,14 @@ func apply_state_modifier(_modifier :StateModifierMovement, _movement_direction
set_speed_end(_modifier.direction, speed) set_speed_end(_modifier.direction, speed)
var adjusted_accel = base_move_acceleration.x + _modifier.horizontal_acceleration # var adjusted_accel = base_move_acceleration.x + _modifier.horizontal_acceleration
if sign(adjusted_accel) != sign(base_move_acceleration.x): # if sign(adjusted_accel) != sign(base_move_acceleration.x):
base_move_acceleration.x = 0.0 # base_move_acceleration.x = 0.0
else: # else:
base_move_acceleration.x = adjusted_accel # base_move_acceleration.x = adjusted_accel
var accel :Vector2 = get_acceleration(_modifier.direction) var accel :Vector2 = get_acceleration(_modifier.direction)
adjusted_accel = get_acceleration(_modifier.direction) + _modifier.acceleration var adjusted_accel = get_acceleration(_modifier.direction) + _modifier.acceleration
if sign(adjusted_accel.x) != sign(accel.x): if sign(adjusted_accel.x) != sign(accel.x):
accel.x = 0.0 accel.x = 0.0
else: else:
@ -117,26 +117,26 @@ func apply_state_modifier(_modifier :StateModifierMovement, _movement_direction
##TODO: Um, modifiers are a little weirder for this ##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) # 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: # if sign(speed_differance) != sign(base_move_speed.x) and base_move_speed.x != 0:
## Add the inverse of the modifier instead # ## Add the inverse of the modifier instead
move_speed_modifier.x += speed_differance * - 1 # move_speed_modifier.x += speed_differance * - 1
else: # else:
move_speed_modifier.x += _modifier.horizontal_speed_offset # move_speed_modifier.x += _modifier.horizontal_speed_offset
#
move_speed_modifier_acceleration.x += _modifier.horizontal_speed_offset_acceleration # move_speed_modifier_acceleration.x += _modifier.horizontal_speed_offset_acceleration
move_speed_modifier.y += _modifier.vertical_speed_offset # move_speed_modifier.y += _modifier.vertical_speed_offset
move_speed_modifier_acceleration.y += _modifier.vertical_speed_offset_acceleration # move_speed_modifier_acceleration.y += _modifier.vertical_speed_offset_acceleration
_: _:
base_move_speed.x += _modifier.horizontal_speed # base_move_speed.x += _modifier.horizontal_speed
base_move_acceleration.x += _modifier.horizontal_acceleration # base_move_acceleration.x += _modifier.horizontal_acceleration
move_speed_modifier.x += _modifier.horizontal_speed_offset # move_speed_modifier.x += _modifier.horizontal_speed_offset
move_speed_modifier_acceleration.x += _modifier.horizontal_speed_offset_acceleration # move_speed_modifier_acceleration.x += _modifier.horizontal_speed_offset_acceleration
#
base_move_speed.y += _modifier.vertical_speed # base_move_speed.y += _modifier.vertical_speed
base_move_acceleration.y += _modifier.vertical_acceleration # base_move_acceleration.y += _modifier.vertical_acceleration
move_speed_modifier.y += _modifier.vertical_speed_offset # move_speed_modifier.y += _modifier.vertical_speed_offset
move_speed_modifier_acceleration.y += _modifier.vertical_speed_offset_acceleration # move_speed_modifier_acceleration.y += _modifier.vertical_speed_offset_acceleration
set_speed_start( set_speed_start(
_modifier.direction, _modifier.direction,
@ -154,12 +154,12 @@ func apply_state_modifier(_modifier :StateModifierMovement, _movement_direction
if (true): #DEGUG if (true): #DEGUG
var foo = 2+2 var foo = 2+2
UiManager.debug_text = ( #"H_Speed x Dir: " + str(h_speed) + str('duh') + # 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}) + # "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}) + # "\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}) + # "\nMoveAccel: {0}, {1}".format({"0":"%4.1f" % base_move_acceleration.x, "1":"%4.1f" % base_move_acceleration.y}) +
"\nType: " + str(_modifier.modifier_type) # "\nType: " + str(_modifier.modifier_type)
) # )

View File

@ -81,14 +81,14 @@ func get_movement_parameters() -> MovementParameters:
movement_parameters.jerk_factor = jerk_factor movement_parameters.jerk_factor = jerk_factor
## Old stuff ## Old stuff
movement_parameters.base_move_speed.x = horizontal_speed # movement_parameters.base_move_speed.x = horizontal_speed
movement_parameters.base_move_acceleration.x = horizontal_acceleration # movement_parameters.base_move_acceleration.x = horizontal_acceleration
movement_parameters.move_speed_modifier.x = horizontal_speed_offset # movement_parameters.move_speed_modifier.x = horizontal_speed_offset
movement_parameters.move_speed_modifier_acceleration.x = horizontal_speed_offset_acceleration # movement_parameters.move_speed_modifier_acceleration.x = horizontal_speed_offset_acceleration
movement_parameters.base_move_speed.y = vertical_speed # movement_parameters.base_move_speed.y = vertical_speed
movement_parameters.base_move_acceleration.y = vertical_acceleration # movement_parameters.base_move_acceleration.y = vertical_acceleration
movement_parameters.move_speed_modifier.y = vertical_speed_offset # movement_parameters.move_speed_modifier.y = vertical_speed_offset
movement_parameters.move_speed_modifier_acceleration.y = vertical_speed_offset_acceleration # movement_parameters.move_speed_modifier_acceleration.y = vertical_speed_offset_acceleration
return movement_parameters return movement_parameters

View File

@ -18,20 +18,20 @@ export(Vector2) var speed_end
export(Vector2) var acceleration export(Vector2) var acceleration
## Movement Modifiers ## Movement Modifiers
export var horizontal_speed: float = 0 #export var horizontal_speed: float = 0
export var horizontal_acceleration: float = 0 #export var horizontal_acceleration: float = 0
## Movement Speed Offsets (Positive or Negative) ### Movement Speed Offsets (Positive or Negative)
export var horizontal_speed_offset: float = 0 #export var horizontal_speed_offset: float = 0
## Applies only if offset applies ### Applies only if offset applies
export var horizontal_speed_offset_acceleration: float = 0 #export var horizontal_speed_offset_acceleration: float = 0
#export var jerk_factor: float = 0 ##export var jerk_factor: float = 0
#
export var vertical_speed: float = 0 #export var vertical_speed: float = 0
export var vertical_acceleration: float = 0 #export var vertical_acceleration: float = 0
## Movement Speed Offsets (Positive or Negative) ### Movement Speed Offsets (Positive or Negative)
export var vertical_speed_offset: float = 0 #export var vertical_speed_offset: float = 0
## Applies only if offset applies ### Applies only if offset applies
export var vertical_speed_offset_acceleration: float = 0 #export var vertical_speed_offset_acceleration: float = 0
export var gravity: int = 0 export var gravity: int = 0
@ -52,21 +52,24 @@ func _to_string():
func reset(): func reset():
.reset() .reset()
modifier_type = SUB_TYPE.NONE modifier_type = SUB_TYPE.NONE
direction = 0.0 # direction = 0.0
horizontal_speed = 0 # horizontal_speed = 0
horizontal_acceleration = 0 # horizontal_acceleration = 0
## Movement Speed Offsets (Positive or Negative) # ## Movement Speed Offsets (Positive or Negative)
horizontal_speed_offset = 0 # horizontal_speed_offset = 0
## Applies only if offset applies # ## Applies only if offset applies
horizontal_speed_offset_acceleration = 0 # horizontal_speed_offset_acceleration = 0
#jerk_factor = 0 #jerk_factor = 0
func copy(_copy_state: StateModifier): func copy(_copy_state: StateModifier):
.copy(_copy_state) .copy(_copy_state)
modifier_type = _copy_state.modifier_type modifier_type = _copy_state.modifier_type
if _copy_state.to_string() == "StateModifierMovement": if _copy_state.to_string() == "StateModifierMovement":
_copy_state.horizontal_speed = horizontal_speed #_copy_state.horizontal_speed = horizontal_speed
_copy_state.horizontal_acceleration = horizontal_acceleration _copy_state.speed.start = speed_start
_copy_state.speed_end = speed_end
#_copy_state.horizontal_acceleration = horizontal_acceleration
_copy_state.acceleration = acceleration
## Overrident to check whether this state is a grounded and this modifier ## Overrident to check whether this state is a grounded and this modifier
## should only apply while in the air. ## should only apply while in the air.
@ -94,13 +97,13 @@ func merge(_merge_from_modifier: StateModifier):
speed_start += _merge_from_modifier.speed_start speed_start += _merge_from_modifier.speed_start
acceleration += _merge_from_modifier.acceleration acceleration += _merge_from_modifier.acceleration
horizontal_speed += _merge_from_modifier.horizontal_speed # horizontal_speed += _merge_from_modifier.horizontal_speed
horizontal_acceleration += _merge_from_modifier.horizontal_acceleration # horizontal_acceleration += _merge_from_modifier.horizontal_acceleration
horizontal_speed_offset += _merge_from_modifier.horizontal_speed_offset # horizontal_speed_offset += _merge_from_modifier.horizontal_speed_offset
horizontal_speed_offset_acceleration += _merge_from_modifier.horizontal_speed_offset_acceleration # horizontal_speed_offset_acceleration += _merge_from_modifier.horizontal_speed_offset_acceleration
vertical_speed += _merge_from_modifier.vertical_speed # vertical_speed += _merge_from_modifier.vertical_speed
vertical_acceleration += _merge_from_modifier.vertical_acceleration # vertical_acceleration += _merge_from_modifier.vertical_acceleration
vertical_speed_offset += _merge_from_modifier.vertical_speed_offset # vertical_speed_offset += _merge_from_modifier.vertical_speed_offset
vertical_speed_offset_acceleration += _merge_from_modifier.vertical_speed_offset_acceleration # vertical_speed_offset_acceleration += _merge_from_modifier.vertical_speed_offset_acceleration
direction = _merge_from_modifier.direction direction = _merge_from_modifier.direction
only_grounded = _merge_from_modifier.only_grounded only_grounded = _merge_from_modifier.only_grounded

View File

@ -13,14 +13,6 @@ direction = 0
speed_start = Vector2( 0, 0 ) speed_start = Vector2( 0, 0 )
speed_end = Vector2( 0, 0 ) speed_end = Vector2( 0, 0 )
acceleration = Vector2( -250, 1.36422e-12 ) acceleration = Vector2( -250, 1.36422e-12 )
horizontal_speed = 0.0
horizontal_acceleration = -250.0
horizontal_speed_offset = 0.0
horizontal_speed_offset_acceleration = 0.0
vertical_speed = 0.0
vertical_acceleration = 0.0
vertical_speed_offset = 0.0
vertical_speed_offset_acceleration = 0.0
gravity = 0 gravity = 0
only_grounded = true only_grounded = true
processing_mode = 0 processing_mode = 0

View File

@ -13,14 +13,6 @@ direction = -1
speed_start = Vector2( 30, 1.36422e-12 ) speed_start = Vector2( 30, 1.36422e-12 )
speed_end = Vector2( 30, 1.36422e-12 ) speed_end = Vector2( 30, 1.36422e-12 )
acceleration = Vector2( 0, 0 ) acceleration = Vector2( 0, 0 )
horizontal_speed = -30.0
horizontal_acceleration = 0.0
horizontal_speed_offset = 0.0
horizontal_speed_offset_acceleration = 0.0
vertical_speed = 0.0
vertical_acceleration = 0.0
vertical_speed_offset = 0.0
vertical_speed_offset_acceleration = 0.0
gravity = 0 gravity = 0
only_grounded = true only_grounded = true
processing_mode = 0 processing_mode = 0

View File

@ -13,14 +13,6 @@ direction = -1
speed_start = Vector2( 30, 1.36422e-12 ) speed_start = Vector2( 30, 1.36422e-12 )
speed_end = Vector2( 30, 1.36422e-12 ) speed_end = Vector2( 30, 1.36422e-12 )
acceleration = Vector2( 0, 0 ) acceleration = Vector2( 0, 0 )
horizontal_speed = -30.0
horizontal_acceleration = 0.0
horizontal_speed_offset = 0.0
horizontal_speed_offset_acceleration = 0.0
vertical_speed = 0.0
vertical_acceleration = 0.0
vertical_speed_offset = 0.0
vertical_speed_offset_acceleration = 0.0
gravity = 0 gravity = 0
only_grounded = false only_grounded = false
processing_mode = 0 processing_mode = 0

View File

@ -11,6 +11,7 @@ onready var stamina_component = $"%Stamina_Component"
var state_stamina_cost :Dictionary var state_stamina_cost :Dictionary
func _ready(): func _ready():
velocity_controller.debug = true
#var state_ref :State #var state_ref :State
#var state_name :String #var state_name :String
#state_name = 'jump' #state_name = 'jump'

View File

@ -72,7 +72,7 @@ func _ready():
tired_debuff_modifier.setup('so_tired', StateModifierMovement.SUB_TYPE.NEGATIVE_CONSTRAINT) tired_debuff_modifier.setup('so_tired', StateModifierMovement.SUB_TYPE.NEGATIVE_CONSTRAINT)
tired_debuff_modifier.speed_start = Vector2(-40,0) tired_debuff_modifier.speed_start = Vector2(-40,0)
tired_debuff_modifier.horizontal_speed = -40 #tired_debuff_modifier.horizontal_speed = -40
tired_debuff_modifier.only_grounded = true tired_debuff_modifier.only_grounded = true
movement_state_machine.push_state_modifier(tired_debuff_modifier) movement_state_machine.push_state_modifier(tired_debuff_modifier)

View File

@ -120,13 +120,13 @@ func calculate_velocity(_delta :float,
## Acceleration is always postive because we use the ## Acceleration is always postive because we use the
# move toward functions. # move toward functions.
calc_acceleration.x = abs(resolve_h_acceleration(movement_parameters, move_direction.x)) #calc_acceleration.x = abs(resolve_h_acceleration(movement_parameters, move_direction.x))
# if move_direction.x != 0: if sign(move_direction.x) != 0:
# calc_acceleration.x = movement_parameters.get_acceleration(0).x calc_acceleration.x = movement_parameters.get_acceleration(0).x
# if move_direction.y != 0: if sign(move_direction.y) != 0:
# calc_acceleration.y = movement_parameters.get_acceleration(0).y calc_acceleration.y = movement_parameters.get_acceleration(0).y
if debug and movement_parameters.debug_name == 'roll': if debug and movement_parameters.debug_name == 'move':
var foo = 2+2 var foo = 2+2
## We are always moving from h_speed.x towards y at a given rate ## We are always moving from h_speed.x towards y at a given rate
## if we have a difference of speed and an acceleration ## if we have a difference of speed and an acceleration
@ -267,50 +267,40 @@ func placement_to_speed_range(speed: float, speed_range: Vector2) -> int:
## Returns an Vector where x is MIN_SPEED and y is MAX_SPEED ## Returns an Vector where x is MIN_SPEED and y is MAX_SPEED
func resolve_h_speed(_params :MovementParameters) -> Vector2: func resolve_h_speed(_params :MovementParameters) -> Vector2:
var base_speed :float = _params.base_move_speed.x # var base_speed :float = _params.base_move_speed.x
## if a speed difference applies # ## if a speed difference applies
if _params.move_speed_modifier.x != 0: # if _params.move_speed_modifier.x != 0:
var speed_differance = base_speed + _params.move_speed_modifier.x # var speed_differance = base_speed + _params.move_speed_modifier.x
#
return(Vector2(base_speed, speed_differance)) # return(Vector2(base_speed, speed_differance))
return Vector2(base_speed,base_speed) # return Vector2(base_speed,base_speed)
return Vector2(0,0)
func resolve_v_speed(_params :MovementParameters) -> Vector2: func resolve_v_speed(_params :MovementParameters) -> Vector2:
var base_speed :float = _params.base_move_speed.y # var base_speed :float = _params.base_move_speed.y
## if a speed difference applies # ## if a speed difference applies
if _params.move_speed_modifier.y != 0: # if _params.move_speed_modifier.y != 0:
var speed_differance = base_speed + _params.move_speed_modifier.y # var speed_differance = base_speed + _params.move_speed_modifier.y
#
return(Vector2(base_speed, speed_differance)) # return(Vector2(base_speed, speed_differance))
return Vector2(base_speed,base_speed) # return Vector2(base_speed,base_speed)
return Vector2(0,0)
func resolve_h_acceleration(_params :MovementParameters, _move_direction :float) -> float: func resolve_h_acceleration(_params :MovementParameters, _move_direction :float) -> float:
## TODO: Adjust for jerk, determine if we're currently experiencing accel ## TODO: Adjust for jerk, determine if we're currently experiencing accel
## if a speed difference applies ## if a speed difference applies
var _acceleration :float = 0.0 # var _acceleration :float = 0.0
var base_speed :float = _params.base_move_speed.x # var base_speed :float = _params.base_move_speed.x
if _params.move_speed_modifier.x != 0: # if _params.move_speed_modifier.x != 0:
var speed_differance = base_speed + _params.move_speed_modifier.x # var speed_differance = base_speed + _params.move_speed_modifier.x
_acceleration = _params.base_move_acceleration.x + _params.move_speed_modifier_acceleration.x # _acceleration = _params.base_move_acceleration.x + _params.move_speed_modifier_acceleration.x
##WIP: Add part where offset acceleration only applies until the inertia equals the offset or whatever #
# if sign(_params["_base_h_move_modifier_move_acceleration"]) == -1 and abs(_inertia.x) >= speed_differance: # else:
# #print("I should add the modifier acceleration maybe?") # _acceleration = _params.base_move_acceleration.x
# _acceleration += _params["_base_h_move_modifier_move_acceleration"] #
# else: # if sign(_move_direction) != 0:
# print ("not yet.")
else:
_acceleration = _params.base_move_acceleration.x
## This works but I want to try something differant.
# if _inertia.x != 0.0 and sign(_inertia.x) != sign(_move_direction):
# return _acceleration * -1
# elif sign(_move_direction) != 0:
# ## If no velocity or it matches just return as is.
# return _acceleration # return _acceleration
if sign(_move_direction) != 0:
return _acceleration
# No accel returned unless intended # No accel returned unless intended
return 0.0 return 0.0