polyanya 0.16.1

Polygon Any Angle Pathfinding
Documentation
use std::io::{self, BufRead};

use glam::Vec2;
use polyanya::{Mesh, PolyanyaFile};

struct Scenario {
    from: Vec2,
    to: Vec2,
}

struct Scenarios(Vec<Scenario>);

impl Scenarios {
    pub fn from_file(path: &str) -> Scenarios {
        let file = std::fs::File::open(path).unwrap();

        Scenarios(
            io::BufReader::new(file)
                .lines()
                .skip(1)
                .flatten()
                .map(|line| {
                    let mut split = line.split('\t');
                    Scenario {
                        from: Vec2::new(
                            split.nth(4).unwrap().parse::<i32>().unwrap() as f32,
                            split.next().unwrap().parse::<i32>().unwrap() as f32,
                        ),
                        to: Vec2::new(
                            split.next().unwrap().parse::<i32>().unwrap() as f32,
                            split.next().unwrap().parse::<i32>().unwrap() as f32,
                        ),
                    }
                })
                .collect(),
        )
    }
}

fn main() {
    use tracing_subscriber::layer::SubscriberExt;

    tracing::subscriber::set_global_default(
        tracing_subscriber::registry().with(tracing_tracy::TracyLayer::default()),
    )
    .expect("set up the subscriber");

    let mut args = std::env::args();
    args.next();

    let mesh: Mesh = PolyanyaFile::from_file(&args.next().unwrap())
        .try_into()
        .unwrap();

    for scenario in Scenarios::from_file(&args.next().unwrap()).0 {
        mesh.path(scenario.from, scenario.to).unwrap();
    }
}