forked from oerkki/voxelands
slightly fancier trees
This commit is contained in:
parent
eb6d734ce4
commit
91ca0b97c6
Binary file not shown.
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.7 KiB |
|
@ -5585,6 +5585,12 @@ void meshgen_trunklike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &se
|
||||||
content_t n2;
|
content_t n2;
|
||||||
bool mud_under = false;
|
bool mud_under = false;
|
||||||
|
|
||||||
|
float bottom_scale = 1.0;
|
||||||
|
float top_scale = 1.0;
|
||||||
|
int height = 0;
|
||||||
|
int dir = 0;
|
||||||
|
int cap = 0;
|
||||||
|
|
||||||
content_t thiscontent = n.getContent();
|
content_t thiscontent = n.getContent();
|
||||||
|
|
||||||
if (data->mesh_detail == 1) {
|
if (data->mesh_detail == 1) {
|
||||||
|
@ -5641,33 +5647,67 @@ void meshgen_trunklike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &se
|
||||||
}else if (!meshgen_hardface(data,p,n,v3s16(0,0,-1))) {
|
}else if (!meshgen_hardface(data,p,n,v3s16(0,0,-1))) {
|
||||||
z_minus_any = true;
|
z_minus_any = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (content_features(thiscontent).param_type == CPT_BLOCKDATA) {
|
||||||
|
height = n.param1&0x0F;
|
||||||
|
cap = n.param1&0x10;
|
||||||
|
dir = (n.param1&0xE0)>>5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (height || dir) {
|
||||||
|
int top_height = height+1;
|
||||||
|
int bottom_height = height;
|
||||||
|
if (top_height > 16)
|
||||||
|
top_height = 16;
|
||||||
|
if (bottom_height > 16)
|
||||||
|
bottom_height = 16;
|
||||||
|
if (cap)
|
||||||
|
top_height = 16;
|
||||||
|
if (dir == 1 || dir == 4) {
|
||||||
|
bottom_scale = (0.0625*(16.0-((float)top_height)));
|
||||||
|
top_scale = (0.0625*(16.0-((float)bottom_height)));
|
||||||
|
}else{
|
||||||
|
bottom_scale = (0.0625*(16.0-((float)bottom_height)));
|
||||||
|
top_scale = (0.0625*(16.0-((float)top_height)));
|
||||||
|
}
|
||||||
|
if (dir) {
|
||||||
|
if (dir == 1 || dir == 2) {
|
||||||
|
x_plus = true;
|
||||||
|
x_minus = true;
|
||||||
|
}else if (dir == 3 || dir == 4) {
|
||||||
|
z_plus = true;
|
||||||
|
z_minus = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TileSpec tile = getNodeTile(n,p,v3s16(1,0,0),selected);
|
TileSpec tile = getNodeTile(n,p,v3s16(1,0,0),selected);
|
||||||
TileSpec endtile = getNodeTile(n,p,v3s16(0,1,0),selected);
|
TileSpec endtile = getNodeTile(n,p,v3s16(0,1,0),selected);
|
||||||
video::S3DVertex vertices[10] = {
|
video::S3DVertex vertices[10] = {
|
||||||
video::S3DVertex(0 ,-data->m_BS*0.5,data->m_BS*0.499, 0,0,0, video::SColor(255,255,255,255), 0.125, 0.),
|
video::S3DVertex(0 ,-data->m_BS*0.5,data->m_BS*0.499*(bottom_scale), 0,0,0, video::SColor(255,255,255,255), 0.125, 0.),
|
||||||
video::S3DVertex(data->m_BS*0.125,-data->m_BS*0.5,data->m_BS*0.499, 0,0,0, video::SColor(255,255,255,255), 0.25, 0.),
|
video::S3DVertex(data->m_BS*0.125*(bottom_scale),-data->m_BS*0.5,data->m_BS*0.499*(bottom_scale), 0,0,0, video::SColor(255,255,255,255), 0.25, 0.),
|
||||||
video::S3DVertex(data->m_BS*0.375,-data->m_BS*0.5,data->m_BS*0.375, 0,0,0, video::SColor(255,255,255,255), 0.5, 0.),
|
video::S3DVertex(data->m_BS*0.375*(bottom_scale),-data->m_BS*0.5,data->m_BS*0.375*(bottom_scale), 0,0,0, video::SColor(255,255,255,255), 0.5, 0.),
|
||||||
video::S3DVertex(data->m_BS*0.499,-data->m_BS*0.5,data->m_BS*0.125, 0,0,0, video::SColor(255,255,255,255), 0.75, 0.),
|
video::S3DVertex(data->m_BS*0.499*(bottom_scale),-data->m_BS*0.5,data->m_BS*0.125*(bottom_scale), 0,0,0, video::SColor(255,255,255,255), 0.75, 0.),
|
||||||
video::S3DVertex(data->m_BS*0.499,-data->m_BS*0.5,0 , 0,0,0, video::SColor(255,255,255,255), 0.625, 0.),
|
video::S3DVertex(data->m_BS*0.499*(bottom_scale),-data->m_BS*0.5,0 , 0,0,0, video::SColor(255,255,255,255), 0.625, 0.),
|
||||||
|
|
||||||
video::S3DVertex(0 , data->m_BS*0.5,data->m_BS*0.499, 0,0,0, video::SColor(255,255,255,255), 0.125, 1.0),
|
video::S3DVertex(0 , data->m_BS*0.5,data->m_BS*0.499*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.125, 1.0),
|
||||||
video::S3DVertex(data->m_BS*0.125, data->m_BS*0.5,data->m_BS*0.499, 0,0,0, video::SColor(255,255,255,255), 0.25, 1.0),
|
video::S3DVertex(data->m_BS*0.125*top_scale, data->m_BS*0.5,data->m_BS*0.499*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.25, 1.0),
|
||||||
video::S3DVertex(data->m_BS*0.375, data->m_BS*0.5,data->m_BS*0.375, 0,0,0, video::SColor(255,255,255,255), 0.5, 1.0),
|
video::S3DVertex(data->m_BS*0.375*top_scale, data->m_BS*0.5,data->m_BS*0.375*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.5, 1.0),
|
||||||
video::S3DVertex(data->m_BS*0.499, data->m_BS*0.5,data->m_BS*0.125, 0,0,0, video::SColor(255,255,255,255), 0.75, 1.0),
|
video::S3DVertex(data->m_BS*0.499*top_scale, data->m_BS*0.5,data->m_BS*0.125*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.75, 1.0),
|
||||||
video::S3DVertex(data->m_BS*0.499, data->m_BS*0.5,0 , 0,0,0, video::SColor(255,255,255,255), 0.625, 1.0)
|
video::S3DVertex(data->m_BS*0.499*top_scale, data->m_BS*0.5,0 , 0,0,0, video::SColor(255,255,255,255), 0.625, 1.0)
|
||||||
};
|
};
|
||||||
video::S3DVertex branch_vertices[10] = {
|
video::S3DVertex branch_vertices[10] = {
|
||||||
video::S3DVertex(0 ,data->m_BS*0.125,data->m_BS*0.499, 0,0,0, video::SColor(255,255,255,255), 0.125, 0.625),
|
video::S3DVertex(0 ,data->m_BS*0.125,data->m_BS*0.499*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.125, 0.625),
|
||||||
video::S3DVertex(data->m_BS*0.125,data->m_BS*0.125,data->m_BS*0.499, 0,0,0, video::SColor(255,255,255,255), 0.25, 0.625),
|
video::S3DVertex(data->m_BS*0.125*top_scale,data->m_BS*0.125,data->m_BS*0.499*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.25, 0.625),
|
||||||
video::S3DVertex(data->m_BS*0.375,data->m_BS*0.125,data->m_BS*0.375, 0,0,0, video::SColor(255,255,255,255), 0.5, 0.625),
|
video::S3DVertex(data->m_BS*0.375*top_scale,data->m_BS*0.125,data->m_BS*0.375*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.5, 0.625),
|
||||||
video::S3DVertex(data->m_BS*0.499,data->m_BS*0.125,data->m_BS*0.125, 0,0,0, video::SColor(255,255,255,255), 0.75, 0.625),
|
video::S3DVertex(data->m_BS*0.499*top_scale,data->m_BS*0.125,data->m_BS*0.125*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.75, 0.625),
|
||||||
video::S3DVertex(data->m_BS*0.499,data->m_BS*0.125,0 , 0,0,0, video::SColor(255,255,255,255), 0.625, 0.625),
|
video::S3DVertex(data->m_BS*0.499*top_scale,data->m_BS*0.125,0 , 0,0,0, video::SColor(255,255,255,255), 0.625, 0.625),
|
||||||
|
|
||||||
video::S3DVertex(0 ,data->m_BS*0.5 ,data->m_BS*0.499, 0,0,0, video::SColor(255,255,255,255), 0.125, 1.0),
|
video::S3DVertex(0 ,data->m_BS*0.5 ,data->m_BS*0.499*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.125, 1.0),
|
||||||
video::S3DVertex(data->m_BS*0.125,data->m_BS*0.5 ,data->m_BS*0.499, 0,0,0, video::SColor(255,255,255,255), 0.25, 1.0),
|
video::S3DVertex(data->m_BS*0.125*top_scale,data->m_BS*0.5 ,data->m_BS*0.499*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.25, 1.0),
|
||||||
video::S3DVertex(data->m_BS*0.375,data->m_BS*0.5 ,data->m_BS*0.375, 0,0,0, video::SColor(255,255,255,255), 0.5, 1.0),
|
video::S3DVertex(data->m_BS*0.375*top_scale,data->m_BS*0.5 ,data->m_BS*0.375*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.5, 1.0),
|
||||||
video::S3DVertex(data->m_BS*0.499,data->m_BS*0.5 ,data->m_BS*0.125, 0,0,0, video::SColor(255,255,255,255), 0.75, 1.0),
|
video::S3DVertex(data->m_BS*0.499*top_scale,data->m_BS*0.5 ,data->m_BS*0.125*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.75, 1.0),
|
||||||
video::S3DVertex(data->m_BS*0.499,data->m_BS*0.5 ,0 , 0,0,0, video::SColor(255,255,255,255), 0.625, 1.0)
|
video::S3DVertex(data->m_BS*0.499*top_scale,data->m_BS*0.5 ,0 , 0,0,0, video::SColor(255,255,255,255), 0.625, 1.0)
|
||||||
};
|
};
|
||||||
u16 indices[24] = {0,1,6,0,6,5,1,2,7,1,7,6,2,3,8,2,8,7,3,4,9,3,9,8};
|
u16 indices[24] = {0,1,6,0,6,5,1,2,7,1,7,6,2,3,8,2,8,7,3,4,9,3,9,8};
|
||||||
video::S3DVertex end_vertices[6] = {
|
video::S3DVertex end_vertices[6] = {
|
||||||
|
@ -5683,9 +5723,9 @@ void meshgen_trunklike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &se
|
||||||
video::S3DVertex(data->m_BS*0.498,-data->m_BS*0.5 ,data->m_BS*0.498, 0,0,0, video::SColor(255,255,255,255), 0., 0.),
|
video::S3DVertex(data->m_BS*0.498,-data->m_BS*0.5 ,data->m_BS*0.498, 0,0,0, video::SColor(255,255,255,255), 0., 0.),
|
||||||
video::S3DVertex(data->m_BS*0.498,-data->m_BS*0.5 ,data->m_BS*0.125, 0,0,0, video::SColor(255,255,255,255), 0.375, 0.),
|
video::S3DVertex(data->m_BS*0.498,-data->m_BS*0.5 ,data->m_BS*0.125, 0,0,0, video::SColor(255,255,255,255), 0.375, 0.),
|
||||||
video::S3DVertex(data->m_BS*0.125,-data->m_BS*0.5 ,data->m_BS*0.498, 0,0,0, video::SColor(255,255,255,255), 0.375, 0.),
|
video::S3DVertex(data->m_BS*0.125,-data->m_BS*0.5 ,data->m_BS*0.498, 0,0,0, video::SColor(255,255,255,255), 0.375, 0.),
|
||||||
video::S3DVertex(data->m_BS*0.498, data->m_BS*0.25,data->m_BS*0.125, 0,0,0, video::SColor(255,255,255,255), 0.375, 0.75),
|
video::S3DVertex(data->m_BS*0.498*top_scale, data->m_BS*0.25,data->m_BS*0.125*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.375, 0.75),
|
||||||
video::S3DVertex(data->m_BS*0.375, data->m_BS*0.25,data->m_BS*0.375, 0,0,0, video::SColor(255,255,255,255), 0.125, 0.75),
|
video::S3DVertex(data->m_BS*0.375*top_scale, data->m_BS*0.25,data->m_BS*0.375*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.125, 0.75),
|
||||||
video::S3DVertex(data->m_BS*0.125, data->m_BS*0.25,data->m_BS*0.498, 0,0,0, video::SColor(255,255,255,255), 0.375, 0.75),
|
video::S3DVertex(data->m_BS*0.125*top_scale, data->m_BS*0.25,data->m_BS*0.498*top_scale, 0,0,0, video::SColor(255,255,255,255), 0.375, 0.75),
|
||||||
};
|
};
|
||||||
u16 base_indices[12] = {0,1,3,0,5,2,0,3,4,0,4,5};
|
u16 base_indices[12] = {0,1,3,0,5,2,0,3,4,0,4,5};
|
||||||
u16 rots[4] = {0,90,180,270};
|
u16 rots[4] = {0,90,180,270};
|
||||||
|
@ -5734,6 +5774,8 @@ void meshgen_trunklike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &se
|
||||||
video::S3DVertex v[6];
|
video::S3DVertex v[6];
|
||||||
for (u16 i=0; i<6; i++) {
|
for (u16 i=0; i<6; i++) {
|
||||||
v[i] = end_vertices[i];
|
v[i] = end_vertices[i];
|
||||||
|
v[i].Pos.X *= top_scale;
|
||||||
|
v[i].Pos.Z *= top_scale;
|
||||||
v[i].Pos.rotateXZBy(rots[j]);
|
v[i].Pos.rotateXZBy(rots[j]);
|
||||||
v[i].TCoords *= endtile.texture.size;
|
v[i].TCoords *= endtile.texture.size;
|
||||||
v[i].TCoords += endtile.texture.pos;
|
v[i].TCoords += endtile.texture.pos;
|
||||||
|
@ -5757,6 +5799,8 @@ void meshgen_trunklike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &se
|
||||||
video::S3DVertex v[6];
|
video::S3DVertex v[6];
|
||||||
for (u16 i=0; i<6; i++) {
|
for (u16 i=0; i<6; i++) {
|
||||||
v[i] = end_vertices[i];
|
v[i] = end_vertices[i];
|
||||||
|
v[i].Pos.X *= bottom_scale;
|
||||||
|
v[i].Pos.Z *= bottom_scale;
|
||||||
v[i].Pos.rotateXYBy(180);
|
v[i].Pos.rotateXYBy(180);
|
||||||
v[i].Pos.rotateXZBy(rots[j]);
|
v[i].Pos.rotateXZBy(rots[j]);
|
||||||
v[i].TCoords *= endtile.texture.size;
|
v[i].TCoords *= endtile.texture.size;
|
||||||
|
@ -5980,6 +6024,10 @@ void meshgen_trunklike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &se
|
||||||
video::S3DVertex v[6];
|
video::S3DVertex v[6];
|
||||||
for (u16 i=0; i<6; i++) {
|
for (u16 i=0; i<6; i++) {
|
||||||
v[i] = end_vertices[i];
|
v[i] = end_vertices[i];
|
||||||
|
if (dir) {
|
||||||
|
v[i].Pos.X *= bottom_scale;
|
||||||
|
v[i].Pos.Z *= bottom_scale;
|
||||||
|
}
|
||||||
v[i].Pos.rotateXYBy(-90);
|
v[i].Pos.rotateXYBy(-90);
|
||||||
v[i].Pos.rotateYZBy(rots[j]);
|
v[i].Pos.rotateYZBy(rots[j]);
|
||||||
v[i].TCoords *= endtile.texture.size;
|
v[i].TCoords *= endtile.texture.size;
|
||||||
|
@ -6004,6 +6052,10 @@ void meshgen_trunklike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &se
|
||||||
video::S3DVertex v[6];
|
video::S3DVertex v[6];
|
||||||
for (u16 i=0; i<6; i++) {
|
for (u16 i=0; i<6; i++) {
|
||||||
v[i] = end_vertices[i];
|
v[i] = end_vertices[i];
|
||||||
|
if (dir) {
|
||||||
|
v[i].Pos.X *= top_scale;
|
||||||
|
v[i].Pos.Z *= top_scale;
|
||||||
|
}
|
||||||
v[i].Pos.rotateXYBy(90);
|
v[i].Pos.rotateXYBy(90);
|
||||||
v[i].Pos.rotateYZBy(rots[j]);
|
v[i].Pos.rotateYZBy(rots[j]);
|
||||||
v[i].TCoords *= endtile.texture.size;
|
v[i].TCoords *= endtile.texture.size;
|
||||||
|
@ -6133,6 +6185,10 @@ void meshgen_trunklike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &se
|
||||||
video::S3DVertex v[6];
|
video::S3DVertex v[6];
|
||||||
for (u16 i=0; i<6; i++) {
|
for (u16 i=0; i<6; i++) {
|
||||||
v[i] = end_vertices[i];
|
v[i] = end_vertices[i];
|
||||||
|
if (dir) {
|
||||||
|
v[i].Pos.X *= top_scale;
|
||||||
|
v[i].Pos.Z *= top_scale;
|
||||||
|
}
|
||||||
v[i].Pos.rotateYZBy(90);
|
v[i].Pos.rotateYZBy(90);
|
||||||
v[i].Pos.rotateXYBy(rots[j]);
|
v[i].Pos.rotateXYBy(rots[j]);
|
||||||
v[i].TCoords *= endtile.texture.size;
|
v[i].TCoords *= endtile.texture.size;
|
||||||
|
@ -6157,6 +6213,10 @@ void meshgen_trunklike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &se
|
||||||
video::S3DVertex v[6];
|
video::S3DVertex v[6];
|
||||||
for (u16 i=0; i<6; i++) {
|
for (u16 i=0; i<6; i++) {
|
||||||
v[i] = end_vertices[i];
|
v[i] = end_vertices[i];
|
||||||
|
if (dir) {
|
||||||
|
v[i].Pos.X *= bottom_scale;
|
||||||
|
v[i].Pos.Z *= bottom_scale;
|
||||||
|
}
|
||||||
v[i].Pos.rotateYZBy(-90);
|
v[i].Pos.rotateYZBy(-90);
|
||||||
v[i].Pos.rotateXYBy(rots[j]);
|
v[i].Pos.rotateXYBy(rots[j]);
|
||||||
v[i].TCoords *= endtile.texture.size;
|
v[i].TCoords *= endtile.texture.size;
|
||||||
|
|
|
@ -41,6 +41,7 @@ void content_mapnode_plants(bool repeat)
|
||||||
f->setAllTextures("tree.png");
|
f->setAllTextures("tree.png");
|
||||||
f->setTexture(0, "tree_top.png");
|
f->setTexture(0, "tree_top.png");
|
||||||
f->setTexture(1, "tree_top.png");
|
f->setTexture(1, "tree_top.png");
|
||||||
|
f->param_type = CPT_BLOCKDATA;
|
||||||
f->setInventoryTextureCube("tree_top.png", "tree.png", "tree.png");
|
f->setInventoryTextureCube("tree_top.png", "tree.png", "tree.png");
|
||||||
f->draw_type = CDT_TRUNKLIKE;
|
f->draw_type = CDT_TRUNKLIKE;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
@ -62,6 +63,7 @@ void content_mapnode_plants(bool repeat)
|
||||||
f->setAllTextures("apple_tree.png");
|
f->setAllTextures("apple_tree.png");
|
||||||
f->setTexture(0, "apple_tree_top.png");
|
f->setTexture(0, "apple_tree_top.png");
|
||||||
f->setTexture(1, "apple_tree_top.png");
|
f->setTexture(1, "apple_tree_top.png");
|
||||||
|
f->param_type = CPT_BLOCKDATA;
|
||||||
f->setInventoryTextureCube("apple_tree_top.png", "apple_tree.png", "apple_tree.png");
|
f->setInventoryTextureCube("apple_tree_top.png", "apple_tree.png", "apple_tree.png");
|
||||||
f->draw_type = CDT_TRUNKLIKE;
|
f->draw_type = CDT_TRUNKLIKE;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
@ -83,6 +85,7 @@ void content_mapnode_plants(bool repeat)
|
||||||
f->setAllTextures("jungletree.png");
|
f->setAllTextures("jungletree.png");
|
||||||
f->setTexture(0, "jungletree_top.png");
|
f->setTexture(0, "jungletree_top.png");
|
||||||
f->setTexture(1, "jungletree_top.png");
|
f->setTexture(1, "jungletree_top.png");
|
||||||
|
f->param_type = CPT_BLOCKDATA;
|
||||||
f->setInventoryTextureCube("jungletree_top.png", "jungletree.png", "jungletree.png");
|
f->setInventoryTextureCube("jungletree_top.png", "jungletree.png", "jungletree.png");
|
||||||
f->draw_type = CDT_TRUNKLIKE;
|
f->draw_type = CDT_TRUNKLIKE;
|
||||||
//f->is_ground_content = true;
|
//f->is_ground_content = true;
|
||||||
|
@ -103,6 +106,7 @@ void content_mapnode_plants(bool repeat)
|
||||||
f->setAllTextures("conifer_tree.png");
|
f->setAllTextures("conifer_tree.png");
|
||||||
f->setTexture(0, "conifer_tree_top.png");
|
f->setTexture(0, "conifer_tree_top.png");
|
||||||
f->setTexture(1, "conifer_tree_top.png");
|
f->setTexture(1, "conifer_tree_top.png");
|
||||||
|
f->param_type = CPT_BLOCKDATA;
|
||||||
f->setInventoryTextureCube("conifer_tree_top.png", "conifer_tree.png", "conifer_tree.png");
|
f->setInventoryTextureCube("conifer_tree_top.png", "conifer_tree.png", "conifer_tree.png");
|
||||||
f->draw_type = CDT_TRUNKLIKE;
|
f->draw_type = CDT_TRUNKLIKE;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
|
|
@ -43,12 +43,17 @@ static void make_tree(ManualMapVoxelManipulator &vmanip, v3s16 p0)
|
||||||
{
|
{
|
||||||
MapNode treenode(CONTENT_TREE);
|
MapNode treenode(CONTENT_TREE);
|
||||||
MapNode leavesnode(CONTENT_LEAVES);
|
MapNode leavesnode(CONTENT_LEAVES);
|
||||||
|
uint8_t b = 0xE0;
|
||||||
|
|
||||||
s16 trunk_h = myrand_range(5,6);
|
s16 trunk_h = myrand_range(5,6);
|
||||||
v3s16 p1 = p0;
|
v3s16 p1 = p0;
|
||||||
for (s16 ii=0; ii<trunk_h; ii++) {
|
for (s16 ii=0; ii<trunk_h; ii++) {
|
||||||
|
treenode.param1 = b|ii;
|
||||||
|
if (ii == trunk_h-1)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
if (vmanip.m_area.contains(p1))
|
if (vmanip.m_area.contains(p1))
|
||||||
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
||||||
|
b = 0;
|
||||||
p1.Y++;
|
p1.Y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,13 +122,17 @@ static void make_appletree(ManualMapVoxelManipulator &vmanip, v3s16 p0)
|
||||||
MapNode treenode(CONTENT_APPLE_TREE);
|
MapNode treenode(CONTENT_APPLE_TREE);
|
||||||
MapNode leavesnode(CONTENT_APPLE_LEAVES);
|
MapNode leavesnode(CONTENT_APPLE_LEAVES);
|
||||||
MapNode applenode(CONTENT_APPLE);
|
MapNode applenode(CONTENT_APPLE);
|
||||||
|
uint8_t b = 0xE0;
|
||||||
|
|
||||||
s16 trunk_h = myrand_range(4, 5);
|
s16 trunk_h = myrand_range(4, 5);
|
||||||
v3s16 p1 = p0;
|
v3s16 p1 = p0;
|
||||||
for(s16 ii=0; ii<trunk_h; ii++)
|
for (s16 ii=0; ii<trunk_h; ii++) {
|
||||||
{
|
treenode.param1 = b|ii;
|
||||||
|
if (ii == trunk_h-1)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
if(vmanip.m_area.contains(p1))
|
if(vmanip.m_area.contains(p1))
|
||||||
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
||||||
|
b = 0;
|
||||||
p1.Y++;
|
p1.Y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,12 +205,17 @@ static void make_conifertree(ManualMapVoxelManipulator &vmanip, v3s16 p0)
|
||||||
{
|
{
|
||||||
MapNode treenode(CONTENT_CONIFER_TREE);
|
MapNode treenode(CONTENT_CONIFER_TREE);
|
||||||
MapNode leavesnode(CONTENT_CONIFER_LEAVES);
|
MapNode leavesnode(CONTENT_CONIFER_LEAVES);
|
||||||
|
uint8_t b = 0xE0;
|
||||||
|
|
||||||
s16 trunk_h = myrand_range(8, 11);
|
s16 trunk_h = myrand_range(8, 11);
|
||||||
v3s16 p1 = p0;
|
v3s16 p1 = p0;
|
||||||
for (s16 ii=0; ii<trunk_h; ii++) {
|
for (s16 ii=0; ii<trunk_h; ii++) {
|
||||||
|
treenode.param1 = b|ii;
|
||||||
|
if (ii == trunk_h-1)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
if(vmanip.m_area.contains(p1))
|
if(vmanip.m_area.contains(p1))
|
||||||
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
||||||
|
b = 0;
|
||||||
p1.Y++;
|
p1.Y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,13 +247,17 @@ static void make_largetree(ManualMapVoxelManipulator &vmanip, v3s16 p0)
|
||||||
{
|
{
|
||||||
MapNode treenode(CONTENT_TREE);
|
MapNode treenode(CONTENT_TREE);
|
||||||
MapNode leavesnode(CONTENT_LEAVES);
|
MapNode leavesnode(CONTENT_LEAVES);
|
||||||
|
uint8_t b = 0xE0;
|
||||||
|
|
||||||
s16 trunk_h = myrand_range(10, 12);
|
s16 trunk_h = myrand_range(10, 12);
|
||||||
v3s16 p1 = p0;
|
v3s16 p1 = p0;
|
||||||
for(s16 ii=0; ii<trunk_h; ii++)
|
for (s16 ii=0; ii<trunk_h; ii++) {
|
||||||
{
|
treenode.param1 = b|ii;
|
||||||
|
if (ii == trunk_h-1)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
if(vmanip.m_area.contains(p1))
|
if(vmanip.m_area.contains(p1))
|
||||||
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
||||||
|
b = 0;
|
||||||
p1.Y++;
|
p1.Y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,33 +272,50 @@ static void make_largetree(ManualMapVoxelManipulator &vmanip, v3s16 p0)
|
||||||
for (s16 k=0; k<5; k++) {
|
for (s16 k=0; k<5; k++) {
|
||||||
if (k == 1) {
|
if (k == 1) {
|
||||||
p1.Y -= 3;
|
p1.Y -= 3;
|
||||||
|
b = k<<5;
|
||||||
for (s16 ki=0; ki<4; ki++) {
|
for (s16 ki=0; ki<4; ki++) {
|
||||||
p1.X++;
|
p1.X++;
|
||||||
|
treenode.param1 = b|((trunk_h-3)+ki);
|
||||||
|
if (ki == 3)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
||||||
}
|
}
|
||||||
p1.X--;
|
p1.X--;
|
||||||
}else if (k == 2) {
|
}else if (k == 2) {
|
||||||
p1.X -= 3;
|
p1.X -= 3;
|
||||||
|
b = k<<5;
|
||||||
for (s16 ki=0; ki<4; ki++) {
|
for (s16 ki=0; ki<4; ki++) {
|
||||||
p1.X--;
|
p1.X--;
|
||||||
|
treenode.param1 = b|((trunk_h-3)+ki);
|
||||||
|
if (ki == 3)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
||||||
}
|
}
|
||||||
p1.X++;
|
p1.X++;
|
||||||
}else if (k == 3) {
|
}else if (k == 3) {
|
||||||
p1.X += 3;
|
p1.X += 3;
|
||||||
|
b = k<<5;
|
||||||
for (s16 ki=0; ki<4; ki++) {
|
for (s16 ki=0; ki<4; ki++) {
|
||||||
p1.Z++;
|
p1.Z++;
|
||||||
|
treenode.param1 = b|((trunk_h-3)+ki);
|
||||||
|
if (ki == 3)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
||||||
}
|
}
|
||||||
p1.Z--;
|
p1.Z--;
|
||||||
}else if (k == 4) {
|
}else if (k == 4) {
|
||||||
p1.Z -= 3;
|
p1.Z -= 3;
|
||||||
|
b = k<<5;
|
||||||
for (s16 ki=0; ki<4; ki++) {
|
for (s16 ki=0; ki<4; ki++) {
|
||||||
p1.Z--;
|
p1.Z--;
|
||||||
|
treenode.param1 = b|((trunk_h-3)+ki);
|
||||||
|
if (ki == 3)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
||||||
}
|
}
|
||||||
p1.Z++;
|
p1.Z++;
|
||||||
}else{
|
}else{
|
||||||
|
treenode.param1 = 0x10|trunk_h;
|
||||||
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
vmanip.m_data[vmanip.m_area.index(p1)] = treenode;
|
||||||
}
|
}
|
||||||
// Force leaves at near the end of the trunk
|
// Force leaves at near the end of the trunk
|
||||||
|
|
|
@ -220,7 +220,7 @@ std::vector<NodeBox> SwitchNodeMetadata::getNodeBoxes(MapNode &n)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
return transformNodeBox(n,boxes);
|
return boxes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,11 +31,16 @@ void plantgrowth_tree(ServerEnvironment *env, v3s16 p0)
|
||||||
MapNode treenode(CONTENT_TREE);
|
MapNode treenode(CONTENT_TREE);
|
||||||
MapNode leavesnode(CONTENT_LEAVES);
|
MapNode leavesnode(CONTENT_LEAVES);
|
||||||
Map *map = &env->getMap();
|
Map *map = &env->getMap();
|
||||||
|
uint8_t b = 0xE0;
|
||||||
|
|
||||||
s16 trunk_h = myrand_range(5,6);
|
s16 trunk_h = myrand_range(5,6);
|
||||||
v3s16 p1 = p0;
|
v3s16 p1 = p0;
|
||||||
for (s16 ii=0; ii<trunk_h; ii++) {
|
for (s16 ii=0; ii<trunk_h; ii++) {
|
||||||
|
treenode.param1 = b|ii;
|
||||||
|
if (ii == trunk_h-1)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
map->addNodeWithEvent(p1,treenode);
|
map->addNodeWithEvent(p1,treenode);
|
||||||
|
b = 0;
|
||||||
p1.Y++;
|
p1.Y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,11 +106,16 @@ void plantgrowth_appletree(ServerEnvironment *env, v3s16 p0)
|
||||||
MapNode leavesnode(CONTENT_APPLE_LEAVES);
|
MapNode leavesnode(CONTENT_APPLE_LEAVES);
|
||||||
MapNode applenode(CONTENT_APPLE);
|
MapNode applenode(CONTENT_APPLE);
|
||||||
Map *map = &env->getMap();
|
Map *map = &env->getMap();
|
||||||
|
uint8_t b = 0xE0;
|
||||||
|
|
||||||
s16 trunk_h = myrand_range(4, 5);
|
s16 trunk_h = myrand_range(4, 5);
|
||||||
v3s16 p1 = p0;
|
v3s16 p1 = p0;
|
||||||
for (s16 ii=0; ii<trunk_h; ii++) {
|
for (s16 ii=0; ii<trunk_h; ii++) {
|
||||||
|
treenode.param1 = b|ii;
|
||||||
|
if (ii == trunk_h-1)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
map->addNodeWithEvent(p1,treenode);
|
map->addNodeWithEvent(p1,treenode);
|
||||||
|
b = 0;
|
||||||
p1.Y++;
|
p1.Y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,11 +184,16 @@ void plantgrowth_conifertree(ServerEnvironment *env, v3s16 p0)
|
||||||
MapNode treenode(CONTENT_CONIFER_TREE);
|
MapNode treenode(CONTENT_CONIFER_TREE);
|
||||||
MapNode leavesnode(CONTENT_CONIFER_LEAVES);
|
MapNode leavesnode(CONTENT_CONIFER_LEAVES);
|
||||||
Map *map = &env->getMap();
|
Map *map = &env->getMap();
|
||||||
|
uint8_t b = 0xE0;
|
||||||
|
|
||||||
s16 trunk_h = myrand_range(8, 11);
|
s16 trunk_h = myrand_range(8, 11);
|
||||||
v3s16 p1 = p0;
|
v3s16 p1 = p0;
|
||||||
for (s16 ii=0; ii<trunk_h; ii++) {
|
for (s16 ii=0; ii<trunk_h; ii++) {
|
||||||
|
treenode.param1 = b|ii;
|
||||||
|
if (ii == trunk_h-1)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
map->addNodeWithEvent(p1,treenode);
|
map->addNodeWithEvent(p1,treenode);
|
||||||
|
b = 0;
|
||||||
p1.Y++;
|
p1.Y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,11 +233,16 @@ void plantgrowth_largetree(ServerEnvironment *env, v3s16 p0)
|
||||||
MapNode treenode(CONTENT_TREE);
|
MapNode treenode(CONTENT_TREE);
|
||||||
MapNode leavesnode(CONTENT_LEAVES);
|
MapNode leavesnode(CONTENT_LEAVES);
|
||||||
Map *map = &env->getMap();
|
Map *map = &env->getMap();
|
||||||
|
uint8_t b = 0xE0;
|
||||||
|
|
||||||
s16 trunk_h = myrand_range(10, 12);
|
s16 trunk_h = myrand_range(10, 12);
|
||||||
v3s16 p1 = p0;
|
v3s16 p1 = p0;
|
||||||
for (s16 ii=0; ii<trunk_h; ii++) {
|
for (s16 ii=0; ii<trunk_h; ii++) {
|
||||||
|
treenode.param1 = b|ii;
|
||||||
|
if (ii == trunk_h-1)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
map->addNodeWithEvent(p1,treenode);
|
map->addNodeWithEvent(p1,treenode);
|
||||||
|
b = 0;
|
||||||
p1.Y++;
|
p1.Y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,33 +258,50 @@ void plantgrowth_largetree(ServerEnvironment *env, v3s16 p0)
|
||||||
for (s16 k=0; k<5; k++) {
|
for (s16 k=0; k<5; k++) {
|
||||||
if (k == 1) {
|
if (k == 1) {
|
||||||
p1.Y -= 3;
|
p1.Y -= 3;
|
||||||
|
b = k<<5;
|
||||||
for (s16 ki=0; ki<4; ki++) {
|
for (s16 ki=0; ki<4; ki++) {
|
||||||
p1.X++;
|
p1.X++;
|
||||||
|
treenode.param1 = b|((trunk_h-3)+ki);
|
||||||
|
if (ki == 3)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
map->addNodeWithEvent(p1,treenode);
|
map->addNodeWithEvent(p1,treenode);
|
||||||
}
|
}
|
||||||
p1.X--;
|
p1.X--;
|
||||||
}else if (k == 2) {
|
}else if (k == 2) {
|
||||||
p1.X -= 3;
|
p1.X -= 3;
|
||||||
|
b = k<<5;
|
||||||
for (s16 ki=0; ki<4; ki++) {
|
for (s16 ki=0; ki<4; ki++) {
|
||||||
p1.X--;
|
p1.X--;
|
||||||
|
treenode.param1 = b|((trunk_h-3)+ki);
|
||||||
|
if (ki == 3)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
map->addNodeWithEvent(p1,treenode);
|
map->addNodeWithEvent(p1,treenode);
|
||||||
}
|
}
|
||||||
p1.X++;
|
p1.X++;
|
||||||
}else if (k == 3) {
|
}else if (k == 3) {
|
||||||
p1.X += 3;
|
p1.X += 3;
|
||||||
|
b = k<<5;
|
||||||
for (s16 ki=0; ki<4; ki++) {
|
for (s16 ki=0; ki<4; ki++) {
|
||||||
p1.Z++;
|
p1.Z++;
|
||||||
|
treenode.param1 = b|((trunk_h-3)+ki);
|
||||||
|
if (ki == 3)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
map->addNodeWithEvent(p1,treenode);
|
map->addNodeWithEvent(p1,treenode);
|
||||||
}
|
}
|
||||||
p1.Z--;
|
p1.Z--;
|
||||||
}else if (k == 4) {
|
}else if (k == 4) {
|
||||||
p1.Z -= 3;
|
p1.Z -= 3;
|
||||||
|
b = k<<5;
|
||||||
for (s16 ki=0; ki<4; ki++) {
|
for (s16 ki=0; ki<4; ki++) {
|
||||||
p1.Z--;
|
p1.Z--;
|
||||||
|
treenode.param1 = b|((trunk_h-3)+ki);
|
||||||
|
if (ki == 3)
|
||||||
|
treenode.param1 |= 0x10;
|
||||||
map->addNodeWithEvent(p1,treenode);
|
map->addNodeWithEvent(p1,treenode);
|
||||||
}
|
}
|
||||||
p1.Z++;
|
p1.Z++;
|
||||||
}else{
|
}else{
|
||||||
|
treenode.param1 = 0x10|trunk_h;
|
||||||
map->addNodeWithEvent(p1,treenode);
|
map->addNodeWithEvent(p1,treenode);
|
||||||
}
|
}
|
||||||
// Force leaves at near the end of the trunk
|
// Force leaves at near the end of the trunk
|
||||||
|
@ -319,6 +356,7 @@ void plantgrowth_jungletree(ServerEnvironment *env, v3s16 p0)
|
||||||
MapNode treenode(CONTENT_JUNGLETREE);
|
MapNode treenode(CONTENT_JUNGLETREE);
|
||||||
MapNode leavesnode(CONTENT_JUNGLELEAVES);
|
MapNode leavesnode(CONTENT_JUNGLELEAVES);
|
||||||
Map *map = &env->getMap();
|
Map *map = &env->getMap();
|
||||||
|
uint8_t b = 0xE0;
|
||||||
|
|
||||||
for (s16 x=-1; x<=1; x++) {
|
for (s16 x=-1; x<=1; x++) {
|
||||||
for (s16 z=-1; z<=1; z++) {
|
for (s16 z=-1; z<=1; z++) {
|
||||||
|
@ -339,7 +377,9 @@ void plantgrowth_jungletree(ServerEnvironment *env, v3s16 p0)
|
||||||
s16 trunk_h = myrand_range(8, 12);
|
s16 trunk_h = myrand_range(8, 12);
|
||||||
v3s16 p1 = p0;
|
v3s16 p1 = p0;
|
||||||
for (s16 ii=0; ii<trunk_h; ii++) {
|
for (s16 ii=0; ii<trunk_h; ii++) {
|
||||||
|
treenode.param1 = b|ii;
|
||||||
map->addNodeWithEvent(p1,treenode);
|
map->addNodeWithEvent(p1,treenode);
|
||||||
|
b = 0;
|
||||||
p1.Y++;
|
p1.Y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue