mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-12 16:21:04 +02:00
118 lines
2.7 KiB
C++
118 lines
2.7 KiB
C++
// CollisionModel.cpp
|
|
//
|
|
|
|
#include "precompiled.h"
|
|
#pragma hdrstop
|
|
|
|
#include "CollisionModel_local.h"
|
|
|
|
/*
|
|
==========================
|
|
idCollisionModelLocal::GetName
|
|
==========================
|
|
*/
|
|
const char* idCollisionModelLocal::GetName(void) const {
|
|
return name.c_str();
|
|
}
|
|
|
|
/*
|
|
==========================
|
|
idCollisionModelLocal::GetBounds
|
|
==========================
|
|
*/
|
|
bool idCollisionModelLocal::GetBounds(idBounds& bounds) const {
|
|
bounds = this->bounds;
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
==========================
|
|
idCollisionModelLocal::GetBounds
|
|
==========================
|
|
*/
|
|
bool idCollisionModelLocal::GetContents(int& contents) const {
|
|
contents = this->contents;
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
==========================
|
|
idCollisionModelLocal::GetBounds
|
|
==========================
|
|
*/
|
|
bool idCollisionModelLocal::GetVertex(int vertexNum, idVec3& vertex) const {
|
|
if (vertexNum < 0 || vertexNum >= numVertices) {
|
|
common->Printf("idCollisionModelManagerLocal::GetModelVertex: invalid vertex number\n");
|
|
return false;
|
|
}
|
|
|
|
vertex = vertices[vertexNum].p;
|
|
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
==========================
|
|
idCollisionModelLocal::GetBounds
|
|
==========================
|
|
*/
|
|
bool idCollisionModelLocal::GetEdge(int edgeNum, idVec3& start, idVec3& end) const {
|
|
edgeNum = abs(edgeNum);
|
|
if (edgeNum >= numEdges) {
|
|
common->Printf("idCollisionModelManagerLocal::GetModelEdge: invalid edge number\n");
|
|
return false;
|
|
}
|
|
|
|
start = vertices[edges[edgeNum].vertexNum[0]].p;
|
|
end = vertices[edges[edgeNum].vertexNum[1]].p;
|
|
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
==========================
|
|
idCollisionModelLocal::GetPolygon
|
|
==========================
|
|
*/
|
|
bool idCollisionModelLocal::GetPolygon(int polygonNum, idFixedWinding& winding) const {
|
|
int i, edgeNum;
|
|
cm_polygon_t* poly;
|
|
|
|
poly = *reinterpret_cast<cm_polygon_t**>(&polygonNum);
|
|
winding.Clear();
|
|
for (i = 0; i < poly->numEdges; i++) {
|
|
edgeNum = poly->edges[i];
|
|
winding += vertices[edges[abs(edgeNum)].vertexNum[INTSIGNBITSET(edgeNum)]].p;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
================
|
|
idCollisionModelLocal::DrawModel
|
|
================
|
|
*/
|
|
void idCollisionModelLocal::DrawModel(const idVec3& modelOrigin, const idMat3& modelAxis, const idVec3& viewOrigin, const float radius) {
|
|
idVec3 viewPos;
|
|
|
|
if (cm_drawColor.IsModified()) {
|
|
sscanf(cm_drawColor.GetString(), "%f %f %f %f", &cm_color.x, &cm_color.y, &cm_color.z, &cm_color.w);
|
|
cm_drawColor.ClearModified();
|
|
}
|
|
|
|
viewPos = (viewOrigin - modelOrigin) * modelAxis.Transpose();
|
|
collisionModelManagerLocal.DrawNodePolygons(this, node, modelOrigin, modelAxis, viewPos, radius);
|
|
}
|
|
|
|
|
|
/*
|
|
================
|
|
idCollisionModelLocal::ModelInfo
|
|
================
|
|
*/
|
|
void idCollisionModelLocal::ModelInfo(void) {
|
|
idCollisionModelLocal modelInfo;
|
|
|
|
// collisionModelManagerLocal.PrintModelInfo(this);
|
|
} |