diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2025-03-10 18:22:09 +0100 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2025-03-10 18:22:09 +0100 |
commit | 440020e642f539079867577435a9f8b02075699b (patch) | |
tree | 99acccfc1574a8ffc656d6f64ff934949edb1f52 /player/state_moving.gd |
Diffstat (limited to 'player/state_moving.gd')
-rw-r--r-- | player/state_moving.gd | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/player/state_moving.gd b/player/state_moving.gd new file mode 100644 index 0000000..0be777f --- /dev/null +++ b/player/state_moving.gd @@ -0,0 +1,52 @@ +class_name PlayerStateMoving +extends PlayerState + + +var is_moving := false +var target_position: Vector2 + + +func _state_enter() -> void: + is_moving = false + + +func _state_exit() -> void: + is_moving = false + + +func _physics_process(delta: float) -> void: + var map: TileMapLayer = Game.world.get_current_map().get_node("TileMapLayer") + + if not is_moving: + if Input.is_action_pressed("ui_up") and not player.ray_cast_up.is_colliding(): + is_moving = true + player.current_direction = Vector2.UP + player.sprite.play("walk_up") + elif Input.is_action_pressed("ui_down") and not player.ray_cast_down.is_colliding(): + is_moving = true + player.current_direction = Vector2.DOWN + player.sprite.play("walk_down") + elif Input.is_action_pressed("ui_left") and not player.ray_cast_left.is_colliding(): + is_moving = true + player.current_direction = Vector2.LEFT + player.sprite.play("walk_left") + elif Input.is_action_pressed("ui_right") and not player.ray_cast_right.is_colliding(): + is_moving = true + player.current_direction = Vector2.RIGHT + player.sprite.play("walk_right") + else: + player.set_state(player.state_idle) + + var target_tile := map.local_to_map(player.global_position) + Vector2i(player.current_direction) + target_position = map.map_to_local(target_tile) + + if is_moving: + player.global_position = player.global_position.move_toward( + target_position, + delta * player.current_speed + ) + + get_viewport().get_camera_2d().global_position = player.global_position + + if player.global_position == target_position: + is_moving = false |