1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Degrotate support for mesh nodes (#7840)

This commit is contained in:
Vitaliy 2021-03-30 01:25:11 +03:00 committed by GitHub
parent fde2785fe3
commit 3b78a22371
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 113 additions and 13 deletions

View file

@ -177,6 +177,16 @@ v3s16 MapNode::getWallMountedDir(const NodeDefManager *nodemgr) const
}
}
u8 MapNode::getDegRotate(const NodeDefManager *nodemgr) const
{
const ContentFeatures &f = nodemgr->get(*this);
if (f.param_type_2 == CPT2_DEGROTATE)
return getParam2() % 240;
if (f.param_type_2 == CPT2_COLORED_DEGROTATE)
return 10 * ((getParam2() & 0x1F) % 24);
return 0;
}
void MapNode::rotateAlongYAxis(const NodeDefManager *nodemgr, Rotation rot)
{
ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2;
@ -230,6 +240,17 @@ void MapNode::rotateAlongYAxis(const NodeDefManager *nodemgr, Rotation rot)
Rotation oldrot = wallmounted_to_rot[wmountface - 2];
param2 &= ~7;
param2 |= rot_to_wallmounted[(oldrot - rot) & 3];
} else if (cpt2 == CPT2_DEGROTATE) {
int angle = param2; // in 1.5°
angle += 60 * rot; // dont do that on u8
angle %= 240;
param2 = angle;
} else if (cpt2 == CPT2_COLORED_DEGROTATE) {
int angle = param2 & 0x1F; // in 15°
int color = param2 & 0xE0;
angle += 6 * rot;
angle %= 24;
param2 = color | angle;
}
}