-
- u16 indices[] = {0,1,2,2,3,0};
- // Add to mesh collector
- collector.append(liquid_material, vertices, 4, indices, 6);
- }
- }
- /*
- Add water sources to mesh if using new style
- */
- else if(content_features(n).liquid_type == LIQUID_SOURCE
- && new_style_water)
- {
- assert(content_features(n).special_material);
- video::SMaterial &liquid_material =
- *content_features(n).special_material;
- assert(content_features(n).special_atlas);
- AtlasPointer &pa_liquid1 =
- *content_features(n).special_atlas;
-
- bool top_is_air = false;
- MapNode n = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(x,y+1,z));
- if(n.getContent() == CONTENT_AIR)
- top_is_air = true;
-
- if(top_is_air == false)
- continue;
-
- u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio));
- video::SColor c = MapBlock_LightColor(
- content_features(n).vertex_alpha, l);
-
- video::S3DVertex vertices[4] =
- {
- /*video::S3DVertex(-BS/2,0,-BS/2, 0,0,0, c, 0,1),
- video::S3DVertex(BS/2,0,-BS/2, 0,0,0, c, 1,1),
- video::S3DVertex(BS/2,0,BS/2, 0,0,0, c, 1,0),
- video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,0),*/
- video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c,
- pa_liquid1.x0(), pa_liquid1.y1()),
- video::S3DVertex(BS/2,0,BS/2, 0,0,0, c,
- pa_liquid1.x1(), pa_liquid1.y1()),
- video::S3DVertex(BS/2,0,-BS/2, 0,0,0, c,
- pa_liquid1.x1(), pa_liquid1.y0()),
- video::S3DVertex(-BS/2,0,-BS/2, 0,0,0, c,
- pa_liquid1.x0(), pa_liquid1.y0()),
- };
-
- for(s32 i=0; i<4; i++)
- {
- vertices[i].Pos.Y += (-0.5+node_liquid_level)*BS;
- vertices[i].Pos += intToFloat(p + blockpos_nodes, BS);
- }
-
- u16 indices[] = {0,1,2,2,3,0};
- // Add to mesh collector
- collector.append(liquid_material, vertices, 4, indices, 6);
- }
- /*
- Add leaves if using new style
- */
- else if(n.getContent() == CONTENT_LEAVES && new_style_leaves)
- {
- /*u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio));*/
- u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
- video::SColor c = MapBlock_LightColor(255, l);
-
- for(u32 j=0; j<6; j++)
- {
- video::S3DVertex vertices[4] =
- {
- /*video::S3DVertex(-BS/2,-BS/2,BS/2, 0,0,0, c, 0,1),
- video::S3DVertex(BS/2,-BS/2,BS/2, 0,0,0, c, 1,1),
- video::S3DVertex(BS/2,BS/2,BS/2, 0,0,0, c, 1,0),
- video::S3DVertex(-BS/2,BS/2,BS/2, 0,0,0, c, 0,0),*/
- video::S3DVertex(-BS/2,-BS/2,BS/2, 0,0,0, c,
- pa_leaves1.x0(), pa_leaves1.y1()),
- video::S3DVertex(BS/2,-BS/2,BS/2, 0,0,0, c,
- pa_leaves1.x1(), pa_leaves1.y1()),
- video::S3DVertex(BS/2,BS/2,BS/2, 0,0,0, c,
- pa_leaves1.x1(), pa_leaves1.y0()),
- video::S3DVertex(-BS/2,BS/2,BS/2, 0,0,0, c,
- pa_leaves1.x0(), pa_leaves1.y0()),
- };
-
- if(j == 0)
- {
- for(u16 i=0; i<4; i++)
- vertices[i].Pos.rotateXZBy(0);
- }
- else if(j == 1)
- {
- for(u16 i=0; i<4; i++)
- vertices[i].Pos.rotateXZBy(180);
- }
- else if(j == 2)
- {
- for(u16 i=0; i<4; i++)
- vertices[i].Pos.rotateXZBy(-90);
- }
- else if(j == 3)
- {
- for(u16 i=0; i<4; i++)
- vertices[i].Pos.rotateXZBy(90);
- }
- else if(j == 4)