diff options
| -rw-r--r-- | computer.gd | 2 | ||||
| -rw-r--r-- | player.gd | 51 | ||||
| -rw-r--r-- | transition_player.gd | 4 |
3 files changed, 32 insertions, 25 deletions
diff --git a/computer.gd b/computer.gd index eed1899..ffd1b4c 100644 --- a/computer.gd +++ b/computer.gd @@ -5,4 +5,4 @@ extends Sprite2D @export var reverse: bool func _on_area_2d_body_entered(player: Player) -> void: - player.follow_curve(path.curve, speed, reverse) + player.set_movement_curve(path.curve, speed, reverse) @@ -61,19 +61,20 @@ func _process(_delta: float) -> void: func _physics_process(delta: float): movement_handler.call(delta) + +#region movement type setters +func set_movement_normal(): + movement_type = MovementType.NORMAL + movement_handler = _movement_normal -func set_movement_type(type: MovementType): - movement_type = type - movement_handler = movement_handlers[type] +func set_movement_forced(dir: String): + if movement_type == MovementType.FORCED: return + + movement_type = MovementType.FORCED + movement_handler = _movement_forced -func set_forced_input(dir: Variant): var jump_coef = 1.3 - if dir == null: - set_movement_type(MovementType.NORMAL) - forced_input_x = null - return - set_movement_type(MovementType.FORCED) if dir == "LEFT": forced_input_x = -1.0 elif dir == "JUMP_LEFT": @@ -91,6 +92,23 @@ func set_forced_input(dir: Variant): elif dir == "DROP": forced_input_x = 0.0 +func set_movement_curve(curve: Curve2D, speed: float, reverse: bool): + if movement_type == MovementType.CURVE: return + + movement_type = MovementType.CURVE + movement_handler = _movement_curve + + curve_target = curve + curve_speed = speed + if reverse: + curve_dir = -1 + curve_t = 1 + else: + curve_dir = 1 + curve_t = 0 +#endregion + +#region movement handlers func _movement_normal(delta: float): var grav_coef = 1.0 if velocity.y < 0 and Input.is_action_pressed("jump"): @@ -139,18 +157,6 @@ func _movement_forced(delta: float): move_and_slide() -func follow_curve(curve: Curve2D, speed: float, reverse: bool): - if movement_type != MovementType.CURVE: - set_movement_type(MovementType.CURVE) - curve_target = curve - curve_speed = speed - if reverse: - curve_dir = -1 - curve_t = 1 - else: - curve_dir = 1 - curve_t = 0 - func _movement_curve(delta: float): curve_t += curve_dir * curve_speed * delta var finished: bool @@ -163,8 +169,9 @@ func _movement_curve(delta: float): velocity = (new_position - position) / delta if finished: - set_movement_type(MovementType.NORMAL) + set_movement_normal() curve_target = null return position = new_position +#endregion diff --git a/transition_player.gd b/transition_player.gd index 2e0ec29..7238151 100644 --- a/transition_player.gd +++ b/transition_player.gd @@ -48,7 +48,7 @@ func _on_room_changed(): if _transition_door_name: var door: Door = room.find_child(_transition_door_name) player.position = door.position - player.set_forced_input(door.exit_towards) + player.set_movement_forced(door.exit_towards) play("room_trans_end") top.game_save() @@ -62,4 +62,4 @@ func _transition_end(): var room = top.get_node("ActiveRoom") var player: Player = room.find_child("Player") if player: - player.set_forced_input(null) + player.set_movement_normal() |
