From 71a497b73b7122baf689f9b595ae09c0bd0fd967 Mon Sep 17 00:00:00 2001 From: Dustin Date: Sat, 10 May 2025 20:03:51 -0700 Subject: [PATCH] Added jerk, fixing state modifiers --- lib/classes/movement_parameters.gd | 11 ++++++----- lib/classes/movement_state_receiver.gd | 3 +++ lib/classes/state_animated_actor.gd | 7 ++++--- lib/classes/state_machine.gd | 8 ++++++++ src/actors/players/playerE/PlayerE.tscn | 2 ++ src/actors/players/playerE/states/attack_punch.tres | 2 ++ src/actors/players/playerE/states/attack_shoot.tres | 2 ++ src/actors/players/playerE/states/attack_sword.tres | 2 ++ src/actors/players/playerE/states/climb.tres | 2 ++ src/actors/players/playerE/states/crouch.tres | 2 ++ src/actors/players/playerE/states/crouch_move.tres | 2 ++ src/actors/players/playerE/states/death.tres | 2 ++ src/actors/players/playerE/states/enter_right.tres | 2 ++ src/actors/players/playerE/states/fall.tres | 2 ++ src/actors/players/playerE/states/idle.tres | 2 ++ src/actors/players/playerE/states/jump.tres | 2 ++ src/actors/players/playerE/states/land.tres | 2 ++ src/actors/players/playerE/states/ledge_climb.tres | 2 ++ src/actors/players/playerE/states/ledge_grab.tres | 2 ++ src/actors/players/playerE/states/move.tres | 2 ++ src/actors/players/playerE/states/roll.tres | 2 ++ 21 files changed, 55 insertions(+), 8 deletions(-) diff --git a/lib/classes/movement_parameters.gd b/lib/classes/movement_parameters.gd index 5f5e18b..66d5b67 100644 --- a/lib/classes/movement_parameters.gd +++ b/lib/classes/movement_parameters.gd @@ -6,9 +6,10 @@ 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 +#var jerk: float = 0.0 ## Can be set to help with debugging the velocity controller export var debug_name :String @@ -71,10 +72,10 @@ func apply_state_modifier(_modifier :StateModifierMovement): 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) + "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) ) diff --git a/lib/classes/movement_state_receiver.gd b/lib/classes/movement_state_receiver.gd index b238eac..9390c22 100644 --- a/lib/classes/movement_state_receiver.gd +++ b/lib/classes/movement_state_receiver.gd @@ -17,6 +17,8 @@ onready var parent: KinematicBody2D = get_parent() export var callable_state_machine :NodePath var request_state_change: FuncRef +var get_state_machine_modifiers: FuncRef #get_modifiers_of_type + onready var desired_movement_vector: Vector2 = Vector2(0,0) # Since animactor state machine can actually view properties from this type @@ -44,6 +46,7 @@ func _ready(): ## FuncRef to request state machine change state request_state_change = funcref(get_node(callable_state_machine), 'change_to_known_state') + get_state_machine_modifiers = funcref(get_node(callable_state_machine), 'get_modifiers_of_type') ## Connect signal to get alerted of state change get_node(callable_state_machine).connect("state_changed", self,"_on_state_change") ## Get notified when modifiers updated diff --git a/lib/classes/state_animated_actor.gd b/lib/classes/state_animated_actor.gd index 4c8d33b..f356e88 100644 --- a/lib/classes/state_animated_actor.gd +++ b/lib/classes/state_animated_actor.gd @@ -24,6 +24,9 @@ export var vertical_speed_offset: float = 0 ## Applies only if offset applies export var vertical_speed_offset_acceleration: float = 0 +export var horizontal_jerk_factor: float = 1.0 +export var vertical_jerk_factor: float = 1.0 + ## Should this state keep the inertia from previous states export var preserve_inertia :bool = true @@ -33,8 +36,6 @@ export var is_grounded :bool = true ## Default state gravity is the project's gravity var gravity: int = ProjectSettings.get_setting("physics/2d/default_gravity") -var jerk: float - ## Variables intended to allow state receivers to communicate var animation_finished: bool = false var animation_frame :int = -1 @@ -50,7 +51,7 @@ func enter() -> void: animation_finished = false movement_stopped = false animation_frame = -1 - jerk = 0 + #jerk = 0 return diff --git a/lib/classes/state_machine.gd b/lib/classes/state_machine.gd index b3238da..fcaa141 100644 --- a/lib/classes/state_machine.gd +++ b/lib/classes/state_machine.gd @@ -76,6 +76,14 @@ func merge_modifiers(): if m.is_active: this_mod_type.merge(m) +## When trying to get multiple modifiers +func get_modifiers_of_type(_modifier_type :String) -> Array: + var mod_array :Array = [] + for m in state_modifiers: + if m.to_string() == _modifier_type: + mod_array.append(m) + return mod_array + # Change to the new state by first calling any exit logic on the current state. func change_state(new_state: State) -> void: var current_state_name :String diff --git a/src/actors/players/playerE/PlayerE.tscn b/src/actors/players/playerE/PlayerE.tscn index 3e6dfff..1529870 100644 --- a/src/actors/players/playerE/PlayerE.tscn +++ b/src/actors/players/playerE/PlayerE.tscn @@ -51,6 +51,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "hurt" ] diff --git a/src/actors/players/playerE/states/attack_punch.tres b/src/actors/players/playerE/states/attack_punch.tres index 4b3d30f..1a8feda 100644 --- a/src/actors/players/playerE/states/attack_punch.tres +++ b/src/actors/players/playerE/states/attack_punch.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "attack-punch" ] diff --git a/src/actors/players/playerE/states/attack_shoot.tres b/src/actors/players/playerE/states/attack_shoot.tres index b2811da..f5479d5 100644 --- a/src/actors/players/playerE/states/attack_shoot.tres +++ b/src/actors/players/playerE/states/attack_shoot.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "attack-shoot" ] diff --git a/src/actors/players/playerE/states/attack_sword.tres b/src/actors/players/playerE/states/attack_sword.tres index 0cce2a3..2362c23 100644 --- a/src/actors/players/playerE/states/attack_sword.tres +++ b/src/actors/players/playerE/states/attack_sword.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "attack-sword" ] diff --git a/src/actors/players/playerE/states/climb.tres b/src/actors/players/playerE/states/climb.tres index d2823d5..d16b15d 100644 --- a/src/actors/players/playerE/states/climb.tres +++ b/src/actors/players/playerE/states/climb.tres @@ -17,6 +17,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "climb" ] diff --git a/src/actors/players/playerE/states/crouch.tres b/src/actors/players/playerE/states/crouch.tres index 41c30b8..6a4a8e3 100644 --- a/src/actors/players/playerE/states/crouch.tres +++ b/src/actors/players/playerE/states/crouch.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "idle-crouch" ] diff --git a/src/actors/players/playerE/states/crouch_move.tres b/src/actors/players/playerE/states/crouch_move.tres index 7c96d65..329375d 100644 --- a/src/actors/players/playerE/states/crouch_move.tres +++ b/src/actors/players/playerE/states/crouch_move.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "run_crouch" ] diff --git a/src/actors/players/playerE/states/death.tres b/src/actors/players/playerE/states/death.tres index d7a542f..831caea 100644 --- a/src/actors/players/playerE/states/death.tres +++ b/src/actors/players/playerE/states/death.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "death" ] diff --git a/src/actors/players/playerE/states/enter_right.tres b/src/actors/players/playerE/states/enter_right.tres index 9cfbe36..f111c85 100644 --- a/src/actors/players/playerE/states/enter_right.tres +++ b/src/actors/players/playerE/states/enter_right.tres @@ -17,6 +17,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "walk" ] diff --git a/src/actors/players/playerE/states/fall.tres b/src/actors/players/playerE/states/fall.tres index b196fb4..dcb5d52 100644 --- a/src/actors/players/playerE/states/fall.tres +++ b/src/actors/players/playerE/states/fall.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = false animation_sequence = [ "jump" ] diff --git a/src/actors/players/playerE/states/idle.tres b/src/actors/players/playerE/states/idle.tres index 3976c0b..9ac8123 100644 --- a/src/actors/players/playerE/states/idle.tres +++ b/src/actors/players/playerE/states/idle.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "idle" ] diff --git a/src/actors/players/playerE/states/jump.tres b/src/actors/players/playerE/states/jump.tres index 27416e3..d487c29 100644 --- a/src/actors/players/playerE/states/jump.tres +++ b/src/actors/players/playerE/states/jump.tres @@ -18,6 +18,8 @@ vertical_speed = 200.0 vertical_acceleration = 0.0 vertical_speed_offset = -208.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = false animation_sequence = [ "jump" ] diff --git a/src/actors/players/playerE/states/land.tres b/src/actors/players/playerE/states/land.tres index 964f989..bded577 100644 --- a/src/actors/players/playerE/states/land.tres +++ b/src/actors/players/playerE/states/land.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "land" ] diff --git a/src/actors/players/playerE/states/ledge_climb.tres b/src/actors/players/playerE/states/ledge_climb.tres index dc29164..23776f8 100644 --- a/src/actors/players/playerE/states/ledge_climb.tres +++ b/src/actors/players/playerE/states/ledge_climb.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "ledge-climb" ] diff --git a/src/actors/players/playerE/states/ledge_grab.tres b/src/actors/players/playerE/states/ledge_grab.tres index 0478f92..cf635c5 100644 --- a/src/actors/players/playerE/states/ledge_grab.tres +++ b/src/actors/players/playerE/states/ledge_grab.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "ledge-grab" ] diff --git a/src/actors/players/playerE/states/move.tres b/src/actors/players/playerE/states/move.tres index da5c358..694a8cf 100644 --- a/src/actors/players/playerE/states/move.tres +++ b/src/actors/players/playerE/states/move.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = true is_grounded = true animation_sequence = [ "run" ] diff --git a/src/actors/players/playerE/states/roll.tres b/src/actors/players/playerE/states/roll.tres index a8a6cda..7bef6fe 100644 --- a/src/actors/players/playerE/states/roll.tres +++ b/src/actors/players/playerE/states/roll.tres @@ -18,6 +18,8 @@ vertical_speed = 0.0 vertical_acceleration = 0.0 vertical_speed_offset = 0.0 vertical_speed_offset_acceleration = 0.0 +horizontal_jerk_factor = 1.0 +vertical_jerk_factor = 1.0 preserve_inertia = false is_grounded = true animation_sequence = [ "roll" ]