extends Building func can_citizen_enter(coord: Vector2i, direction: Board.Direction) -> bool: var down_adjustment := Board.get_next_direction(Board.Direction.DOWN, get_rotation_count()) var left_adjustment := Board.get_next_direction(Board.Direction.LEFT, get_rotation_count()) var right_adjustment := Board.get_next_direction(Board.Direction.RIGHT, get_rotation_count()) var correct_heading := Board.get_next_direction(Board.Direction.UP, get_rotation_count()) var entrance_1 := starting_coord + Board.get_direction_vector(down_adjustment) var entrance_2 := ( starting_coord + Board.get_direction_vector(left_adjustment) + Board.get_direction_vector(down_adjustment) ) var entrance_3 := ( starting_coord + Board.get_direction_vector(left_adjustment) + Board.get_direction_vector(left_adjustment) + Board.get_direction_vector(down_adjustment) ) var entrance_4 := ( starting_coord + Board.get_direction_vector(right_adjustment) + Board.get_direction_vector(down_adjustment) ) var entrance_5 := ( starting_coord + Board.get_direction_vector(right_adjustment) + Board.get_direction_vector(right_adjustment) + Board.get_direction_vector(down_adjustment) ) return ( ( coord == entrance_1 or coord == entrance_2 or coord == entrance_3 or coord == entrance_4 or coord == entrance_5 ) and direction == correct_heading ) func get_tile_coords() -> Array[Vector2i]: var result: Array[Vector2i] = [] result.push_back(starting_coord) result.push_back( starting_coord + Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count()))) ) result.push_back( starting_coord + Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count()))) * 2 ) result.push_back( starting_coord + Vector2i(Vector2.LEFT.rotated(deg_to_rad(90 * get_rotation_count()))) ) result.push_back( starting_coord + Vector2i(Vector2.LEFT.rotated(deg_to_rad(90 * get_rotation_count()))) * 2 ) return result func get_direction_queue(citizen: Citizen) -> Array[Board.Direction]: var result: Array[Board.Direction] = [] match citizen.current_tile_coords - starting_coord: Vector2i(-2, 0): result.append(Board.Direction.RIGHT) result.append(Board.Direction.RIGHT) Vector2i(-1, 0): result.append(Board.Direction.RIGHT) Vector2i(2, 0): result.append(Board.Direction.LEFT) result.append(Board.Direction.LEFT) Vector2i(1, 0): result.append(Board.Direction.LEFT) Vector2i(0, -2): result.append(Board.Direction.DOWN) result.append(Board.Direction.DOWN) Vector2i(0, -1): result.append(Board.Direction.DOWN) Vector2i(0, 2): result.append(Board.Direction.UP) result.append(Board.Direction.UP) Vector2i(0, 1): result.append(Board.Direction.UP) result.append(Board.get_next_direction(Board.Direction.UP, get_rotation_count())) return result func activate(_citizen: Citizen) -> void: pass