Mapnode: Add rotateAlongYAxisFull supporting 24 facedirs
parent
1adc7bf5c6
commit
a56aedb4ea
|
@ -159,7 +159,8 @@ v3s16 MapNode::getWallMountedDir(INodeDefManager *nodemgr) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) {
|
void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot)
|
||||||
|
{
|
||||||
ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2;
|
ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2;
|
||||||
|
|
||||||
if (cpt2 == CPT2_FACEDIR) {
|
if (cpt2 == CPT2_FACEDIR) {
|
||||||
|
@ -180,6 +181,59 @@ void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MapNode::rotateAlongYAxisFull(INodeDefManager *nodemgr, Rotation rot)
|
||||||
|
{
|
||||||
|
ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2;
|
||||||
|
|
||||||
|
if (cpt2 == CPT2_FACEDIR) {
|
||||||
|
static const u16 rotate_facedir[24 * 4] = {
|
||||||
|
// Table value = rotated facedir
|
||||||
|
// Columns: 0, 90, 180, 270 degrees rotation around vertical axis
|
||||||
|
// Rotation is anticlockwise as seen from above (+Y)
|
||||||
|
|
||||||
|
0, 1, 2, 3, // Initial facedir 0 to 3
|
||||||
|
1, 2, 3, 0,
|
||||||
|
2, 3, 0, 1,
|
||||||
|
3, 0, 1, 2,
|
||||||
|
|
||||||
|
4, 13, 10, 19, // 4 to 7
|
||||||
|
5, 14, 11, 16,
|
||||||
|
6, 15, 8, 17,
|
||||||
|
7, 12, 9, 18,
|
||||||
|
|
||||||
|
8, 17, 6, 15, // 8 to 11
|
||||||
|
9, 18, 7, 12,
|
||||||
|
10, 19, 4, 13,
|
||||||
|
11, 16, 5, 14,
|
||||||
|
|
||||||
|
12, 9, 18, 7, // 12 to 15
|
||||||
|
13, 10, 19, 4,
|
||||||
|
14, 11, 16, 5,
|
||||||
|
15, 8, 17, 6,
|
||||||
|
|
||||||
|
16, 5, 14, 11, // 16 to 19
|
||||||
|
17, 6, 15, 8,
|
||||||
|
18, 7, 12, 9,
|
||||||
|
19, 4, 13, 10,
|
||||||
|
|
||||||
|
20, 23, 22, 21, // 20 to 23
|
||||||
|
21, 20, 23, 22,
|
||||||
|
22, 21, 20, 23,
|
||||||
|
23, 22, 21, 20
|
||||||
|
};
|
||||||
|
u16 index = param2 * 4 + rot;
|
||||||
|
param2 = rotate_facedir[index];
|
||||||
|
} else if (cpt2 == CPT2_WALLMOUNTED) {
|
||||||
|
u8 wmountface = (param2 & 7);
|
||||||
|
if (wmountface <= 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Rotation oldrot = wallmounted_to_rot[wmountface - 2];
|
||||||
|
param2 &= ~7;
|
||||||
|
param2 |= rot_to_wallmounted[(oldrot - rot) & 3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static std::vector<aabb3f> transformNodeBox(const MapNode &n,
|
static std::vector<aabb3f> transformNodeBox(const MapNode &n,
|
||||||
const NodeBox &nodebox, INodeDefManager *nodemgr)
|
const NodeBox &nodebox, INodeDefManager *nodemgr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -236,6 +236,7 @@ struct MapNode
|
||||||
v3s16 getWallMountedDir(INodeDefManager *nodemgr) const;
|
v3s16 getWallMountedDir(INodeDefManager *nodemgr) const;
|
||||||
|
|
||||||
void rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot);
|
void rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot);
|
||||||
|
void rotateAlongYAxisFull(INodeDefManager *nodemgr, Rotation rot);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Gets list of node boxes (used for rendering (NDT_NODEBOX))
|
Gets list of node boxes (used for rendering (NDT_NODEBOX))
|
||||||
|
|
|
@ -167,7 +167,7 @@ void Schematic::blitToVManip(v3s16 p, MMVManip *vm, Rotation rot, bool force_pla
|
||||||
vm->m_data[vi].param1 = 0;
|
vm->m_data[vi].param1 = 0;
|
||||||
|
|
||||||
if (rot)
|
if (rot)
|
||||||
vm->m_data[vi].rotateAlongYAxis(m_ndef, rot);
|
vm->m_data[vi].rotateAlongYAxisFull(m_ndef, rot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
y_map++;
|
y_map++;
|
||||||
|
|
Loading…
Reference in New Issue