- use car cosmetics for hubcap positions

This commit is contained in:
Ilya Shurumov 2021-03-25 18:33:05 +06:00
parent d789ae4937
commit 2431c7425f

View File

@ -244,29 +244,6 @@ int gHubcapTime = 0;
void InitHubcap(void) void InitHubcap(void)
{ {
gHubcapTime = Random2(1) & 0x7ff; gHubcapTime = Random2(1) & 0x7ff;
gHubcap.Present[0] = 1;
gHubcap.Present[1] = 1;
gHubcap.Present[2] = 1;
gHubcap.Present[3] = 1;
// right
gHubcap.Offset[0].vx = 205;
gHubcap.Offset[0].vy = -7;
gHubcap.Offset[0].vz = 290;
gHubcap.Offset[1].vx = 205;
gHubcap.Offset[1].vy = -7;
gHubcap.Offset[1].vz = -275;
// left
gHubcap.Offset[2].vx = -205;
gHubcap.Offset[2].vy = -7;
gHubcap.Offset[2].vz = 290;
gHubcap.Offset[3].vx = -205;
gHubcap.Offset[3].vy = -7;
gHubcap.Offset[3].vz = -275;
} }
@ -276,17 +253,21 @@ void LoseHubcap(int car, int Hubcap, int Velocity)
SVECTOR InitialLocalAngle = { 0, 0, 10 }; SVECTOR InitialLocalAngle = { 0, 0, 10 };
CAR_DATA* cp; CAR_DATA* cp;
SVECTOR* wheelDisp;
cp = &car_data[car]; cp = &car_data[car];
// check speed and if hubcap lost // check speed and if hubcap lost
if (cp->hd.wheel_speed < 0 || (cp->ap.flags & 1 << Hubcap)) if (cp->hd.wheel_speed < 0 || (cp->ap.flags & 1 << Hubcap))
return; return;
wheelDisp = &cp->ap.carCos->wheelDisp[Hubcap];
cp->ap.flags |= (1 << Hubcap); // [A] cars now hold hubcaps cp->ap.flags |= (1 << Hubcap); // [A] cars now hold hubcaps
gHubcap.Position.vx = gHubcap.Offset[Hubcap].vx; gHubcap.Position.vx = wheelDisp->vx;
gHubcap.Position.vy = gHubcap.Offset[Hubcap].vy; gHubcap.Position.vy = wheelDisp->vy;
gHubcap.Position.vz = gHubcap.Offset[Hubcap].vz; gHubcap.Position.vz = wheelDisp->vz;
SetRotMatrix(&cp->hd.where); SetRotMatrix(&cp->hd.where);
_MatrixRotate(&gHubcap.Position); _MatrixRotate(&gHubcap.Position);
@ -312,9 +293,10 @@ void LoseHubcap(int car, int Hubcap, int Velocity)
} }
gHubcap.Duration = 100; gHubcap.Duration = 100;
gHubcap.Direction.vx = FIXEDH(FIXEDH(cp->st.n.angularVelocity[1]) * gHubcap.Offset[Hubcap].vz) + FIXEDH(cp->st.n.linearVelocity[0]);
gHubcap.Direction.vx = FIXEDH(FIXEDH(cp->st.n.angularVelocity[1]) * wheelDisp->vz) + FIXEDH(cp->st.n.linearVelocity[0]);
gHubcap.Direction.vy = FIXEDH(cp->st.n.linearVelocity[1]); gHubcap.Direction.vy = FIXEDH(cp->st.n.linearVelocity[1]);
gHubcap.Direction.vz = FIXEDH(-FIXEDH(cp->st.n.angularVelocity[1]) * gHubcap.Offset[Hubcap].vx) + FIXEDH(cp->st.n.linearVelocity[2]); gHubcap.Direction.vz = FIXEDH(-FIXEDH(cp->st.n.angularVelocity[1]) * wheelDisp->vx) + FIXEDH(cp->st.n.linearVelocity[2]);
} }