extends Area2D var direction = Vector2() const DEG_UP = 0 const DEG_RIGHT = 90 const DEG_DOWN = 180 const DEG_LEFT = 270 var grid var blocks = [] var is_blocked:bool = false export (NodePath) var rayU export (NodePath) var rayD export (NodePath) var rayL export (NodePath) var rayR var raycast func _ready(): grid = get_parent() turn(Vector2(0,1)) pass func _physics_process(delta): direction = Vector2() if Input.is_action_pressed("ui_up"): direction.y -= 1 elif Input.is_action_pressed("ui_down"): direction.y += 1 elif Input.is_action_pressed("ui_left"): direction.x -= 1 elif Input.is_action_pressed("ui_right"): direction.x += 1 if direction != Vector2(): turn(direction) if !raycast.is_colliding(): position = get_position() + direction * grid.get_cell_size() pass func _on_area_entered(a): if a.get_parent() != $Position2D: print(a) blocks.append(a) is_blocked = true pass func _on_area_exited(a): blocks.erase(a) is_blocked = blocks.size() pass func turn(dir:Vector2): if dir.y < 0: raycast=get_node(rayU) elif dir.x < 0: raycast=get_node(rayL) elif dir.x > 0: raycast=get_node(rayR) else: raycast=get_node(rayD) pass