FITD/FitdLib/zv.cpp

174 lines
3.2 KiB
C++

#include "common.h"
void GiveZVObjet(sBody* bodyPtr, ZVStruct* zvPtr)
{
zvPtr->ZVX1 = bodyPtr->m_zv.ZVX1;
zvPtr->ZVX2 = bodyPtr->m_zv.ZVX2;
zvPtr->ZVY1 = bodyPtr->m_zv.ZVY1;
zvPtr->ZVY2 = bodyPtr->m_zv.ZVY2;
zvPtr->ZVZ1 = bodyPtr->m_zv.ZVZ1;
zvPtr->ZVZ2 = bodyPtr->m_zv.ZVZ2;
}
void getZvCube(sBody* bodyPtr, ZVStruct* zvPtr)
{
GiveZVObjet(bodyPtr, zvPtr);
zvPtr->ZVZ2 = zvPtr->ZVX2 = (zvPtr->ZVX2 + zvPtr->ZVZ2)/2;
zvPtr->ZVX1 = zvPtr->ZVZ1 = -zvPtr->ZVZ2;
}
void makeDefaultZV(ZVStruct* zvPtr)
{
zvPtr->ZVX1 = -100;
zvPtr->ZVX2 = 100;
zvPtr->ZVY1 = -2000;
zvPtr->ZVY2 = 0;
zvPtr->ZVZ1 = -100;
zvPtr->ZVZ2 = 100;
}
void getZvMax(sBody* bodyPtr, ZVStruct* zvPtr)
{
int x1;
int x2;
int z1;
int z2;
GiveZVObjet(bodyPtr,zvPtr);
x1 = zvPtr->ZVX1;
x2 = zvPtr->ZVX2;
z1 = zvPtr->ZVZ1;
z2 = zvPtr->ZVZ2;
x2 = - x1 + x2;
z2 = - z1 + z2;
if(x2 < z2)
{
x2 = z2;
}
x2 /= 2;
zvPtr->ZVX1 = -x2;
zvPtr->ZVX2 = x2;
zvPtr->ZVZ1 = -x2;
zvPtr->ZVZ2 = x2;
}
void zvRotSub(int X, int Y, int Z, int alpha, int beta, int gamma)
{
if (alpha || beta || gamma)
{
setupPointRotate(alpha, beta, gamma);
pointRotate(X, Y, Z, &animMoveX, &animMoveY, &animMoveZ);
}
else
{
animMoveX = X;
animMoveY = Y;
animMoveZ = Z;
}
}
void getZvRot(sBody* bodyPtr, ZVStruct* zvPtr, int alpha, int beta, int gamma)
{
int X1 = 32000;
int Y1 = 32000;
int Z1 = 32000;
int X2 = -32000;
int Y2 = -32000;
int Z2 = -32000;
int i;
int tempX;
int tempY;
int tempZ;
GiveZVObjet(bodyPtr, zvPtr);
for (i = 0; i < 8; i++)
{
switch (i)
{
case 0:
{
tempX = zvPtr->ZVX1;
tempY = zvPtr->ZVY1;
tempZ = zvPtr->ZVZ1;
break;
}
case 1:
{
tempZ = zvPtr->ZVZ2;
break;
}
case 2:
{
tempX = zvPtr->ZVX2;
break;
}
case 3:
{
tempZ = zvPtr->ZVZ1;
break;
}
case 4:
{
tempY = zvPtr->ZVY2;
break;
}
case 5:
{
tempX = zvPtr->ZVX1;
break;
}
case 6:
{
tempZ = zvPtr->ZVZ2;
break;
}
case 7:
{
tempX = zvPtr->ZVX2;
break;
}
}
zvRotSub(tempX, tempY, tempZ, alpha, beta, gamma);
if (animMoveX < X1)
X1 = animMoveX;
if (animMoveX > X2)
X2 = animMoveX;
if (animMoveY < Y1)
Y1 = animMoveY;
if (animMoveY > Y2)
Y2 = animMoveY;
if (animMoveZ < Z1)
Z1 = animMoveZ;
if (animMoveZ > Z2)
Z2 = animMoveZ;
}
zvPtr->ZVX1 = X1;
zvPtr->ZVX2 = X2;
zvPtr->ZVY1 = Y1;
zvPtr->ZVY2 = Y2;
zvPtr->ZVZ1 = Z1;
zvPtr->ZVZ2 = Z2;
}