tinycbg 0.9.0

A tiny crate for working with ULTRAKILL's Cybergrind Patterns programatically.
Documentation
use tinycbg::*;

#[test]
#[ignore = "only needs to be run once"]
fn create_test_patterns() {
    let mut pattern = CyberGrindPattern::new();

    for i in 0..=100 {
        let height = i as i8 - 50;
        pattern[i].set_height(height);
    }

    pattern[251].set_prefab(Prefab::Melee);
    pattern[252].set_prefab(Prefab::Projectile);
    pattern[253].set_prefab(Prefab::HideousMass);
    pattern[254].set_prefab(Prefab::JumpPad);
    pattern[255].set_prefab(Prefab::Stairs);

    pattern
        .write_to_path("tests/patterns/valid/range.cgp")
        .unwrap();

    for i in 0..256 {
        pattern[i].set_height(-50);
        pattern[i].set_prefab(Prefab::Melee);
    }

    pattern
        .write_to_path("tests/patterns/valid/max_len.cgp")
        .unwrap();
}

#[test]
fn parse() {
    let pattern = CyberGrindPattern::parse_path("tests/patterns/valid/range.cgp").unwrap();
    for i in 0..=100 {
        println!("{:?}", pattern[i]);
        assert_eq!(pattern[i].height(), i as i8 - 50);
        assert_eq!(pattern[i].prefab(), Prefab::None);
    }

    assert_eq!(pattern[251].prefab(), Prefab::Melee);
    assert_eq!(pattern[252].prefab(), Prefab::Projectile);
    assert_eq!(pattern[253].prefab(), Prefab::HideousMass);
    assert_eq!(pattern[254].prefab(), Prefab::JumpPad);
    assert_eq!(pattern[255].prefab(), Prefab::Stairs);

    let pattern = CyberGrindPattern::parse_path("tests/patterns/valid/max_len.cgp").unwrap();
    for i in 0..256 {
        assert_eq!(pattern[i].height(), -50);
        assert_eq!(pattern[i].prefab(), Prefab::Melee);
    }
}