forked from oerkki/voxelands
jungle fern
This commit is contained in:
parent
e093eefb05
commit
0ad4b06a1b
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
|
@ -2128,7 +2128,7 @@ void meshgen_plantlike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &se
|
|||
}
|
||||
}
|
||||
|
||||
void meshgen_plantlike_custom(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected)
|
||||
void meshgen_plantlike_fern(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected)
|
||||
{
|
||||
if (data->mesh_detail < 3) {
|
||||
meshgen_plantlike(data,p,n,selected);
|
||||
|
@ -2175,134 +2175,86 @@ void meshgen_plantlike_custom(MeshMakeData *data, v3s16 p, MapNode &n, SelectedN
|
|||
v3f pos = offset+intToFloat(p,BS)+pos_inner;
|
||||
std::vector<video::S3DVertex> vertices;
|
||||
|
||||
video::S3DVertex vb[4] = {
|
||||
video::S3DVertex(-0.5*BS,-0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x0(), tile.texture.y1()),
|
||||
video::S3DVertex( 0.5*BS,-0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x1(), tile.texture.y1()),
|
||||
video::S3DVertex( 0.5*BS, 1.0*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x1(), tile.texture.y0()),
|
||||
video::S3DVertex(-0.5*BS, 1.0*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x0(), tile.texture.y0())
|
||||
};
|
||||
video::S3DVertex vl[8] = {
|
||||
// stalk
|
||||
video::S3DVertex( 0.5*data->m_BS, 0. *data->m_BS,0.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 1.,1.),
|
||||
video::S3DVertex(-0.5*data->m_BS, 0. *data->m_BS,0.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 0.,1.),
|
||||
video::S3DVertex(-0.5*data->m_BS, 0.5 *data->m_BS,1.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 0.,0.3),
|
||||
video::S3DVertex( 0.5*data->m_BS, 0.5 *data->m_BS,1.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 1.,0.3),
|
||||
// end
|
||||
video::S3DVertex( 0.5*data->m_BS, 0.5*data->m_BS, 1.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 1.,0.3),
|
||||
video::S3DVertex(-0.5*data->m_BS, 0.5*data->m_BS, 1.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 0.,0.3),
|
||||
video::S3DVertex(-0.5*data->m_BS, 0.25*data->m_BS,1.5*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 0.,0.),
|
||||
video::S3DVertex( 0.5*data->m_BS, 0.25*data->m_BS,1.5*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 1.,0.)
|
||||
};
|
||||
s16 angle[4] = {
|
||||
45,
|
||||
-45,
|
||||
135,
|
||||
-135
|
||||
};
|
||||
float xo = 0;
|
||||
if (selected.is_coloured || selected.has_crack)
|
||||
xo = 0.005;
|
||||
for (u32 j=0; j<2; j++) {
|
||||
video::S3DVertex v1[4];
|
||||
|
||||
switch (n.getContent()) {
|
||||
case CONTENT_JUNGLEGRASS:
|
||||
{
|
||||
video::S3DVertex vb[4] = {
|
||||
video::S3DVertex(-0.5*BS,-0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x0(), tile.texture.y1()),
|
||||
video::S3DVertex( 0.5*BS,-0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x1(), tile.texture.y1()),
|
||||
video::S3DVertex( 0.5*BS, 1.0*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x1(), tile.texture.y0()),
|
||||
video::S3DVertex(-0.5*BS, 1.0*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x0(), tile.texture.y0())
|
||||
};
|
||||
video::S3DVertex vl[8] = {
|
||||
// stalk
|
||||
video::S3DVertex( 0.5*data->m_BS, 0. *data->m_BS,0.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 1.,1.),
|
||||
video::S3DVertex(-0.5*data->m_BS, 0. *data->m_BS,0.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 0.,1.),
|
||||
video::S3DVertex(-0.5*data->m_BS, 0.5 *data->m_BS,1.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 0.,0.3),
|
||||
video::S3DVertex( 0.5*data->m_BS, 0.5 *data->m_BS,1.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 1.,0.3),
|
||||
// end
|
||||
video::S3DVertex( 0.5*data->m_BS, 0.5*data->m_BS, 1.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 1.,0.3),
|
||||
video::S3DVertex(-0.5*data->m_BS, 0.5*data->m_BS, 1.*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 0.,0.3),
|
||||
video::S3DVertex(-0.5*data->m_BS, 0.25*data->m_BS,1.5*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 0.,0.),
|
||||
video::S3DVertex( 0.5*data->m_BS, 0.25*data->m_BS,1.5*data->m_BS, 0,0,0, video::SColor(255,255,255,255), 1.,0.)
|
||||
};
|
||||
s16 angle[4] = {
|
||||
45,
|
||||
-45,
|
||||
135,
|
||||
-135
|
||||
};
|
||||
float xo = 0;
|
||||
if (selected.is_coloured || selected.has_crack)
|
||||
xo = 0.005;
|
||||
for (u32 j=0; j<2; j++) {
|
||||
video::S3DVertex v1[4];
|
||||
|
||||
for (u16 i=0; i<4; i++) {
|
||||
v1[i] = vb[i];
|
||||
v1[i].Pos.rotateXZBy(angle[j]);
|
||||
v1[i].Pos.X += xo;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
|
||||
if (!selected.is_coloured && !selected.has_crack)
|
||||
continue;
|
||||
for (u16 i=0; i<4; i++) {
|
||||
v1[i].Pos.X -= 0.01;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
for (u16 i=0; i<4; i++) {
|
||||
v1[i] = vb[i];
|
||||
v1[i].Pos.rotateXZBy(angle[j]);
|
||||
v1[i].Pos.X += xo;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
for (u32 j=0; j<4; j++) {
|
||||
video::S3DVertex v1[8];
|
||||
|
||||
for (u16 i=0; i<8; i++) {
|
||||
v1[i] = vl[i];
|
||||
v1[i].Pos.rotateXZBy(angle[j]);
|
||||
v1[i].Pos.Y += xo;
|
||||
v1[i].TCoords *= tile.texture.size;
|
||||
v1[i].TCoords += tile.texture.pos;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
|
||||
if (!selected.is_coloured && !selected.has_crack)
|
||||
continue;
|
||||
for (u16 i=0; i<8; i++) {
|
||||
v1[i].Pos.Y -= 0.01;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
}
|
||||
for (u32 j=0; j<4; j++) {
|
||||
video::S3DVertex v1[8];
|
||||
|
||||
for (u16 i=0; i<8; i++) {
|
||||
v1[i] = vl[i];
|
||||
v1[i].Pos.rotateXZBy(angle[j]+45);
|
||||
v1[i].Pos.Y += xo-(0.25*BS);
|
||||
v1[i].TCoords *= tile.texture.size;
|
||||
v1[i].TCoords += tile.texture.pos;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
|
||||
if (!selected.is_coloured && !selected.has_crack)
|
||||
continue;
|
||||
for (u16 i=0; i<8; i++) {
|
||||
v1[i].Pos.Y -= 0.01;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
if (!selected.is_coloured && !selected.has_crack)
|
||||
continue;
|
||||
for (u16 i=0; i<4; i++) {
|
||||
v1[i].Pos.X -= 0.01;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (selected.is_coloured || selected.has_crack) {
|
||||
for (u32 j=0; j<2; j++) {
|
||||
video::S3DVertex v[4] = {
|
||||
video::S3DVertex(-0.5*BS,-0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x0(), tile.texture.y1()),
|
||||
video::S3DVertex( 0.5*BS,-0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x1(), tile.texture.y1()),
|
||||
video::S3DVertex( 0.5*BS, 0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x1(), tile.texture.y0()),
|
||||
video::S3DVertex(-0.5*BS, 0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x0(), tile.texture.y0())
|
||||
};
|
||||
for (u32 j=0; j<4; j++) {
|
||||
video::S3DVertex v1[8];
|
||||
|
||||
s16 angle = 45;
|
||||
if (j == 1)
|
||||
angle = -45;
|
||||
for (u16 i=0; i<8; i++) {
|
||||
v1[i] = vl[i];
|
||||
v1[i].Pos.rotateXZBy(angle[j]);
|
||||
v1[i].Pos.Y += xo;
|
||||
v1[i].TCoords *= tile.texture.size;
|
||||
v1[i].TCoords += tile.texture.pos;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
|
||||
for (u16 i=0; i<4; i++) {
|
||||
v[i].Pos.rotateXZBy(angle);
|
||||
v[i].Pos.X += 0.005;
|
||||
vertices.push_back(v[i]);
|
||||
v[i].Pos.X -= 0.01;
|
||||
vertices.push_back(v[i]);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for (u32 j=0; j<2; j++) {
|
||||
video::S3DVertex v[4] = {
|
||||
video::S3DVertex(-0.5*BS,-0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x0(), tile.texture.y1()),
|
||||
video::S3DVertex( 0.5*BS,-0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x1(), tile.texture.y1()),
|
||||
video::S3DVertex( 0.5*BS, 0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x1(), tile.texture.y0()),
|
||||
video::S3DVertex(-0.5*BS, 0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), tile.texture.x0(), tile.texture.y0())
|
||||
};
|
||||
if (!selected.is_coloured && !selected.has_crack)
|
||||
continue;
|
||||
for (u16 i=0; i<8; i++) {
|
||||
v1[i].Pos.Y -= 0.01;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
}
|
||||
for (u32 j=0; j<4; j++) {
|
||||
video::S3DVertex v1[8];
|
||||
|
||||
s16 angle = 45;
|
||||
if (j == 1)
|
||||
angle = -45;
|
||||
for (u16 i=0; i<8; i++) {
|
||||
v1[i] = vl[i];
|
||||
v1[i].Pos.rotateXZBy(angle[j]+45);
|
||||
v1[i].Pos.Y += xo-(0.25*BS);
|
||||
v1[i].TCoords *= tile.texture.size;
|
||||
v1[i].TCoords += tile.texture.pos;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
|
||||
for (u16 i=0; i<4; i++) {
|
||||
v[i].Pos.rotateXZBy(angle);
|
||||
vertices.push_back(v[i]);
|
||||
}
|
||||
}
|
||||
if (!selected.is_coloured && !selected.has_crack)
|
||||
continue;
|
||||
for (u16 i=0; i<8; i++) {
|
||||
v1[i].Pos.Y -= 0.01;
|
||||
vertices.push_back(v1[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ void meshgen_cubelike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &sel
|
|||
void meshgen_dirtlike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected);
|
||||
void meshgen_raillike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected);
|
||||
void meshgen_plantlike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected);
|
||||
void meshgen_plantlike_custom(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected);
|
||||
void meshgen_plantlike_fern(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected);
|
||||
void meshgen_liquid(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected);
|
||||
void meshgen_liquid_source(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected);
|
||||
void meshgen_nodebox(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected, bool meta);
|
||||
|
|
|
@ -101,7 +101,8 @@ MapNode mapnode_translate_to_internal(MapNode n_from, u8 version);
|
|||
#define CONTENT_CHAIR_ENDR 0x082
|
||||
#define CONTENT_CHAIR_INNER 0x083
|
||||
#define CONTENT_CHAIR_OUTER 0x084
|
||||
// FREE 0x085-0x7F6
|
||||
#define CONTENT_JUNGLEFERN 0x085
|
||||
// FREE 0x086-0x7F6
|
||||
#define CONTENT_LEAVES_SNOWY 0x7F7
|
||||
#define CONTENT_TRIMMED_LEAVES_AUTUMN 0x7F8
|
||||
#define CONTENT_TRIMMED_LEAVES_WINTER 0x7F9
|
||||
|
|
|
@ -213,7 +213,29 @@ void content_mapnode_plants(bool repeat)
|
|||
f->setAllTextureFlags(0);
|
||||
f->light_propagates = true;
|
||||
f->param_type = CPT_LIGHT;
|
||||
f->draw_type = CDT_PLANTLIKE_CUSTOM;
|
||||
f->draw_type = CDT_PLANTLIKE_FERN;
|
||||
f->air_equivalent = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->walkable = false;
|
||||
f->flammable = 1; // can be replaced by fire if the node under it is set on fire
|
||||
f->fuel_time = 30/32;
|
||||
f->type = CMT_PLANT;
|
||||
f->hardness = 0.20;
|
||||
f->pressure_type = CST_CRUSHABLE;
|
||||
f->suffocation_per_second = 0;
|
||||
lists::add("creative",i);
|
||||
|
||||
i = CONTENT_JUNGLEFERN;
|
||||
f = &content_features(i);
|
||||
f->description = wgettext("Jungle Fern");
|
||||
f->setInventoryTexture("junglegrass.png");
|
||||
f->setAllTextures("junglegrass.png");
|
||||
f->setTexture(1,"leaf_big.png");
|
||||
f->setAllTextureFlags(0);
|
||||
f->light_propagates = true;
|
||||
f->param_type = CPT_LIGHT;
|
||||
f->draw_type = CDT_PLANTLIKE_FERN;
|
||||
f->air_equivalent = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
|
|
|
@ -527,8 +527,8 @@ void MapBlockMesh::generate(MeshMakeData *data, v3s16 camera_offset, JMutex *mut
|
|||
case CDT_PLANTLIKE:
|
||||
meshgen_plantlike(data,p,n,selected);
|
||||
break;
|
||||
case CDT_PLANTLIKE_CUSTOM:
|
||||
meshgen_plantlike_custom(data,p,n,selected);
|
||||
case CDT_PLANTLIKE_FERN:
|
||||
meshgen_plantlike_fern(data,p,n,selected);
|
||||
break;
|
||||
case CDT_LIQUID:
|
||||
meshgen_liquid(data,p,n,selected);
|
||||
|
|
|
@ -2011,16 +2011,14 @@ void make_block(BlockMakeData *data)
|
|||
if (vmanip.m_data[vmanip.m_area.index(p)].getContent() != CONTENT_AIR)
|
||||
continue;
|
||||
if (vmanip.m_area.contains(p)) {
|
||||
if (y > 20 || y < 10) {
|
||||
if (myrand_range(0,20) == 0) {
|
||||
if (y > 20) {
|
||||
vmanip.m_data[vmanip.m_area.index(p)] = CONTENT_TEA;
|
||||
}else{
|
||||
vmanip.m_data[vmanip.m_area.index(p)] = CONTENT_COFFEE;
|
||||
}
|
||||
if ((y > 20 || y < 10) && myrand_range(0,20) == 0) {
|
||||
if (y > 20) {
|
||||
vmanip.m_data[vmanip.m_area.index(p)] = CONTENT_TEA;
|
||||
}else{
|
||||
vmanip.m_data[vmanip.m_area.index(p)] = CONTENT_JUNGLEGRASS;
|
||||
vmanip.m_data[vmanip.m_area.index(p)] = CONTENT_COFFEE;
|
||||
}
|
||||
}else if (myrand_range(0,3) == 0) {
|
||||
vmanip.m_data[vmanip.m_area.index(p)] = CONTENT_JUNGLEFERN;
|
||||
}else{
|
||||
vmanip.m_data[vmanip.m_area.index(p)] = CONTENT_JUNGLEGRASS;
|
||||
}
|
||||
|
|
|
@ -101,7 +101,7 @@ enum ContentDrawType
|
|||
CDT_CUBELIKE,
|
||||
CDT_RAILLIKE,
|
||||
CDT_PLANTLIKE,
|
||||
CDT_PLANTLIKE_CUSTOM,
|
||||
CDT_PLANTLIKE_FERN,
|
||||
CDT_MELONLIKE,
|
||||
CDT_LIQUID,
|
||||
CDT_LIQUID_SOURCE,
|
||||
|
|
|
@ -195,8 +195,8 @@ void SelectionMesh::generate(MeshMakeData *data)
|
|||
case CDT_PLANTLIKE:
|
||||
meshgen_plantlike(data,p,n,selected);
|
||||
break;
|
||||
case CDT_PLANTLIKE_CUSTOM:
|
||||
meshgen_plantlike_custom(data,p,n,selected);
|
||||
case CDT_PLANTLIKE_FERN:
|
||||
meshgen_plantlike_fern(data,p,n,selected);
|
||||
break;
|
||||
case CDT_LIQUID:
|
||||
meshgen_liquid(data,p,n,selected);
|
||||
|
|
Loading…
Reference in New Issue