forked from oerkki/voxelands
try new look stairs and slabs
This commit is contained in:
parent
53bd6828b5
commit
67495df15e
|
@ -424,6 +424,8 @@ void Camera::wield(const InventoryItem* item)
|
|||
|| content_features(content).draw_type == CDT_NODEBOX_META
|
||||
|| content_features(content).draw_type == CDT_FENCELIKE
|
||||
|| content_features(content).draw_type == CDT_WALLLIKE
|
||||
|| content_features(content).draw_type == CDT_STAIRLIKE
|
||||
|| content_features(content).draw_type == CDT_SLABLIKE
|
||||
)
|
||||
&& content_features(content).wield_nodebox == true
|
||||
) {
|
||||
|
|
|
@ -3456,6 +3456,179 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||
}
|
||||
}
|
||||
break;
|
||||
case CDT_STAIRLIKE:
|
||||
{
|
||||
static const v3s16 tile_dirs[6] = {
|
||||
v3s16(0, 1, 0),
|
||||
v3s16(0, -1, 0),
|
||||
v3s16(1, 0, 0),
|
||||
v3s16(-1, 0, 0),
|
||||
v3s16(0, 0, 1),
|
||||
v3s16(0, 0, -1)
|
||||
};
|
||||
|
||||
TileSpec tiles[6];
|
||||
NodeMetadata *meta = data->m_env->getMap().getNodeMetadata(p+blockpos_nodes);
|
||||
for (int i=0; i<6; i++) {
|
||||
// Handles facedir rotation for textures
|
||||
tiles[i] = getNodeTile(n,p,tile_dirs[i],data->m_temp_mods,meta);
|
||||
}
|
||||
video::SColor c[8];
|
||||
getLights(blockpos_nodes+p,c,data,smooth_lighting);
|
||||
|
||||
std::vector<NodeBox> boxes;
|
||||
boxes.push_back(NodeBox(
|
||||
-0.5*BS,
|
||||
-0.5*BS,
|
||||
-0.25*BS,
|
||||
0.5*BS,
|
||||
0.,
|
||||
0.5*BS
|
||||
));
|
||||
boxes.push_back(NodeBox(
|
||||
-0.5*BS,
|
||||
0.,
|
||||
0.,
|
||||
0.5*BS,
|
||||
0.25*BS,
|
||||
0.5*BS
|
||||
));
|
||||
boxes.push_back(NodeBox(
|
||||
-0.5*BS,
|
||||
0.25*BS,
|
||||
0.25*BS,
|
||||
0.5*BS,
|
||||
0.5*BS,
|
||||
0.5*BS
|
||||
));
|
||||
v3f pos = intToFloat(p, BS);
|
||||
s16 rot = n.getRotationAngle();
|
||||
v3s16 front(0,0,-1);
|
||||
v3s16 left(-1,0,0);
|
||||
v3s16 right(1,0,0);
|
||||
front.rotateXZBy(rot);
|
||||
left.rotateXZBy(rot);
|
||||
right.rotateXZBy(rot);
|
||||
MapNode nf = data->m_vmanip.getNodeRO(blockpos_nodes + p + front);
|
||||
MapNode nl = data->m_vmanip.getNodeRO(blockpos_nodes + p + left);
|
||||
MapNode nr = data->m_vmanip.getNodeRO(blockpos_nodes + p + right);
|
||||
if (
|
||||
content_features(nf).draw_type == CDT_SLABLIKE
|
||||
|| (
|
||||
content_features(nf).draw_type == CDT_STAIRLIKE
|
||||
&& (
|
||||
content_features(nl).draw_type == CDT_SLABLIKE
|
||||
|| content_features(nl).draw_type == CDT_STAIRLIKE
|
||||
) && (
|
||||
content_features(nr).draw_type == CDT_SLABLIKE
|
||||
|| content_features(nr).draw_type == CDT_STAIRLIKE
|
||||
)
|
||||
)
|
||||
) {
|
||||
boxes.push_back(NodeBox(
|
||||
-0.5*BS,
|
||||
-0.5*BS,
|
||||
-0.5*BS,
|
||||
0.5*BS,
|
||||
0.,
|
||||
-0.25*BS
|
||||
));
|
||||
}else{
|
||||
boxes.push_back(NodeBox(
|
||||
-0.5*BS,
|
||||
-0.5*BS,
|
||||
-0.5*BS,
|
||||
0.5*BS,
|
||||
-0.25*BS,
|
||||
-0.25*BS
|
||||
));
|
||||
}
|
||||
|
||||
for (std::vector<NodeBox>::iterator i = boxes.begin(); i != boxes.end(); i++) {
|
||||
NodeBox box = *i;
|
||||
if (rot) {
|
||||
box.m_box.MinEdge.rotateXZBy(rot);
|
||||
box.m_box.MaxEdge.rotateXZBy(rot);
|
||||
box.m_box.repair();
|
||||
}
|
||||
// Compute texture coords
|
||||
f32 tx1 = (box.m_box.MinEdge.X/BS)+0.5;
|
||||
f32 ty1 = (box.m_box.MinEdge.Y/BS)+0.5;
|
||||
f32 tz1 = (box.m_box.MinEdge.Z/BS)+0.5;
|
||||
f32 tx2 = (box.m_box.MaxEdge.X/BS)+0.5;
|
||||
f32 ty2 = (box.m_box.MaxEdge.Y/BS)+0.5;
|
||||
f32 tz2 = (box.m_box.MaxEdge.Z/BS)+0.5;
|
||||
f32 txc[24] = {
|
||||
// up
|
||||
tx1, 1-tz2, tx2, 1-tz1,
|
||||
// down
|
||||
tx1, tz1, tx2, tz2,
|
||||
// right
|
||||
tz1, 1-ty2, tz2, 1-ty1,
|
||||
// left
|
||||
1-tz2, 1-ty2, 1-tz1, 1-ty1,
|
||||
// back
|
||||
1-tx2, 1-ty2, 1-tx1, 1-ty1,
|
||||
// front
|
||||
tx1, 1-ty2, tx2, 1-ty1,
|
||||
};
|
||||
makeRotatedCuboid(&collector, pos, box.m_box, tiles, 6, c, txc, box.m_angle, box.m_centre);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CDT_SLABLIKE:
|
||||
{
|
||||
static const v3s16 tile_dirs[6] = {
|
||||
v3s16(0, 1, 0),
|
||||
v3s16(0, -1, 0),
|
||||
v3s16(1, 0, 0),
|
||||
v3s16(-1, 0, 0),
|
||||
v3s16(0, 0, 1),
|
||||
v3s16(0, 0, -1)
|
||||
};
|
||||
|
||||
TileSpec tiles[6];
|
||||
NodeMetadata *meta = data->m_env->getMap().getNodeMetadata(p+blockpos_nodes);
|
||||
for (int i = 0; i < 6; i++) {
|
||||
// Handles facedir rotation for textures
|
||||
tiles[i] = getNodeTile(n,p,tile_dirs[i],data->m_temp_mods,meta);
|
||||
}
|
||||
video::SColor c[8];
|
||||
getLights(blockpos_nodes+p,c,data,smooth_lighting);
|
||||
|
||||
NodeBox boxes[2] = {
|
||||
NodeBox(-0.5*BS,-0.5*BS,-0.5*BS,0.5*BS,-0.0625*BS,0.5*BS),
|
||||
NodeBox(-0.375*BS,-0.0625*BS,-0.375*BS,0.375*BS,0,0.375*BS)
|
||||
};
|
||||
v3f pos = intToFloat(p, BS);
|
||||
|
||||
for (u16 i=0; i<2; i++) {
|
||||
NodeBox box = boxes[i];
|
||||
// Compute texture coords
|
||||
f32 tx1 = (box.m_box.MinEdge.X/BS)+0.5;
|
||||
f32 ty1 = (box.m_box.MinEdge.Y/BS)+0.5;
|
||||
f32 tz1 = (box.m_box.MinEdge.Z/BS)+0.5;
|
||||
f32 tx2 = (box.m_box.MaxEdge.X/BS)+0.5;
|
||||
f32 ty2 = (box.m_box.MaxEdge.Y/BS)+0.5;
|
||||
f32 tz2 = (box.m_box.MaxEdge.Z/BS)+0.5;
|
||||
f32 txc[24] = {
|
||||
// up
|
||||
tx1, 1-tz2, tx2, 1-tz1,
|
||||
// down
|
||||
tx1, tz1, tx2, tz2,
|
||||
// right
|
||||
tz1, 1-ty2, tz2, 1-ty1,
|
||||
// left
|
||||
1-tz2, 1-ty2, 1-tz1, 1-ty1,
|
||||
// back
|
||||
1-tx2, 1-ty2, 1-tx1, 1-ty1,
|
||||
// front
|
||||
tx1, 1-ty2, tx2, 1-ty1,
|
||||
};
|
||||
makeRotatedCuboid(&collector, pos, box.m_box, tiles, 6, c, txc, box.m_angle, box.m_centre);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CDT_NODEBOX:
|
||||
case CDT_NODEBOX_META:
|
||||
{
|
||||
|
|
|
@ -37,7 +37,7 @@ void content_mapnode_slab(bool repeat)
|
|||
f->description = wgettext("Rough Stone Slab");
|
||||
f->setAllTextures("roughstone.png");
|
||||
f->param_type = CPT_NONE;
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_SLABLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
|
@ -56,7 +56,7 @@ void content_mapnode_slab(bool repeat)
|
|||
f->description = wgettext("Cobble Stone Slab");
|
||||
f->setAllTextures("cobble.png");
|
||||
f->param_type = CPT_NONE;
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_SLABLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
|
@ -75,7 +75,7 @@ void content_mapnode_slab(bool repeat)
|
|||
f->description = wgettext("Mossy Cobble Stone Slab");
|
||||
f->setAllTextures("mossycobble.png");
|
||||
f->param_type = CPT_NONE;
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_SLABLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
|
@ -93,7 +93,7 @@ void content_mapnode_slab(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->description = wgettext("Stone Slab");
|
||||
f->setAllTextures("stone.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_SLABLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
|
@ -169,7 +169,7 @@ void content_mapnode_slab(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->description = wgettext("Sand Stone Slab");
|
||||
f->setAllTextures("sandstone.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_SLABLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_SAND)+" 4";
|
||||
|
|
|
@ -38,7 +38,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f->description = wgettext("Rough Stone Stair");
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("roughstone.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
|
@ -55,7 +55,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f->description = wgettext("Cobble Stone Stair");
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("cobble.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
|
@ -72,7 +72,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f->description = wgettext("Mossy Cobble Stone Stair");
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("mossycobble.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
|
@ -89,7 +89,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f->description = wgettext("Stone Stair");
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("stone.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->often_contains_mineral = true;
|
||||
|
@ -106,7 +106,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->description = wgettext("Wood Stair");
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->setAllTextures("wood.png");
|
||||
f->is_ground_content = true;
|
||||
|
@ -126,7 +126,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f->description = wgettext("Jungle Wood Stair");
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("junglewood.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
//f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
|
@ -145,7 +145,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f->description = wgettext("Brick Stair");
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("brick.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("CraftItem clay_brick 4");
|
||||
|
@ -162,7 +162,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f->description = wgettext("Sand Stone Stair");
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("sandstone.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_SAND)+" 4";
|
||||
|
@ -179,7 +179,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("roughstone.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_ROUGHSTONE_STAIR)+" 1";
|
||||
|
@ -193,7 +193,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("cobble.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_ROUGHSTONE_STAIR)+" 1";
|
||||
|
@ -207,7 +207,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("mossycobble.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_MOSSYCOBBLE_STAIR)+" 1";
|
||||
|
@ -221,7 +221,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("stone.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_STONE_STAIR)+" 1";
|
||||
|
@ -235,7 +235,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("wood.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_WOOD_STAIR)+" 1";
|
||||
|
@ -251,7 +251,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("junglewood.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
//f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_JUNGLE_STAIR)+" 1";
|
||||
|
@ -267,7 +267,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("brick.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("CraftItem clay_brick 4");
|
||||
|
@ -281,7 +281,7 @@ void content_mapnode_stair(bool repeat)
|
|||
f = &content_features(i);
|
||||
f->param_type = CPT_FACEDIR_SIMPLE;
|
||||
f->setAllTextures("sandstone.png");
|
||||
f->draw_type = CDT_NODEBOX;
|
||||
f->draw_type = CDT_STAIRLIKE;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(CONTENT_SAND)+" 4";
|
||||
|
|
|
@ -27,9 +27,9 @@ void content_nodebox_stair(ContentFeatures *f)
|
|||
f->setNodeBox(NodeBox(
|
||||
-0.5*BS,
|
||||
-0.5*BS,
|
||||
-0.5*BS,
|
||||
-0.25*BS,
|
||||
0.5*BS,
|
||||
0,
|
||||
0.,
|
||||
0.5*BS
|
||||
));
|
||||
f->addNodeBox(NodeBox(
|
||||
|
@ -37,9 +37,25 @@ void content_nodebox_stair(ContentFeatures *f)
|
|||
0.,
|
||||
0.,
|
||||
0.5*BS,
|
||||
0.25*BS,
|
||||
0.5*BS
|
||||
));
|
||||
f->addNodeBox(NodeBox(
|
||||
-0.5*BS,
|
||||
0.25*BS,
|
||||
0.25*BS,
|
||||
0.5*BS,
|
||||
0.5*BS,
|
||||
0.5*BS
|
||||
));
|
||||
f->addNodeBox(NodeBox(
|
||||
-0.5*BS,
|
||||
-0.5*BS,
|
||||
-0.5*BS,
|
||||
0.5*BS,
|
||||
-0.25*BS,
|
||||
-0.25*BS
|
||||
));
|
||||
}
|
||||
|
||||
void content_nodebox_stairud(ContentFeatures *f)
|
||||
|
|
|
@ -399,6 +399,36 @@ v3s16 MapNode::getRotation(v3s16 dir)
|
|||
return dir;
|
||||
}
|
||||
|
||||
s16 MapNode::getRotationAngle()
|
||||
{
|
||||
int facedir = 0;
|
||||
ContentFeatures &f = content_features(*this);
|
||||
if (
|
||||
f.param2_type == CPT_FACEDIR_SIMPLE
|
||||
|| f.param2_type == CPT_FACEDIR_WALLMOUNT
|
||||
) {
|
||||
facedir = param2&0x0F;
|
||||
}else if (
|
||||
f.param_type == CPT_FACEDIR_SIMPLE
|
||||
|| f.param_type == CPT_FACEDIR_WALLMOUNT
|
||||
) {
|
||||
facedir = param1;
|
||||
}
|
||||
switch (facedir) {
|
||||
case 1:
|
||||
return -90;
|
||||
break;
|
||||
case 2:
|
||||
return 180;
|
||||
break;
|
||||
case 3:
|
||||
return 90;
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef SERVER
|
||||
TileSpec MapNode::getTileFrom(v3s16 dir, TileSpec raw_spec[6])
|
||||
{
|
||||
|
|
|
@ -117,7 +117,9 @@ enum ContentDrawType
|
|||
CDT_ROOFLIKE,
|
||||
CDT_NODEBOX_META,
|
||||
CDT_WIRELIKE,
|
||||
CDT_3DWIRELIKE
|
||||
CDT_3DWIRELIKE,
|
||||
CDT_STAIRLIKE,
|
||||
CDT_SLABLIKE
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -962,6 +964,7 @@ struct MapNode
|
|||
assert(0);
|
||||
}
|
||||
v3s16 getRotation(v3s16 dir = v3s16(1,1,1));
|
||||
s16 getRotationAngle();
|
||||
|
||||
// In mapnode.cpp
|
||||
#ifndef SERVER
|
||||
|
|
Loading…
Reference in New Issue