mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-06-06 08:42:35 +00:00
Bux fixes for the clipmap linker
This commit is contained in:
@@ -123,23 +123,18 @@ namespace BSP
|
|||||||
void ClipMapLinker::loadSubModelCollision(clipMap_t* clipMap, BSPData* bsp)
|
void ClipMapLinker::loadSubModelCollision(clipMap_t* clipMap, BSPData* bsp)
|
||||||
{
|
{
|
||||||
// Submodels are used for the world and map ent collision (triggers, bomb zones, etc)
|
// Submodels are used for the world and map ent collision (triggers, bomb zones, etc)
|
||||||
auto gfxWorldAsset = m_context.LoadDependency<AssetGfxWorld>(bsp->bspName);
|
|
||||||
assert(gfxWorldAsset != nullptr);
|
|
||||||
GfxWorld* gfxWorld = gfxWorldAsset->Asset();
|
|
||||||
|
|
||||||
// Right now there is only one submodel, the world sub model
|
|
||||||
assert(gfxWorld->modelCount == 1);
|
|
||||||
|
|
||||||
clipMap->numSubModels = 1;
|
clipMap->numSubModels = 1;
|
||||||
clipMap->cmodels = m_memory.Alloc<cmodel_t>(clipMap->numSubModels);
|
clipMap->cmodels = m_memory.Alloc<cmodel_t>(clipMap->numSubModels);
|
||||||
|
for (unsigned int vertIdx = 0; vertIdx < clipMap->vertCount; vertIdx++)
|
||||||
GfxBrushModel* gfxModel = &gfxWorld->models[0];
|
{
|
||||||
clipMap->cmodels[0].mins.x = gfxModel->bounds[0].x;
|
vec3_t vertex = clipMap->verts[vertIdx];
|
||||||
clipMap->cmodels[0].mins.y = gfxModel->bounds[0].y;
|
if (vertIdx == 0)
|
||||||
clipMap->cmodels[0].mins.z = gfxModel->bounds[0].z;
|
{
|
||||||
clipMap->cmodels[0].maxs.x = gfxModel->bounds[1].x;
|
clipMap->cmodels[0].mins = vertex;
|
||||||
clipMap->cmodels[0].maxs.y = gfxModel->bounds[1].y;
|
clipMap->cmodels[0].maxs = vertex;
|
||||||
clipMap->cmodels[0].maxs.z = gfxModel->bounds[1].z;
|
}
|
||||||
|
BSPUtil::updateAABBWithPoint(vertex, clipMap->cmodels[0].mins, clipMap->cmodels[0].maxs);
|
||||||
|
}
|
||||||
clipMap->cmodels[0].radius = BSPUtil::distBetweenPoints(clipMap->cmodels[0].mins, clipMap->cmodels[0].maxs) / 2;
|
clipMap->cmodels[0].radius = BSPUtil::distBetweenPoints(clipMap->cmodels[0].mins, clipMap->cmodels[0].maxs) / 2;
|
||||||
|
|
||||||
// The world sub model has no leafs associated with it
|
// The world sub model has no leafs associated with it
|
||||||
@@ -155,8 +150,7 @@ namespace BSP
|
|||||||
clipMap->cmodels[0].leaf.maxs.z = 0.0f;
|
clipMap->cmodels[0].leaf.maxs.z = 0.0f;
|
||||||
clipMap->cmodels[0].leaf.leafBrushNode = 0;
|
clipMap->cmodels[0].leaf.leafBrushNode = 0;
|
||||||
clipMap->cmodels[0].leaf.cluster = 0;
|
clipMap->cmodels[0].leaf.cluster = 0;
|
||||||
|
clipMap->cmodels[0].info = nullptr;
|
||||||
clipMap->cmodels[0].info = nullptr; // always set to 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClipMapLinker::loadXModelCollision(clipMap_t* clipMap)
|
void ClipMapLinker::loadXModelCollision(clipMap_t* clipMap)
|
||||||
@@ -632,8 +626,6 @@ namespace BSP
|
|||||||
|
|
||||||
loadRopesAndConstraints(clipMap);
|
loadRopesAndConstraints(clipMap);
|
||||||
|
|
||||||
loadSubModelCollision(clipMap, bsp);
|
|
||||||
|
|
||||||
loadDynEnts(clipMap);
|
loadDynEnts(clipMap);
|
||||||
|
|
||||||
loadXModelCollision(clipMap);
|
loadXModelCollision(clipMap);
|
||||||
@@ -646,15 +638,17 @@ namespace BSP
|
|||||||
clipMap->info.materials[0].contentFlags = BSPEditableConstants::MATERIAL_CONTENT_FLAGS;
|
clipMap->info.materials[0].contentFlags = BSPEditableConstants::MATERIAL_CONTENT_FLAGS;
|
||||||
clipMap->info.materials[0].surfaceFlags = BSPEditableConstants::MATERIAL_SURFACE_FLAGS;
|
clipMap->info.materials[0].surfaceFlags = BSPEditableConstants::MATERIAL_SURFACE_FLAGS;
|
||||||
|
|
||||||
|
if (!loadWorldCollision(clipMap, bsp))
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
loadSubModelCollision(clipMap, bsp); // requires tri verts
|
||||||
|
|
||||||
// set all edges to walkable
|
// set all edges to walkable
|
||||||
// might do weird stuff on walls, but from testing doesnt seem to do anything
|
// might do weird stuff on walls, but from testing doesnt seem to do anything
|
||||||
int walkableEdgeSize = (3 * clipMap->triCount + 31) / 32 * 4;
|
int walkableEdgeSize = (3 * clipMap->triCount + 31) / 32 * 4;
|
||||||
clipMap->triEdgeIsWalkable = new char[walkableEdgeSize];
|
clipMap->triEdgeIsWalkable = m_memory.Alloc<char>(walkableEdgeSize);
|
||||||
memset(clipMap->triEdgeIsWalkable, 1, walkableEdgeSize * sizeof(char));
|
memset(clipMap->triEdgeIsWalkable, 1, walkableEdgeSize * sizeof(char));
|
||||||
|
|
||||||
if (!loadWorldCollision(clipMap, bsp))
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
return clipMap;
|
return clipMap;
|
||||||
}
|
}
|
||||||
} // namespace BSP
|
} // namespace BSP
|
||||||
|
|||||||
Reference in New Issue
Block a user