Update the dynamic submesh with poly lines

This commit is contained in:
Magnus Norddahl 2023-09-26 00:06:10 +02:00
commit 2b7394cbb1
3 changed files with 44 additions and 5 deletions

View file

@ -146,11 +146,20 @@ void DoomLevelSubmesh::CreateStatic(FLevelLocals& doomMap)
for (unsigned int i = 0; i < doomMap.sides.Size(); i++)
{
CreateSideSurfaces(doomMap, &doomMap.sides[i]);
bool isPolyLine = !!(doomMap.sides[i].Flags & WALLF_POLYOBJ);
if (!isPolyLine)
CreateSideSurfaces(doomMap, &doomMap.sides[i]);
}
CreateSubsectorSurfaces(doomMap);
CreateIndexes();
SetupLightmapUvs(doomMap);
UpdateCollision();
}
void DoomLevelSubmesh::CreateIndexes()
{
for (size_t i = 0; i < Surfaces.Size(); i++)
{
DoomLevelMeshSurface& s = Surfaces[i];
@ -200,15 +209,34 @@ void DoomLevelSubmesh::CreateStatic(FLevelLocals& doomMap)
}
}
}
SetupLightmapUvs(doomMap);
UpdateCollision();
}
void DoomLevelSubmesh::CreateDynamic(FLevelLocals& doomMap)
{
LightmapSampleDistance = doomMap.LightmapSampleDistance;
BuildSectorGroups(doomMap);
}
void DoomLevelSubmesh::UpdateDynamic(FLevelLocals& doomMap)
{
Surfaces.Clear();
MeshVertices.Clear();
MeshVertexUVs.Clear();
MeshElements.Clear();
MeshUVIndex.Clear();
MeshSurfaceIndexes.Clear();
LightmapUvs.Clear();
for (unsigned int i = 0; i < doomMap.lines.Size(); i++)
{
bool isPolyLine = doomMap.lines[i].sidedef[0] && (doomMap.lines[i].sidedef[0]->Flags & WALLF_POLYOBJ);
if (isPolyLine)
CreateSideSurfaces(doomMap, doomMap.lines[i].sidedef[0]);
}
CreateIndexes();
SetupLightmapUvs(doomMap);
UpdateCollision();
}
DoomLevelMesh::DoomLevelMesh(FLevelLocals &doomMap)
@ -223,6 +251,11 @@ DoomLevelMesh::DoomLevelMesh(FLevelLocals &doomMap)
static_cast<DoomLevelSubmesh*>(DynamicMesh.get())->CreateDynamic(doomMap);
}
void DoomLevelMesh::BeginFrame(FLevelLocals& doomMap)
{
static_cast<DoomLevelSubmesh*>(DynamicMesh.get())->UpdateDynamic(doomMap);
}
void DoomLevelSubmesh::BuildSectorGroups(const FLevelLocals& doomMap)
{
int groupIndex = 0;