From a87955eb0dfe24cb5ec739327556be6f59c0c7d9 Mon Sep 17 00:00:00 2001 From: Nitsud Yarg Date: Sat, 29 Jun 2024 20:24:38 -0700 Subject: [PATCH] One step closer to movement modification. States have a LOT more movement options! --- src/playerD/Player.tscn | 7 ++-- src/playerD/states/dash.gd | 61 ++++++++++++---------------- src/state_animated_actor.gd | 68 +++++++++++++++++++++++++------- src/state_modifier.gd | 25 +++++++----- src/state_modifier_properties.gd | 20 +++++++--- 5 files changed, 113 insertions(+), 68 deletions(-) diff --git a/src/playerD/Player.tscn b/src/playerD/Player.tscn index 4553867..cbe695c 100644 --- a/src/playerD/Player.tscn +++ b/src/playerD/Player.tscn @@ -454,7 +454,7 @@ animations = [ { "name": "climb", "speed": 10.0 }, { -"frames": [ SubResource( 101 ), SubResource( 101 ), SubResource( 101 ), SubResource( 102 ), SubResource( 103 ), SubResource( 104 ), SubResource( 105 ), SubResource( 105 ), SubResource( 105 ) ], +"frames": [ SubResource( 101 ), SubResource( 102 ), SubResource( 103 ), SubResource( 103 ), SubResource( 104 ), SubResource( 105 ) ], "loop": false, "name": "dash", "speed": 10.0 @@ -621,8 +621,9 @@ idle_node = NodePath("../idle") [node name="dash" type="Node" parent="movement_state_machine" index="6"] script = ExtResource( 11 ) move_speed = 90.0 -move_speed_modifier = 150.0 -move_modifier_move_acceleration = -400.0 +move_speed_modifier = 160.0 +move_modifier_move_acceleration = -160.0 +jerk_factor = -190.0 animation_sequence = [ "dash" ] fall_node = NodePath("../fall") idle_node = NodePath("../idle") diff --git a/src/playerD/states/dash.gd b/src/playerD/states/dash.gd index 3779f72..ed56282 100644 --- a/src/playerD/states/dash.gd +++ b/src/playerD/states/dash.gd @@ -11,16 +11,6 @@ onready var idle_state: State = get_node(idle_node) onready var attack_state: State = get_node(attack_node) #var speed_decay_rate := 1.0 -var adjusted_move_speed: float -var jerk: float - -func enter(): - #remove_animation_state_modifiers() - .enter() - adjusted_move_speed = move_speed_modifier - jerk = 0 -# speed_multiplier = 5 -# speed_decay_rate = 4 func process_physics(delta: float) -> State: @@ -30,31 +20,32 @@ func process_physics(delta: float) -> State: if move_component.wants_jump(): return jump_state - - # Assuming adjusted_move_speed is set to the mood speed modifier on state entry - # Move speed is the base speed plus the modifier minus the decay adjusted for time - jerk += jerk_factor * delta - adjusted_move_speed = adjusted_move_speed + (move_modifier_move_acceleration * delta) - var new_move_speed = move_speed + (move_acceleration * delta) + adjusted_move_speed + jerk - - # A really crappy normalization to prevent modifying past the base move speed. - if move_speed_modifier > 0 and new_move_speed < move_speed: # positive modifier - #print("nope1") - new_move_speed = move_speed - elif move_speed_modifier < 0 and new_move_speed > move_speed: # negative modifier - #print("nope2") - new_move_speed = move_speed - else: - UiManager.debug_text = str(round(adjusted_move_speed)) + "," + str(round(new_move_speed)) + "," + str(round(jerk)) - #print(adjusted_move_speed, ",", new_move_speed, ",", jerk) - - #print(new_move_speed, " ", adjusted_move_speed) - - move_component.velocity.y += gravity * delta - #parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1)) - #print(speed_multiplier) - move_component.velocity.x = parent.transform.x.x * new_move_speed - move_component.velocity = parent.move_and_slide(move_component.velocity, Vector2(0, -1)) + # Move the last direction we were facing. + move_actor_as_desired(delta, parent.transform.x.x) +# # Assuming adjusted_move_speed is set to the mood speed modifier on state entry +# # Move speed is the base speed plus the modifier minus the decay adjusted for time +# jerk += jerk_factor * delta +# adjusted_move_speed += move_modifier_move_acceleration * delta +# var new_move_speed = move_speed + (move_acceleration * delta) + adjusted_move_speed + jerk +# +# # A really crappy normalization to prevent modifying past the base move speed. +# if move_speed_modifier > 0 and new_move_speed < move_speed: # positive modifier +# #print("nope1") +# new_move_speed = move_speed +# elif move_speed_modifier < 0 and new_move_speed > move_speed: # negative modifier +# #print("nope2") +# new_move_speed = move_speed +# else: +# UiManager.debug_text = str(round(adjusted_move_speed)) + "," + str(round(new_move_speed)) + "," + str(round(jerk)) +# #print(adjusted_move_speed, ",", new_move_speed, ",", jerk) +# +# #print(new_move_speed, " ", adjusted_move_speed) +# +# move_component.velocity.y += gravity * delta +# #parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1)) +# #print(speed_multiplier) +# move_component.velocity.x = parent.transform.x.x * new_move_speed +# move_component.velocity = parent.move_and_slide(move_component.velocity, Vector2(0, -1)) ## Trying a whole new model # var new_move_speed = move_speed * speed_multiplier diff --git a/src/state_animated_actor.gd b/src/state_animated_actor.gd index b9ce7a8..75b2da4 100644 --- a/src/state_animated_actor.gd +++ b/src/state_animated_actor.gd @@ -22,6 +22,11 @@ export var move_acceleration: float = 0 export var move_speed_modifier: float = 0 export var move_modifier_move_acceleration: float = 0 export var jerk_factor: float = 0 + +var adjusted_move_speed: float +var jerk: float + +##TODO: Deprecate this useless fool! var speed_multiplier: float = 1.0 export(Array, String) var animation_sequence @@ -160,6 +165,10 @@ func enter() -> void: #modifier_stack_ref = state_modifiers update_animation() + # Reset movespeed counters + adjusted_move_speed = move_speed_modifier + jerk = 0 + return func exit() -> void: @@ -249,23 +258,52 @@ func process_physics(_delta: float) -> State: # if animations.frames.get_animation_loop(animations.animation) == false: # animation_index += 1 -func move_actor_as_desired(delta: float): - var new_speed = move_speed * speed_multiplier - if speed_multiplier > 1.0: - speed_multiplier -= delta * speed_multiplier - #speed_decay_rate += delta * speed_decay_rate - - elif speed_multiplier < 1.0: - speed_multiplier += delta * speed_multiplier - #speed_decay_rate += delta * speed_decay_rate +func move_actor_as_desired(delta: float, x_direction: float = 0): + # Assuming adjusted_move_speed is set to the mood speed modifier on state entry + # Move speed is the base speed plus the modifier minus the decay adjusted for time + jerk += jerk_factor * delta + adjusted_move_speed += move_modifier_move_acceleration * delta + var new_move_speed = move_speed + (move_acceleration * delta) + adjusted_move_speed + jerk - # Deadzone - if speed_multiplier < 1.1 and speed_multiplier > 0.9: - speed_multiplier = 1.0 -# if (new_speed > move_speed): -# print("Go Faster Booooy! ", move_speed) + # A really crappy normalization to prevent modifying past the base move speed. + if move_speed_modifier > 0 and new_move_speed < move_speed: # positive modifier + #print("nope1") + new_move_speed = move_speed + elif move_speed_modifier < 0 and new_move_speed > move_speed: # negative modifier + #print("nope2") + new_move_speed = move_speed +# else: +# UiManager.debug_text = str(round(adjusted_move_speed)) + "," + str(round(new_move_speed)) + "," + str(round(jerk)) +# #print(adjusted_move_speed, ",", new_move_speed, ",", jerk) + + #print(new_move_speed, " ", adjusted_move_speed) + move_component.velocity.y += gravity * delta #parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1)) - move_component.velocity.x = move_component.desired_movement_vector.x * new_speed + #print(speed_multiplier) + if (x_direction != 0): + move_component.velocity.x = x_direction * new_move_speed + else: + move_component.velocity.x = move_component.desired_movement_vector.x * new_move_speed move_component.velocity = parent.move_and_slide(move_component.velocity, Vector2(0, -1)) + + +# var new_speed = move_speed * speed_multiplier +# if speed_multiplier > 1.0: +# speed_multiplier -= delta * speed_multiplier +# #speed_decay_rate += delta * speed_decay_rate +# +# elif speed_multiplier < 1.0: +# speed_multiplier += delta * speed_multiplier +# #speed_decay_rate += delta * speed_decay_rate +# +# # Deadzone +# if speed_multiplier < 1.1 and speed_multiplier > 0.9: +# speed_multiplier = 1.0 +## if (new_speed > move_speed): +## print("Go Faster Booooy! ", move_speed) +# move_component.velocity.y += gravity * delta +# #parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1)) +# move_component.velocity.x = move_component.desired_movement_vector.x * new_speed +# move_component.velocity = parent.move_and_slide(move_component.velocity, Vector2(0, -1)) diff --git a/src/state_modifier.gd b/src/state_modifier.gd index a94ce2a..9da82f7 100644 --- a/src/state_modifier.gd +++ b/src/state_modifier.gd @@ -34,9 +34,9 @@ var name :String = '' # Move Speed in Pixels Per Second # These should only apply if Modification Type Set to None. # (But I'm not sure if I like that model.) -var move_speed: float -var move_speed_modifier: float = 0 -var move_speed_modifier_decay: float = 0 +#var move_speed: float +#var move_speed_modifier: float = 0 +#var move_speed_modifier_decay: float = 0 var gravity: int = ProjectSettings.get_setting("physics/2d/default_gravity") @@ -75,14 +75,21 @@ func merge_modifier(merging_mod: ModifierProperties): return # Can't support timeouts or animation stuff right now. #timeout_seconds = merging_mod.timeout_seconds - move_speed = merging_mod.move_speed - gravity = merging_mod.gravity - move_speed_modifier = merging_mod.move_speed_modifier - move_speed_modifier_decay = merging_mod.move_speed_modifier_decay +# move_speed = merging_mod.move_speed +# gravity = merging_mod.gravity +# move_speed_modifier = merging_mod.move_speed_modifier +# move_speed_modifier_decay = merging_mod.move_speed_modifier_decay func get_modifier_properties() -> ModifierProperties: - return ModifierProperties.new( move_speed, gravity, move_speed_modifier, move_speed_modifier_decay) + #( p_move_speed:float, p_gravity:int , p_move_acceleration , p_move_speed_modifier:float, + # p_move_modifier_move_acceleration:float, p_jerk_factor: float): + return ModifierProperties.new( modifier_properties.move_speed, + modifier_properties.gravity, + modifier_properties.move_acceleration, + modifier_properties.move_speed_modifier, + modifier_properties.move_modifier_move_acceleration, + modifier_properties.jerk_factor) func ready(modifier_name:String, anim_name:String = '', type = TYPE.NONE, timeout : float = 0, parent:Node = null, function_name : String = "") -> Timer: # If somebody forgot to specify the type @@ -93,7 +100,7 @@ func ready(modifier_name:String, anim_name:String = '', type = TYPE.NONE, timeou # if parent != null and function_name != "": # state_call_function = funcref(parent, function_name) - modifier_properties = ModifierProperties.new(0,0,0,0) + modifier_properties = ModifierProperties.new(0,0,0,0,0,0) if timeout > 0: state_timeout = Timer.new() diff --git a/src/state_modifier_properties.gd b/src/state_modifier_properties.gd index a09ef84..ee5d131 100644 --- a/src/state_modifier_properties.gd +++ b/src/state_modifier_properties.gd @@ -3,14 +3,22 @@ extends Reference var modifier_type: int = 0 #var timeout_seconds: float = 0.0 -var move_speed: float = 0.0 -var gravity:int = 0 -var move_speed_modifier: float = 0.0 -var move_speed_modifier_decay: float = 0.0 -func _init( p_move_speed:float, p_gravity:int , p_move_speed_modifier:float, p_move_speed_modifier_decay:float): +var move_speed: float = 0.0 +var move_acceleration: float = 0.0 +var move_speed_modifier: float = 0.0 +var move_modifier_move_acceleration: float = 0.0 +var jerk_factor: float = 0 + +var gravity:int = 0 + + +func _init( p_move_speed:float, p_gravity:int , p_move_acceleration , p_move_speed_modifier:float, + p_move_modifier_move_acceleration:float, p_jerk_factor: float): #timeout_seconds = p_timeout_seconds move_speed = p_move_speed + move_acceleration = p_move_acceleration gravity = p_gravity move_speed_modifier = p_move_speed_modifier - move_speed_modifier_decay = p_move_speed_modifier_decay + move_modifier_move_acceleration = p_move_modifier_move_acceleration + jerk_factor = p_jerk_factor