mirror of https://github.com/yaz0r/FITD.git
174 lines
3.2 KiB
C++
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;
|
|
}
|