diff --git a/src/gfx/map.rs b/src/gfx/map.rs index bb53fbe..4b15738 100644 --- a/src/gfx/map.rs +++ b/src/gfx/map.rs @@ -460,10 +460,10 @@ impl MapRender { meshgen_threads.push(std::thread::spawn(move || { let mut buffer_cap = 0; let info = info.deref(); - let mut nodes_by_name = HashMap::::new(); - for def in &info.nodes { + let mut nodes_by_name = HashMap::::new(); + for (i, def) in info.nodes.iter().enumerate() { if let Some(def) = def { - nodes_by_name.insert(def.name.clone(), *def.clone()); + nodes_by_name.insert(def.name.clone(), i as u16); } else { break; } diff --git a/src/gfx/map/mesh.rs b/src/gfx/map/mesh.rs index 5e3e8ca..db52320 100644 --- a/src/gfx/map/mesh.rs +++ b/src/gfx/map/mesh.rs @@ -24,7 +24,7 @@ impl MeshData { pub(super) fn create_mesh( mkinfo: &MeshgenInfo, - nodes_by_name: &HashMap, + nodes_by_name: &HashMap, settings: &MapRenderSettings, _pos: Point3, block: &MapBlock, @@ -75,9 +75,7 @@ pub(super) fn create_mesh( let pos: [i16; 3] = array(|i| ((index >> (4 * i)) & 0xf) as i16); for (f, face) in CUBE.iter().enumerate() { - if draw_type == DrawType::Cube - || draw_type == DrawType::Liquid - { + if draw_type == DrawType::Cube || draw_type == DrawType::Liquid { let c = [1, 1, 0, 0, 2, 2][f]; let mut nblk = block; @@ -101,7 +99,11 @@ pub(super) fn create_mesh( DrawType::Cube => ndef.draw_type == DrawType::Cube, DrawType::Liquid => { // println!("alternate flowing name: {:?}", &ndef.flowing_alt); - let alternate = nodes_by_name.get(&ndef.flowing_alt); + let alt_id = nodes_by_name.get(&ndef.flowing_alt); + let mut alt_def = None; + if let Some(alt_id) = alt_id { + alt_def = Some(mkinfo.nodes.as_ref()[*alt_id as usize].as_ref().unwrap()); + } // println!("alternate flowing: {:?}", alternate); ndef.draw_type == DrawType::Cube || ncontent == content }