mirror of
https://codeberg.org/icewind/sourcenav.git
synced 2026-06-03 18:24:10 +02:00
basic benchmark
This commit is contained in:
parent
1607b851c5
commit
d3765674d4
3 changed files with 29 additions and 6 deletions
|
|
@ -6,6 +6,7 @@ pub use crate::navmesh::{
|
|||
use crate::parser::read_areas;
|
||||
pub use crate::parser::{NavArea, ParseError};
|
||||
use aabb_quadtree::{ItemId, QuadTree};
|
||||
use bitbuffer::{BitReadStream, LittleEndian};
|
||||
use euclid::{TypedPoint2D, TypedRect, TypedSize2D};
|
||||
|
||||
mod navmesh;
|
||||
|
|
@ -29,8 +30,8 @@ pub struct NavTree(QuadTree<NavArea, HammerUnit, [(ItemId, Rect); 4]>);
|
|||
/// # Ok(())
|
||||
/// # }
|
||||
/// ```
|
||||
pub fn get_area_tree(data: Vec<u8>) -> Result<NavTree, ParseError> {
|
||||
let areas = read_areas(data)?;
|
||||
pub fn get_area_tree(data: impl Into<BitReadStream<LittleEndian>>) -> Result<NavTree, ParseError> {
|
||||
let areas = read_areas(data.into())?;
|
||||
|
||||
let (min_x, min_y, max_x, max_y) = areas.iter().fold(
|
||||
(f32::MAX, f32::MAX, f32::MIN, f32::MIN),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
pub use crate::navmesh::NavArea;
|
||||
use bitbuffer::{BitReadBuffer, BitReadStream, LittleEndian};
|
||||
use bitbuffer::{BitReadStream, LittleEndian};
|
||||
use err_derive::Error;
|
||||
|
||||
/// Errors that can occur when parsing the binary nav file
|
||||
|
|
@ -19,8 +19,9 @@ pub enum ParseError {
|
|||
UnsupportedVersion(u32),
|
||||
}
|
||||
|
||||
pub(crate) fn read_areas(data: Vec<u8>) -> Result<Vec<NavArea>, ParseError> {
|
||||
let mut data = BitReadStream::new(BitReadBuffer::new(data, LittleEndian));
|
||||
pub(crate) fn read_areas(
|
||||
mut data: BitReadStream<LittleEndian>,
|
||||
) -> Result<Vec<NavArea>, ParseError> {
|
||||
let magic = data.read()?;
|
||||
if magic != 0xFEED_FACE {
|
||||
return Err(ParseError::InvalidMagicNumber(magic));
|
||||
|
|
@ -146,6 +147,7 @@ pub(crate) fn read_areas(data: Vec<u8>) -> Result<Vec<NavArea>, ParseError> {
|
|||
#[test]
|
||||
fn test() {
|
||||
let file = std::fs::read("data/pl_badwater.nav").unwrap();
|
||||
let areas = read_areas(file).unwrap();
|
||||
let data = BitReadStream::new(bitbuffer::BitReadBuffer::new(file, LittleEndian));
|
||||
let areas = read_areas(data).unwrap();
|
||||
assert_eq!(1930, areas.len());
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue