EMI: Rotate overworld sprites again

This commit is contained in:
Dries Harnie 2013-11-26 21:06:34 +01:00 committed by Dries Harnie
parent b1a910c800
commit 46e7cf29cd
2 changed files with 36 additions and 12 deletions

View file

@ -601,17 +601,30 @@ void GfxOpenGL::drawSprite(const Sprite *sprite) {
GLdouble modelview[16];
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
// We want screen-aligned sprites so reset the rotation part of the matrix.
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == j) {
modelview[i * 4 + j] = 1.0f;
} else {
modelview[i * 4 + j] = 0.0f;
if (g_grim->getGameType() == GType_MONKEY4) {
const Math::Quaternion quat =
_currentActor->isInOverworld()
? Math::Quaternion::fromEuler(0, 0, _currentActor->getYaw())
: Math::Quaternion::fromEuler(0, 0, _currentActor->getRoll());
Math::Matrix4 act = quat.toMatrix();
act.transpose();
act(3,0) = modelview[12];
act(3,1) = modelview[13];
act(3,2) = modelview[14];
glLoadMatrixf(act.getData());
} else {
// We want screen-aligned sprites so reset the rotation part of the matrix.
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == j) {
modelview[i * 4 + j] = 1.0f;
} else {
modelview[i * 4 + j] = 0.0f;
}
}
}
glLoadMatrixd(modelview);
}
glLoadMatrixd(modelview);
glAlphaFunc(GL_GREATER, 0.5);
glEnable(GL_ALPHA_TEST);