diff --git a/src/Levels/Level.tscn b/src/Levels/Level.tscn index c1430f3..b23103a 100644 --- a/src/Levels/Level.tscn +++ b/src/Levels/Level.tscn @@ -147,7 +147,8 @@ position = Vector2( 1101, 328 ) collision_layer = 0 collision_mask = 2 modifier_name = "ice_flow_nowhere_to_go" -jerk_factor = -80.0 +move_speed_modifier = -90.0 +move_modifier_move_acceleration = 45.0 [node name="CollisionShape2D" type="CollisionShape2D" parent="Ice"] position = Vector2( 83, 9.5 ) diff --git a/src/playerD/Player.gd b/src/playerD/Player.gd index 3e31c0c..85eba39 100644 --- a/src/playerD/Player.gd +++ b/src/playerD/Player.gd @@ -31,8 +31,12 @@ func receive_modifier(incomming_modifier :StateModifier, is_adding_modifier_oper #var mod :StateModifier if is_adding_modifier_operation: print("Player Received modifier:", incomming_modifier.name) + if movement_state_machine.current_state is StateAnimatedActor: + movement_state_machine.current_state.physics_modifier = incomming_modifier else: print("Player Removed modifier:", incomming_modifier.name) + if movement_state_machine.current_state is StateAnimatedActor: + movement_state_machine.current_state.physics_modifier = null func touch_the_thing(the_thing: Interactable) -> bool: print("You see! a THING...", the_thing.name) diff --git a/src/playerD/Player.tscn b/src/playerD/Player.tscn index 33be82c..e9f2884 100644 --- a/src/playerD/Player.tscn +++ b/src/playerD/Player.tscn @@ -619,9 +619,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 = 160.0 -move_modifier_move_acceleration = -160.0 -jerk_factor = -190.0 +move_speed_modifier = 90.0 +move_modifier_move_acceleration = -180.0 +jerk_factor = -90.0 animation_sequence = [ "dash" ] fall_node = NodePath("../fall") idle_node = NodePath("../idle") diff --git a/src/state_animated_actor.gd b/src/state_animated_actor.gd index 75b2da4..a0e5983 100644 --- a/src/state_animated_actor.gd +++ b/src/state_animated_actor.gd @@ -26,6 +26,8 @@ export var jerk_factor: float = 0 var adjusted_move_speed: float var jerk: float +var physics_modifier :StateModifier + ##TODO: Deprecate this useless fool! var speed_multiplier: float = 1.0 @@ -259,26 +261,60 @@ func process_physics(_delta: float) -> State: # animation_index += 1 func move_actor_as_desired(delta: float, x_direction: float = 0): + + var _move_speed = move_speed + var _move_speed_modifier = move_speed_modifier + var _move_modifier_move_acceleration = move_modifier_move_acceleration + var _move_acceleration = move_acceleration + var _jerk_factor = jerk_factor + var _gravity = gravity + + if physics_modifier: + #physics_modifier.modifier_properties.jerk_factor + #print(physics_modifier.name) + #UiManager.debug_text = physics_modifier.name + str(round(adjusted_move_speed)) + var mod_props :ModifierProperties = physics_modifier.get_modifier_properties() + if mod_props.move_speed != 0: + _move_speed = mod_props.move_speed + _move_speed_modifier += mod_props.move_speed_modifier + _move_acceleration += mod_props.move_acceleration + _move_modifier_move_acceleration += mod_props.move_modifier_move_acceleration + _jerk_factor += mod_props.jerk_factor +# else: +# UiManager.debug_text = '' + # 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 + jerk += _jerk_factor * delta + adjusted_move_speed += _move_modifier_move_acceleration * delta + #Another crappy normalization hack + if adjusted_move_speed > _move_speed_modifier and _move_speed_modifier > 0: + adjusted_move_speed = _move_speed_modifier + elif adjusted_move_speed < _move_speed_modifier and _move_speed_modifier < 0: + adjusted_move_speed = _move_speed_modifier + if _move_speed_modifier == 0: + adjusted_move_speed = 0 + + var new_move_speed = (_move_speed + _move_speed_modifier ) + (_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 + 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 + new_move_speed = _move_speed + #adjusted_move_speed = 0 + 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) + new_move_speed = _move_speed + #adjusted_move_speed = 0 + else: + if new_move_speed != move_speed: + 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 + move_component.velocity.y += _gravity * delta #parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1)) #print(speed_multiplier) if (x_direction != 0): diff --git a/src/state_machine_animated_actor.gd b/src/state_machine_animated_actor.gd index 89e5a34..cc7cf30 100644 --- a/src/state_machine_animated_actor.gd +++ b/src/state_machine_animated_actor.gd @@ -1,5 +1,7 @@ class_name StateMachineAnimatedActor extends StateMachine +#var physics_modifier : StateModifier + func change_state(new_state: State) -> void: if new_state.state_ready == false: # Don't transition to unready state @@ -12,6 +14,9 @@ func change_state(new_state: State) -> void: if current_state.modifier: # Current state has a modifier new_state.transfer_modifiers(current_state.modifier) current_state.modifier = null + if current_state.physics_modifier: # Current state has a physics modifier + new_state.physics_modifier = current_state.physics_modifier + current_state.physics_modifier = null current_state = new_state current_state.enter()