forked from Mirrorlandia_minetest/minetest
Mapnode: Replace rotateAlongYAxis with improved version
Get facedir by using lowest 5 bits of param2 and limiting to 23 More robust, frees up higher param2 bits for other uses Change lookup table and table index to u8
This commit is contained in:
parent
0bf1984d2c
commit
8aaae7db05
@ -164,29 +164,7 @@ 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) {
|
||||||
if (param2 >= 4)
|
static const u8 rotate_facedir[24 * 4] = {
|
||||||
return;
|
|
||||||
|
|
||||||
u8 newrot = param2 & 3;
|
|
||||||
param2 &= ~3;
|
|
||||||
param2 |= (newrot + rot) & 3;
|
|
||||||
} 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];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
// Table value = rotated facedir
|
||||||
// Columns: 0, 90, 180, 270 degrees rotation around vertical axis
|
// Columns: 0, 90, 180, 270 degrees rotation around vertical axis
|
||||||
// Rotation is anticlockwise as seen from above (+Y)
|
// Rotation is anticlockwise as seen from above (+Y)
|
||||||
@ -221,8 +199,10 @@ void MapNode::rotateAlongYAxisFull(INodeDefManager *nodemgr, Rotation rot)
|
|||||||
22, 21, 20, 23,
|
22, 21, 20, 23,
|
||||||
23, 22, 21, 20
|
23, 22, 21, 20
|
||||||
};
|
};
|
||||||
u16 index = param2 * 4 + rot;
|
u8 facedir = (param2 & 31) % 24;
|
||||||
param2 = rotate_facedir[index];
|
u8 index = facedir * 4 + rot;
|
||||||
|
param2 &= ~31;
|
||||||
|
param2 |= rotate_facedir[index];
|
||||||
} else if (cpt2 == CPT2_WALLMOUNTED) {
|
} else if (cpt2 == CPT2_WALLMOUNTED) {
|
||||||
u8 wmountface = (param2 & 7);
|
u8 wmountface = (param2 & 7);
|
||||||
if (wmountface <= 1)
|
if (wmountface <= 1)
|
||||||
|
@ -236,7 +236,6 @@ 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].rotateAlongYAxisFull(m_ndef, rot);
|
vm->m_data[vi].rotateAlongYAxis(m_ndef, rot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
y_map++;
|
y_map++;
|
||||||
|
Loading…
Reference in New Issue
Block a user