diff --git a/data/textures/dirt.png b/data/textures/dirt.png index 9dfa451..4b57329 100644 Binary files a/data/textures/dirt.png and b/data/textures/dirt.png differ diff --git a/data/textures/farm_seeds.png b/data/textures/farm_seeds.png new file mode 100644 index 0000000..2df14d3 Binary files /dev/null and b/data/textures/farm_seeds.png differ diff --git a/data/textures/farm_seeds_beetroot.png b/data/textures/farm_seeds_beetroot.png index 364b824..2c23eb0 100644 Binary files a/data/textures/farm_seeds_beetroot.png and b/data/textures/farm_seeds_beetroot.png differ diff --git a/data/textures/farm_seeds_carrot.png b/data/textures/farm_seeds_carrot.png index 0eb1263..00e4564 100644 Binary files a/data/textures/farm_seeds_carrot.png and b/data/textures/farm_seeds_carrot.png differ diff --git a/data/textures/farm_seeds_central.png b/data/textures/farm_seeds_central.png new file mode 100644 index 0000000..8a06966 Binary files /dev/null and b/data/textures/farm_seeds_central.png differ diff --git a/data/textures/farm_seeds_cotton.png b/data/textures/farm_seeds_cotton.png index 40e11d2..de2301a 100644 Binary files a/data/textures/farm_seeds_cotton.png and b/data/textures/farm_seeds_cotton.png differ diff --git a/data/textures/farm_seeds_grape.png b/data/textures/farm_seeds_grape.png index 9f6e8d7..8599037 100644 Binary files a/data/textures/farm_seeds_grape.png and b/data/textures/farm_seeds_grape.png differ diff --git a/data/textures/farm_seeds_melon.png b/data/textures/farm_seeds_melon.png index ca191e3..ca31f4d 100644 Binary files a/data/textures/farm_seeds_melon.png and b/data/textures/farm_seeds_melon.png differ diff --git a/data/textures/farm_seeds_potato.png b/data/textures/farm_seeds_potato.png index c41b51b..804819f 100644 Binary files a/data/textures/farm_seeds_potato.png and b/data/textures/farm_seeds_potato.png differ diff --git a/data/textures/farm_seeds_pumpkin.png b/data/textures/farm_seeds_pumpkin.png index 13b2928..35f0ff5 100644 Binary files a/data/textures/farm_seeds_pumpkin.png and b/data/textures/farm_seeds_pumpkin.png differ diff --git a/data/textures/farm_seeds_tea.png b/data/textures/farm_seeds_tea.png index d1351f0..59df65b 100644 Binary files a/data/textures/farm_seeds_tea.png and b/data/textures/farm_seeds_tea.png differ diff --git a/data/textures/farm_seeds_wheat.png b/data/textures/farm_seeds_wheat.png index 1aab8fe..f3e3085 100644 Binary files a/data/textures/farm_seeds_wheat.png and b/data/textures/farm_seeds_wheat.png differ diff --git a/data/textures/farm_wheat.png b/data/textures/farm_wheat.png index 58257bb..7972234 100644 Binary files a/data/textures/farm_wheat.png and b/data/textures/farm_wheat.png differ diff --git a/src/content_mapblock.cpp b/src/content_mapblock.cpp index 94e62bd..92f8a4f 100644 --- a/src/content_mapblock.cpp +++ b/src/content_mapblock.cpp @@ -2498,6 +2498,120 @@ void meshgen_plantlike_fern(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNod } } +void meshgen_croplike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected) +{ + ContentFeatures *f = &content_features(n); + TileSpec tile = getNodeTile(n,p,v3s16(0,1,0),selected); + v3f offset(0,0,0); + if (data->m_vmanip.getNodeRO(data->m_blockpos_nodes + p + v3s16(0,-1,0)).getContent() == CONTENT_FLOWER_POT) + offset = v3f(0,-0.25*data->m_BS,0); + + f32 v0 = 0.; + f32 v1 = 1.; + f32 h = 0.5; + + if (f->plantlike_tiled) { + if (f->param2_type == CPT_PLANTGROWTH && n.param2 != 0 && !f->plantgrowth_on_trellis) { + h = (0.0625*(float)n.param2); + if (data->m_vmanip.getNodeRO(data->m_blockpos_nodes + p + v3s16(0,-1,0)).getContent() != n.getContent()) { + v0 = (1.0-h)/2; + }else{ + v0 = ((1.0-h)/2)+0.25; + v1 = 0.75; + } + h -= 0.5; + }else if (data->m_vmanip.getNodeRO(data->m_blockpos_nodes + p + v3s16(0,-1,0)).getContent() != n.getContent()) { + v0 = 0.5; + }else if (data->m_vmanip.getNodeRO(data->m_blockpos_nodes + p + v3s16(0,1,0)).getContent() != n.getContent()) { + v1 = 0.5; + }else{ + v0 = 0.25; + v1 = 0.75; + } + }else if (f->param2_type == CPT_PLANTGROWTH) { + if (n.param2 != 0 && !f->plantgrowth_on_trellis) { + h = (0.0625*(float)n.param2); + v0 = (1.0-h); + h -= 0.5; + } + } + + v3f pos = offset+intToFloat(p,BS); + + if (selected.is_coloured || selected.has_crack) { + //for (u32 j=0; j<2; j++) { + //video::S3DVertex vertices[4] = { + //video::S3DVertex(-0.5*BS,-0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), 0.,v1), + //video::S3DVertex( 0.5*BS,-0.5*BS,0., 0,0,0, video::SColor(255,255,255,255), 1.,v1), + //video::S3DVertex( 0.5*BS, h*BS,0., 0,0,0, video::SColor(255,255,255,255), 1.,v0), + //video::S3DVertex(-0.5*BS, h*BS,0., 0,0,0, video::SColor(255,255,255,255), 0.,v0) + //}; + + //s16 angle = 45; + //if (j == 1) + //angle = -45; + + //for (u16 i=0; i<4; i++) { + //vertices[i].Pos.rotateXZBy(angle); + //vertices[i].TCoords *= tile.texture.size; + //vertices[i].TCoords += tile.texture.pos; + //} + + //u16 indices[] = {0,1,2,2,3,0}; + //std::vector colours; + //if (selected.is_coloured) { + //meshgen_selected_lights(colours,255,4); + //}else{ + //meshgen_lights(data,n,p,colours,255,v3s16(0,0,0),4,vertices); + //} + + //for (u16 i=0; i<4; i++) { + //vertices[i].Pos += pos; + //vertices[i].Pos.X += 0.005; + //} + + //data->append(tile, vertices, 4, indices, 6, colours); + + //for (u16 i=0; i<4; i++) { + //vertices[i].Pos.X -= 0.01; + //} + + //data->append(tile, vertices, 4, indices, 6, colours); + //} + }else{ + for (u32 j=0; j<4; j++) { + video::S3DVertex vertices[4] = { + video::S3DVertex(-0.5*BS,-0.5*BS,-0.25*BS, 0,0,0, video::SColor(255,255,255,255), 0.,v1), + video::S3DVertex( 0.5*BS,-0.5*BS,-0.25*BS, 0,0,0, video::SColor(255,255,255,255), 1.,v1), + video::S3DVertex( 0.5*BS, h*BS,-0.25*BS, 0,0,0, video::SColor(255,255,255,255), 1.,v0), + video::S3DVertex(-0.5*BS, h*BS,-0.25*BS, 0,0,0, video::SColor(255,255,255,255), 0.,v0) + }; + + s16 angle = j*90; + + for (u16 i=0; i<4; i++) { + vertices[i].Pos.rotateXZBy(angle); + vertices[i].TCoords *= tile.texture.size; + vertices[i].TCoords += tile.texture.pos; + } + + u16 indices[] = {0,1,2,2,3,0}; + std::vector colours; + if (selected.is_coloured) { + meshgen_selected_lights(colours,255,4); + }else{ + meshgen_lights(data,n,p,colours,255,v3s16(0,0,0),4,vertices); + } + + for (u16 i=0; i<4; i++) { + vertices[i].Pos += pos; + } + + data->append(tile, vertices, 4, indices, 6, colours); + } + } +} + void meshgen_liquid(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected) { ContentFeatures *f = &content_features(n); diff --git a/src/content_mapblock.h b/src/content_mapblock.h index b21141d..0b4586a 100644 --- a/src/content_mapblock.h +++ b/src/content_mapblock.h @@ -37,6 +37,7 @@ void meshgen_dirtlike(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &sel 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_fern(MeshMakeData *data, v3s16 p, MapNode &n, SelectedNode &selected); +void meshgen_croplike(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); diff --git a/src/content_mapnode_farm.cpp b/src/content_mapnode_farm.cpp index c5c00b6..a762d71 100644 --- a/src/content_mapnode_farm.cpp +++ b/src/content_mapnode_farm.cpp @@ -36,8 +36,9 @@ void content_mapnode_farm(bool repeat) i = CONTENT_FARM_DIRT; f = &content_features(i); f->description = gettext("Farm Dirt"); - f->setAllTextures("dirt.png"); - f->setInventoryTextureCube("dirt.png","dirt.png","dirt.png"); + f->setAllTextures("mud.png"); + f->setTexture(0,"dirt.png"); + f->setInventoryTextureCube("dirt.png","mud.png","mud.png"); f->draw_type = CDT_CUBELIKE; f->is_ground_content = true; f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_MUD)+" 1"; @@ -87,8 +88,9 @@ void content_mapnode_farm(bool repeat) i = CONTENT_SEEDS_WHEAT; f = &content_features(i); f->description = gettext("Wheat Seeds"); - f->setAllTextures("farm_seeds_wheat.png"); - f->draw_type = CDT_PLANTLIKE; + f->setAllTextures("farm_seeds.png"); + f->setInventoryTexture("farm_seeds_wheat.png"); + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->setAllTextureFlags(0); f->walkable = false; @@ -107,7 +109,8 @@ void content_mapnode_farm(bool repeat) i = CONTENT_SEEDS_MELON; f = &content_features(i); f->description = gettext("Melon Seeds"); - f->setAllTextures("farm_seeds_melon.png"); + f->setAllTextures("farm_seeds_central.png"); + f->setInventoryTexture("farm_seeds_melon.png"); f->draw_type = CDT_PLANTLIKE; f->param_type = CPT_LIGHT; f->setAllTextureFlags(0); @@ -129,7 +132,8 @@ void content_mapnode_farm(bool repeat) i = CONTENT_SEEDS_PUMPKIN; f = &content_features(i); f->description = gettext("Pumpkin Seeds"); - f->setAllTextures("farm_seeds_pumpkin.png"); + f->setAllTextures("farm_seeds_central.png"); + f->setInventoryTexture("farm_seeds_pumpkin.png"); f->draw_type = CDT_PLANTLIKE; f->param_type = CPT_LIGHT; f->setAllTextureFlags(0); @@ -151,8 +155,9 @@ void content_mapnode_farm(bool repeat) i = CONTENT_SEEDS_POTATO; f = &content_features(i); f->description = gettext("Potato Seeds"); - f->setAllTextures("farm_seeds_potato.png"); - f->draw_type = CDT_PLANTLIKE; + f->setAllTextures("farm_seeds.png"); + f->setInventoryTexture("farm_seeds_potato.png"); + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->setAllTextureFlags(0); f->walkable = false; @@ -173,8 +178,9 @@ void content_mapnode_farm(bool repeat) i = CONTENT_SEEDS_CARROT; f = &content_features(i); f->description = gettext("Carrot Seeds"); - f->setAllTextures("farm_seeds_carrot.png"); - f->draw_type = CDT_PLANTLIKE; + f->setAllTextures("farm_seeds.png"); + f->setInventoryTexture("farm_seeds_carrot.png"); + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->setAllTextureFlags(0); f->walkable = false; @@ -195,8 +201,9 @@ void content_mapnode_farm(bool repeat) i = CONTENT_SEEDS_BEETROOT; f = &content_features(i); f->description = gettext("Beetroot Seeds"); - f->setAllTextures("farm_seeds_beetroot.png"); - f->draw_type = CDT_PLANTLIKE; + f->setAllTextures("farm_seeds.png"); + f->setInventoryTexture("farm_seeds_beetroot.png"); + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->setAllTextureFlags(0); f->walkable = false; @@ -217,8 +224,9 @@ void content_mapnode_farm(bool repeat) i = CONTENT_SEEDS_GRAPE; f = &content_features(i); f->description = gettext("Grape Seeds"); - f->setAllTextures("farm_seeds_grape.png"); - f->draw_type = CDT_PLANTLIKE; + f->setAllTextures("farm_seeds.png"); + f->setInventoryTexture("farm_seeds_grape.png"); + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->setAllTextureFlags(0); f->walkable = false; @@ -239,8 +247,9 @@ void content_mapnode_farm(bool repeat) i = CONTENT_SEEDS_COTTON; f = &content_features(i); f->description = gettext("Cotton Seeds"); - f->setAllTextures("farm_seeds_cotton.png"); - f->draw_type = CDT_PLANTLIKE; + f->setAllTextures("farm_seeds.png"); + f->setInventoryTexture("farm_seeds_cotton.png"); + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->setAllTextureFlags(0); f->walkable = false; @@ -260,7 +269,7 @@ void content_mapnode_farm(bool repeat) f = &content_features(i); f->description = gettext("Wheat"); f->setAllTextures("farm_wheat.png"); - f->draw_type = CDT_PLANTLIKE; + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->param2_type = CPT_PLANTGROWTH; f->setAllTextureFlags(0); @@ -342,7 +351,7 @@ void content_mapnode_farm(bool repeat) f = &content_features(i); f->description = gettext("Potato"); f->setAllTextures("farm_potato.png"); - f->draw_type = CDT_PLANTLIKE; + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->param2_type = CPT_PLANTGROWTH; f->setAllTextureFlags(0); @@ -362,7 +371,7 @@ void content_mapnode_farm(bool repeat) f = &content_features(i); f->description = gettext("Carrot"); f->setAllTextures("farm_carrot.png"); - f->draw_type = CDT_PLANTLIKE; + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->param2_type = CPT_PLANTGROWTH; f->setAllTextureFlags(0); @@ -382,7 +391,7 @@ void content_mapnode_farm(bool repeat) f = &content_features(i); f->description = gettext("Beetroot"); f->setAllTextures("farm_beetroot.png"); - f->draw_type = CDT_PLANTLIKE; + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->param2_type = CPT_PLANTGROWTH; f->setAllTextureFlags(0); @@ -402,7 +411,7 @@ void content_mapnode_farm(bool repeat) f = &content_features(i); f->description = gettext("Grape"); f->setAllTextures("farm_grapevine.png"); - f->draw_type = CDT_PLANTLIKE; + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->param2_type = CPT_PLANTGROWTH; f->setAllTextureFlags(0); @@ -423,7 +432,7 @@ void content_mapnode_farm(bool repeat) f = &content_features(i); f->description = gettext("Cotton"); f->setAllTextures("farm_cotton.png"); - f->draw_type = CDT_PLANTLIKE; + f->draw_type = CDT_CROPLIKE; f->param_type = CPT_LIGHT; f->param2_type = CPT_PLANTGROWTH; f->setAllTextureFlags(0); diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index 1444f11..d3b1e0f 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -606,6 +606,9 @@ void MapBlockMesh::generate(MeshMakeData *data, v3s16 camera_offset, JMutex *mut case CDT_PLANTLIKE_FERN: meshgen_plantlike_fern(data,p,n,selected); break; + case CDT_CROPLIKE: + meshgen_croplike(data,p,n,selected); + break; case CDT_LIQUID: meshgen_liquid(data,p,n,selected); break; diff --git a/src/mapnode.h b/src/mapnode.h index 8f3fa35..a89657f 100644 --- a/src/mapnode.h +++ b/src/mapnode.h @@ -105,6 +105,7 @@ enum ContentDrawType CDT_RAILLIKE, CDT_PLANTLIKE, CDT_PLANTLIKE_FERN, + CDT_CROPLIKE, CDT_MELONLIKE, CDT_LIQUID, CDT_LIQUID_SOURCE, diff --git a/src/selection_mesh.cpp b/src/selection_mesh.cpp index dd5dbeb..83174fc 100644 --- a/src/selection_mesh.cpp +++ b/src/selection_mesh.cpp @@ -239,6 +239,9 @@ void SelectionMesh::generate(MeshMakeData *data) case CDT_PLANTLIKE_FERN: meshgen_plantlike_fern(data,p,n,selected); break; + case CDT_CROPLIKE: + meshgen_croplike(data,p,n,selected); + break; case CDT_LIQUID: meshgen_liquid(data,p,n,selected); break;