class_name Player extends CharacterBody2D @onready var raycast: RayCast2D = $RayCast2D @onready var tile_map: TileMapLayer = $"../TileMapLayer" @export var speed: float = 40 @export var respawn_point: Marker2D const TILE_SIZE = 8 var is_moving = false var should_move = false var input_dir: Vector2 func _ready(): print(tile_map) _respawn() pass func _process(delta): _try_interact() pass func _physics_process(delta): _try_move() func _respawn(): position = respawn_point.position func _try_move(): should_move = false if Input.is_action_pressed("move_up"): input_dir = Vector2.UP should_move = true elif Input.is_action_pressed("move_right"): input_dir = Vector2.RIGHT should_move = true elif Input.is_action_pressed("move_down"): input_dir = Vector2.DOWN should_move = true elif Input.is_action_pressed("move_left"): input_dir = Vector2.LEFT should_move = true if should_move and !is_moving: raycast.target_position = input_dir * 8 raycast.force_raycast_update() if raycast.is_colliding(): return is_moving = true var tween = create_tween() tween.tween_property(self, "position", position + input_dir * TILE_SIZE, 0.25) tween.tween_callback(func(): is_moving = false _post_movement_check() ) func _post_movement_check(): var current_tile: Vector2i = tile_map.local_to_map(tile_map.to_local(global_position)) var tile_data: TileData = tile_map.get_cell_tile_data(current_tile) if tile_data and tile_data.get_custom_data("death"): die() func die(): _respawn() func _try_interact(): raycast.target_position = input_dir * 8 raycast.force_raycast_update() var collider = raycast.get_collider() if Input.is_action_just_pressed("attack") and collider: if collider is PuzzleElement: (collider as PuzzleElement).interact(self) pass pass