pub enum Error{
	InvalidNode,
}

/* block types

BLOCK_MAP_HEADER:
DefaultStyleInfo style_info
//bvh goes here
u64 num_nodes
//node 0 parent node is implied to be None
for node_id in 1..num_nodes{
	u64 parent_node
}
//ideally spacial blocks are sorted from distance to start zone
//texture blocks are inserted before the first spacial block they are used in
u64 num_spacial_blocks
for spacial_block_id in 0..num_spacial_blocks{
	u64 node_id
	u64 block_id //data block
	Aabb block_extents
}
//if the map file references external resources, num_resources = 0
u64 num_resources
for resource_id in 0..num_resources{
	u64 block_id
	u128 resource_id
}

BLOCK_MAP_RESOURCE:
Resource resource_type
//an individual one of the following:
	- model (IndexedModel)
	- shader (compiled SPIR-V)
	- image (JpegXL)
	- sound (Opus)
	- video (AV1)
	- animation (Trey thing)

BLOCK_MAP_REGION:
u64 num_models
for model_id in 0..num_models{
	u128 model_resource_uuid
	ModelInstance mode_instance
}

*/


//xdd
mod physics{
	pub struct StyleModifiers{}
}
mod model{
	pub struct IndexedModel{}
	pub struct ModelInstance{}
}
mod image{
	pub struct Image{}
}

//serious code

struct ModelUuid(u128);
struct ImageUuid(u128);
pub struct BvhNodeId(u64);
struct BvhNode{
	//
}

pub struct StreamableMap{
	file:crate::file::File,
	style:physics::StyleModifiers,//probably should move this out of physics
	bvh:BvhNode,
	//do not need this?  return only new data with load_node
	resource_model:std::collections::HashMap<ModelUuid,model::IndexedModel>,
	resource_image:std::collections::HashMap<ImageUuid,image::Image>,
}
impl StreamableMap{
	pub fn load_node(&mut self,node_id:BvhNodeId)->Result<Vec<model::ModelInstance>,Error>{
		//load region from disk
		//parse the models and determine what resources need to be loaded
		//load resources into self.resources
		//return Region
		Err(Error::InvalidNode)
	}
}