summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--computer.gd2
-rw-r--r--player.gd51
-rw-r--r--transition_player.gd4
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)
diff --git a/player.gd b/player.gd
index 9dcdb38..2a0137f 100644
--- a/player.gd
+++ b/player.gd
@@ -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()