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 } */ struct Uuid(u128); struct BvhNodeId(u64); struct BvhNode{ // } enum Resource{ IndexedModel(model::IndexedModel), Image(image::Image),//? } pub struct StreamableMap{ file:crate::file::File, style:physics::StyleModifiers,//probably should move this out of physics bvh:BvhNode, resources:std::collections::HashMap, } impl StreamableMap{ pub fn load_node(&mut self,node_id:BvhNodeId)->Result,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) } }