- if _player.is_on_floor():
- # Get the XZ input direction based on player's input relative to the camera
- var forward := _camera.global_basis.z
- var right := _camera.global_basis.x
- var move_direction := (
- forward * input_pkt.movement_direction.y + right * input_pkt.movement_direction.x
- ).normalized()
- move_direction.y = 0
-
- # if we're not stuck, then it's okay to set the velocity
- floor_normal = _player.get_floor_normal()
- ground_slope_input = (PI / 2) - new_velocity.angle_to(floor_normal)
- new_velocity = new_velocity.move_toward(
- move_direction * (walk_speed + ground_slope_input * walk_speed),
- acceleration * delta
- )
- else:
- new_velocity += _player.get_gravity() * air_speed * delta
-
- return new_velocity
+ # assign player object to each move
+ for move in moves.values():
+ move.player = player
+ move.camera = camera
+
+
+func update(input: InputPacket, delta: float):
+ var relevent_move = current_move.should_enter(input)
+ if not relevent_move.is_empty():
+ switch_to(relevent_move)
+ current_move.update(input, delta)
+
+
+func switch_to(state: String):
+ current_move.on_exit_state()
+ current_move = moves[state]
+ current_move.on_enter_state()