Display collision volumes for actors that don't have a body

This commit is contained in:
yaz0r 2025-08-01 23:08:30 -07:00
parent 228f0856c4
commit 543e22bc78
2 changed files with 77 additions and 75 deletions

View File

@ -3071,18 +3071,6 @@ void AllRedraw(int flagFlip)
getHotPoint(actorPtr->hotPointID, bodyPtr, &actorPtr->hotPoint); getHotPoint(actorPtr->hotPointID, bodyPtr, &actorPtr->hotPoint);
} }
} }
///////////////////////////////////// DEBUG
#ifdef FITD_DEBUGGER
// if(debuggerVar_drawModelZv)
{
if (backgroundMode == backgroundModeEnum_3D)
{
drawZv(actorPtr);
}
}
#endif
/////////////////////////////////////
} }
} }
@ -3128,6 +3116,20 @@ void AllRedraw(int flagFlip)
#ifdef FITD_DEBUGGER #ifdef FITD_DEBUGGER
{ {
if (backgroundMode == backgroundModeEnum_3D)
{
for (int i = 0; i < NUM_MAX_OBJECT; i++)
{
tObject* actorPtr = &ListObjets[i];
if (actorPtr->indexInWorld != -1)
{
drawZv(actorPtr);
}
}
}
/////////////////////////////////////
for (int i = 0; i < getNumberOfRoom(); i++) for (int i = 0; i < getNumberOfRoom(); i++)
{ {
if (hardColDisplayMode != displayNone) { if (hardColDisplayMode != displayNone) {

View File

@ -95,9 +95,9 @@ int boneRotateZSin;
char primBuffer[30000]; char primBuffer[30000];
int renderVar3; int renderVar3;
#ifndef AITD_UE4 #ifndef AITD_UE4
void fillpoly(s16 * datas, int n, char c); void fillpoly(s16 * datas, int n, char c);
#endif #endif
/* /*
@ -246,7 +246,7 @@ void RotateList(point3dStruct* pointPtr, int numOfPoint)
point.z = z; point.z = z;
} }
} }
void RotateGroupeOptimise(sGroup* ptr) void RotateGroupeOptimise(sGroup* ptr)
{ {
if (ptr->m_numGroup) // if group number is 0 if (ptr->m_numGroup) // if group number is 0
@ -257,7 +257,7 @@ void RotateGroupeOptimise(sGroup* ptr)
RotateList(pointBuffer.data() + baseBone, numPoints); RotateList(pointBuffer.data() + baseBone, numPoints);
} }
} }
void RotateGroupe(sGroup* ptr) void RotateGroupe(sGroup* ptr)
{ {
int baseBone = ptr->m_start; int baseBone = ptr->m_start;
@ -280,8 +280,8 @@ void RotateGroupe(sGroup* ptr)
ptr++; ptr++;
} while (--temp2); } while (--temp2);
} }
void TranslateGroupe(int transX, int transY, int transZ, sGroup* ptr) void TranslateGroupe(int transX, int transY, int transZ, sGroup* ptr)
{ {
for (int i = 0; i < ptr->m_numVertices; i++) for (int i = 0; i < ptr->m_numVertices; i++)
@ -292,7 +292,7 @@ void TranslateGroupe(int transX, int transY, int transZ, sGroup* ptr)
point.z += transZ; point.z += transZ;
} }
} }
void ZoomGroupe(int zoomX, int zoomY, int zoomZ, sGroup* ptr) void ZoomGroupe(int zoomX, int zoomY, int zoomZ, sGroup* ptr)
{ {
for (int i = 0; i < ptr->m_numVertices; i++) for (int i = 0; i < ptr->m_numVertices; i++)
@ -305,24 +305,24 @@ void ZoomGroupe(int zoomX, int zoomY, int zoomZ, sGroup* ptr)
} }
int AnimNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody) int AnimNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
{ {
renderX = x - translateX; renderX = x - translateX;
renderY = y; renderY = y;
renderZ = z - translateZ; renderZ = z - translateZ;
ASSERT(pBody->m_vertices.size()<NUM_MAX_POINT_IN_POINT_BUFFER); ASSERT(pBody->m_vertices.size()<NUM_MAX_POINT_IN_POINT_BUFFER);
for (int i = 0; i < pBody->m_vertices.size(); i++) for (int i = 0; i < pBody->m_vertices.size(); i++)
{ {
pointBuffer[i] = pBody->m_vertices[i]; pointBuffer[i] = pBody->m_vertices[i];
} }
numOfPoints = pBody->m_vertices.size(); numOfPoints = pBody->m_vertices.size();
numOfBones = pBody->m_groupOrder.size(); numOfBones = pBody->m_groupOrder.size();
ASSERT(numOfBones<NUM_MAX_BONES); ASSERT(numOfBones<NUM_MAX_BONES);
if(pBody->m_flags & INFO_OPTIMISE) if(pBody->m_flags & INFO_OPTIMISE)
{ {
for(int i=0;i<pBody->m_groupOrder.size();i++) for(int i=0;i<pBody->m_groupOrder.size();i++)
{ {
int boneDataOffset = pBody->m_groupOrder[i]; int boneDataOffset = pBody->m_groupOrder[i];
@ -334,7 +334,7 @@ int AnimNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
if(pGroup->m_state.m_delta.x || pGroup->m_state.m_delta.y || pGroup->m_state.m_delta.z) if(pGroup->m_state.m_delta.x || pGroup->m_state.m_delta.y || pGroup->m_state.m_delta.z)
{ {
TranslateGroupe(pGroup->m_state.m_delta.x, pGroup->m_state.m_delta.y, pGroup->m_state.m_delta.z, pGroup); TranslateGroupe(pGroup->m_state.m_delta.x, pGroup->m_state.m_delta.y, pGroup->m_state.m_delta.z, pGroup);
} }
break; break;
case 2: case 2:
if (pGroup->m_state.m_delta.x || pGroup->m_state.m_delta.y || pGroup->m_state.m_delta.z) if (pGroup->m_state.m_delta.x || pGroup->m_state.m_delta.y || pGroup->m_state.m_delta.z)
@ -389,8 +389,8 @@ int AnimNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
} }
for(int i=0;i<pBody->m_groups.size();i++) for(int i=0;i<pBody->m_groups.size();i++)
{ {
sGroup* pGroup = &pBody->m_groups[i]; sGroup* pGroup = &pBody->m_groups[i];
for(int j=0;j< pGroup->m_numVertices;j++) for(int j=0;j< pGroup->m_numVertices;j++)
{ {
pointBuffer[pGroup->m_start + j].x += pointBuffer[pGroup->m_baseVertices].x; pointBuffer[pGroup->m_start + j].x += pointBuffer[pGroup->m_baseVertices].x;
@ -415,13 +415,13 @@ int AnimNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
X += renderX; X += renderX;
Y += renderY; Y += renderY;
Z += renderZ; Z += renderZ;
#if defined(AITD_UE4) #if defined(AITD_UE4)
*(outPtr++) = (s16)X; *(outPtr++) = (s16)X;
*(outPtr++) = (s16)Y; *(outPtr++) = (s16)Y;
*(outPtr++) = (s16)Z; *(outPtr++) = (s16)Z;
#else #else
if(Y>10000) // height clamp if(Y>10000) // height clamp
{ {
@ -438,7 +438,7 @@ int AnimNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
*(outPtr++) = (s16)X; *(outPtr++) = (s16)X;
*(outPtr++) = (s16)Y; *(outPtr++) = (s16)Y;
*(outPtr++) = (s16)Z; *(outPtr++) = (s16)Z;
} }
#endif #endif
} }
@ -456,11 +456,11 @@ int AnimNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
Y = ptr[1]; Y = ptr[1];
Z = ptr[2]; Z = ptr[2];
ptr+=3; ptr+=3;
#if defined(AITD_UE4) #if defined(AITD_UE4)
*(outPtr2++) = X; *(outPtr2++) = X;
*(outPtr2++) = Y; *(outPtr2++) = Y;
*(outPtr2++) = Z; *(outPtr2++) = Z;
#else #else
Z += cameraPerspective; Z += cameraPerspective;
@ -495,7 +495,7 @@ int AnimNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
*(outPtr2++) = Z; *(outPtr2++) = Z;
} }
#endif #endif
k--; k--;
if(k==0) if(k==0)
@ -517,7 +517,7 @@ z - cameraZ
*/ */
int RotateNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody) int RotateNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
{ {
float* outPtr; float* outPtr;
renderX = x - translateX; renderX = x - translateX;
@ -543,7 +543,7 @@ int RotateNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
} }
outPtr = renderPointList; outPtr = renderPointList;
for(int i=0; i<pBody->m_vertices.size(); i++) for(int i=0; i<pBody->m_vertices.size(); i++)
{ {
float X = pBody->m_vertices[i].x; float X = pBody->m_vertices[i].x;
@ -582,12 +582,12 @@ int RotateNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
X += renderX; X += renderX;
Y += renderY; Y += renderY;
Z += renderZ; Z += renderZ;
#if defined(AITD_UE4) #if defined(AITD_UE4)
*(outPtr++) = X; *(outPtr++) = X;
*(outPtr++) = Y; *(outPtr++) = Y;
*(outPtr++) = Z; *(outPtr++) = Z;
#else #else
if(Y>10000) // height clamp if(Y>10000) // height clamp
{ {
@ -647,8 +647,8 @@ void primFunctionDefault(int primType,char** ptr,char** out)
assert(0); assert(0);
} }
void processPrim_Line(int primType, sPrimitive* ptr, char** out) void processPrim_Line(int primType, sPrimitive* ptr, char** out)
{ {
primEntryStruct* pCurrentPrimEntry = &primTable[positionInPrimEntry]; primEntryStruct* pCurrentPrimEntry = &primTable[positionInPrimEntry];
ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY); ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY);
@ -676,19 +676,19 @@ void processPrim_Line(int primType, sPrimitive* ptr, char** out)
depth = pCurrentPrimEntry->vertices[i].Z; depth = pCurrentPrimEntry->vertices[i].Z;
} }
#if !defined(AITD_UE4) #if !defined(AITD_UE4)
if (depth > 100) if (depth > 100)
#endif #endif
{ {
positionInPrimEntry++; positionInPrimEntry++;
numOfPrimitiveToRender++; numOfPrimitiveToRender++;
ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY); ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY);
} }
} }
void processPrim_Poly(int primType, sPrimitive* ptr, char** out) void processPrim_Poly(int primType, sPrimitive* ptr, char** out)
{ {
primEntryStruct* pCurrentPrimEntry = &primTable[positionInPrimEntry]; primEntryStruct* pCurrentPrimEntry = &primTable[positionInPrimEntry];
@ -717,19 +717,19 @@ void processPrim_Poly(int primType, sPrimitive* ptr, char** out)
depth = pCurrentPrimEntry->vertices[i].Z; depth = pCurrentPrimEntry->vertices[i].Z;
} }
#if !defined(AITD_UE4) #if !defined(AITD_UE4)
if (depth > 100) if (depth > 100)
#endif #endif
{ {
positionInPrimEntry++; positionInPrimEntry++;
numOfPrimitiveToRender++; numOfPrimitiveToRender++;
ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY); ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY);
} }
} }
void processPrim_Point(primTypeEnum primType, sPrimitive* ptr, char** out) void processPrim_Point(primTypeEnum primType, sPrimitive* ptr, char** out)
{ {
primEntryStruct* pCurrentPrimEntry = &primTable[positionInPrimEntry]; primEntryStruct* pCurrentPrimEntry = &primTable[positionInPrimEntry];
@ -751,20 +751,20 @@ void processPrim_Point(primTypeEnum primType, sPrimitive* ptr, char** out)
depth = pCurrentPrimEntry->vertices[0].Z; depth = pCurrentPrimEntry->vertices[0].Z;
} }
#if !defined(AITD_UE4) #if !defined(AITD_UE4)
if (depth > 100) if (depth > 100)
#endif #endif
{ {
positionInPrimEntry++; positionInPrimEntry++;
numOfPrimitiveToRender++; numOfPrimitiveToRender++;
ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY); ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY);
} }
} }
void processPrim_Sphere(int primType, sPrimitive* ptr, char** out) void processPrim_Sphere(int primType, sPrimitive* ptr, char** out)
{ {
primEntryStruct* pCurrentPrimEntry = &primTable[positionInPrimEntry]; primEntryStruct* pCurrentPrimEntry = &primTable[positionInPrimEntry];
ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY); ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY);
@ -786,16 +786,16 @@ void processPrim_Sphere(int primType, sPrimitive* ptr, char** out)
depth = pCurrentPrimEntry->vertices[0].Z; depth = pCurrentPrimEntry->vertices[0].Z;
} }
#if !defined(AITD_UE4) #if !defined(AITD_UE4)
if (depth > 100) if (depth > 100)
#endif #endif
{ {
positionInPrimEntry++; positionInPrimEntry++;
numOfPrimitiveToRender++; numOfPrimitiveToRender++;
ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY); ASSERT(positionInPrimEntry < NUM_MAX_PRIM_ENTRY);
} }
} }
void primType5(int primType, char** ptr, char** out) // draw out of hardClip void primType5(int primType, char** ptr, char** out) // draw out of hardClip
@ -934,7 +934,7 @@ int AffObjet(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
modelFlags = pBody->m_flags; modelFlags = pBody->m_flags;
if(modelFlags&INFO_ANIM) if(modelFlags&INFO_ANIM)
{ {
if(!AnimNuage(x,y,z,alpha,beta,gamma, pBody)) if(!AnimNuage(x,y,z,alpha,beta,gamma, pBody))
{ {
BBox3D3 = -32000; BBox3D3 = -32000;
@ -982,7 +982,7 @@ int AffObjet(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
// create the list of all primitives to render // create the list of all primitives to render
for(i=0;i<numPrim;i++) for(i=0;i<numPrim;i++)
{ {
sPrimitive* pPrimitive = &pBody->m_primitives[i]; sPrimitive* pPrimitive = &pBody->m_primitives[i];
primTypeEnum primType = pPrimitive->m_type; primTypeEnum primType = pPrimitive->m_type;
@ -1088,7 +1088,7 @@ int AffObjet(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
} }
void computeScreenBox(int x, int y, int z, int alpha, int beta, int gamma, sBody* bodyPtr) void computeScreenBox(int x, int y, int z, int alpha, int beta, int gamma, sBody* bodyPtr)
{ {
BBox3D1 = 0x7FFF; BBox3D1 = 0x7FFF;
BBox3D2 = 0x7FFF; BBox3D2 = 0x7FFF;
@ -1102,9 +1102,9 @@ void computeScreenBox(int x, int y, int z, int alpha, int beta, int gamma, sBody
renderVar2 = renderBuffer; renderVar2 = renderBuffer;
modelFlags = bodyPtr->m_flags; modelFlags = bodyPtr->m_flags;
if(modelFlags&INFO_ANIM) if(modelFlags&INFO_ANIM)
{ {
AnimNuage(x,y,z,alpha,beta,gamma, bodyPtr); AnimNuage(x,y,z,alpha,beta,gamma, bodyPtr);
} }
} }