mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-06-06 00:32:34 +00:00
feat: gfxworld now uses surface flags for surfaces
This commit is contained in:
@@ -52,7 +52,7 @@ namespace BSPFlags
|
||||
SURF_TYPE_ORIGIN,
|
||||
SURF_TYPE_SKY,
|
||||
SURF_TYPE_NOCASTSHADOW,
|
||||
SURF_TYPE_ONLYCASTSHADOW,
|
||||
SURF_TYPE_CASTSUNSHADOW,
|
||||
SURF_TYPE_PHYSICSGEOM,
|
||||
SURF_TYPE_LIGHTPORTAL,
|
||||
SURF_TYPE_CAULK,
|
||||
@@ -129,7 +129,7 @@ namespace BSPFlags
|
||||
{0, 0 }, // origin
|
||||
{4, 0x800 }, // sky
|
||||
{0x40000, 0 }, // noCastShadow
|
||||
{0x80000, 0 }, // onlyCastShadow
|
||||
{0x80000, 0 }, // castSunShadow
|
||||
{0, 0 }, // physicsGeom
|
||||
{0, 0 }, // lightPortal
|
||||
{0x1000, 0 }, // caulk
|
||||
@@ -175,7 +175,7 @@ namespace BSPFlags
|
||||
SURF_TYPE_CANSHOOTCLIP,
|
||||
SURF_TYPE_SKY,
|
||||
SURF_TYPE_NOCASTSHADOW,
|
||||
SURF_TYPE_ONLYCASTSHADOW,
|
||||
SURF_TYPE_CASTSUNSHADOW,
|
||||
SURF_TYPE_CAULK,
|
||||
SURF_TYPE_AREALIGHT,
|
||||
SURF_TYPE_SLICK,
|
||||
@@ -193,71 +193,18 @@ namespace BSPFlags
|
||||
SURF_TYPE_NODLIGHT,
|
||||
};
|
||||
|
||||
constexpr const char* surfaceTypeToNameMap[SURF_TYPE_COUNT] = {"bark",
|
||||
"brick",
|
||||
"carpet",
|
||||
"cloth",
|
||||
"concrete",
|
||||
"dirt",
|
||||
"flesh",
|
||||
"foliage",
|
||||
"glass",
|
||||
"grass",
|
||||
"gravel",
|
||||
"ice",
|
||||
"metal",
|
||||
"mud",
|
||||
"paper",
|
||||
"plaster",
|
||||
"rock",
|
||||
"sand",
|
||||
"snow",
|
||||
"water",
|
||||
"wood",
|
||||
"asphalt",
|
||||
"ceramic",
|
||||
"plastic",
|
||||
"rubber",
|
||||
"cushion",
|
||||
"fruit",
|
||||
"paintedmetal",
|
||||
"player",
|
||||
"tallgrass",
|
||||
"riotshield",
|
||||
"opaqueglass",
|
||||
"clipmissile",
|
||||
"ai_nosight",
|
||||
"clipshot",
|
||||
"playerclip",
|
||||
"monsterclip",
|
||||
"vehicleclip",
|
||||
"itemclip",
|
||||
"nodrop",
|
||||
"nonsolid",
|
||||
"detail",
|
||||
"structural",
|
||||
"portal",
|
||||
"canshootclip",
|
||||
"origin",
|
||||
"sky",
|
||||
"nocastshadow",
|
||||
"onlycastshadow",
|
||||
"physicsgeom",
|
||||
"lightportal",
|
||||
"caulk",
|
||||
"arealight",
|
||||
"slick",
|
||||
"noimpact",
|
||||
"nomarks",
|
||||
"nopenetrate",
|
||||
"ladder",
|
||||
"nodamage",
|
||||
"mantleon",
|
||||
"mantleover",
|
||||
"mount",
|
||||
"nosteps",
|
||||
"nodraw",
|
||||
"noreceivedynamicshadow",
|
||||
"nodlight",
|
||||
"none"};
|
||||
constexpr const char* surfaceTypeToNameMap[SURF_TYPE_COUNT] = {"bark", "brick", "carpet", "cloth", "concrete",
|
||||
"dirt", "flesh", "foliage", "glass", "grass",
|
||||
"gravel", "ice", "metal", "mud", "paper",
|
||||
"plaster", "rock", "sand", "snow", "water",
|
||||
"wood", "asphalt", "ceramic", "plastic", "rubber",
|
||||
"cushion", "fruit", "paintedmetal", "player", "tallgrass",
|
||||
"riotshield", "opaqueglass", "clipmissile", "ai_nosight", "clipshot",
|
||||
"playerclip", "monsterclip", "vehicleclip", "itemclip", "nodrop",
|
||||
"nonsolid", "detail", "structural", "portal", "canshootclip",
|
||||
"origin", "sky", "nocastshadow", "castshadow", "physicsgeom",
|
||||
"lightportal", "caulk", "arealight", "slick", "noimpact",
|
||||
"nomarks", "nopenetrate", "ladder", "nodamage", "mantleon",
|
||||
"mantleover", "mount", "nosteps", "nodraw", "noreceivedynamicshadow",
|
||||
"nodlight", "none"};
|
||||
} // namespace BSPFlags
|
||||
|
||||
@@ -61,11 +61,6 @@ namespace BSP
|
||||
BSPSurface& bspSurface = bsp->gfxWorld.surfaces.at(surfIdx);
|
||||
GfxSurface* gfxSurface = &gfxWorld->dpvs.surfaces[surfIdx];
|
||||
|
||||
gfxSurface->primaryLightIndex = BSPEditableConstants::DEFAULT_SURFACE_LIGHT;
|
||||
gfxSurface->lightmapIndex = BSPEditableConstants::DEFAULT_SURFACE_LIGHTMAP;
|
||||
gfxSurface->reflectionProbeIndex = BSPEditableConstants::DEFAULT_SURFACE_REFLECTION_PROBE;
|
||||
gfxSurface->flags = BSPEditableConstants::DEFAULT_SURFACE_FLAGS;
|
||||
|
||||
gfxSurface->tris.triCount = bspSurface.triCount;
|
||||
gfxSurface->tris.baseIndex = bspSurface.indexOfFirstIndex;
|
||||
gfxSurface->tris.vertexCount = bspSurface.vertexCount;
|
||||
@@ -109,6 +104,20 @@ namespace BSP
|
||||
gfxSurface->tris.maxs.y = gfxSurface->bounds[1].y;
|
||||
gfxSurface->tris.maxs.z = gfxSurface->bounds[1].z;
|
||||
|
||||
gfxSurface->flags = 0;
|
||||
if ((bspMaterial.contentFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_SKY].contentFlags) != 0)
|
||||
gfxSurface->flags |= GFX_SURFACE_IS_SKY;
|
||||
if ((bspMaterial.contentFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_NODRAW].contentFlags) != 0)
|
||||
gfxSurface->flags |= GFX_SURFACE_NO_DRAW;
|
||||
if ((bspMaterial.surfaceFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_CASTSUNSHADOW].surfaceFlags) != 0)
|
||||
gfxSurface->flags |= GFX_SURFACE_CASTS_SUN_SHADOW;
|
||||
if ((bspMaterial.surfaceFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_NOCASTSHADOW].surfaceFlags) == 0)
|
||||
gfxSurface->flags |= GFX_SURFACE_CASTS_SHADOW;
|
||||
|
||||
gfxSurface->primaryLightIndex = BSPEditableConstants::DEFAULT_SURFACE_LIGHT;
|
||||
gfxSurface->lightmapIndex = BSPEditableConstants::DEFAULT_SURFACE_LIGHTMAP;
|
||||
gfxSurface->reflectionProbeIndex = BSPEditableConstants::DEFAULT_SURFACE_REFLECTION_PROBE;
|
||||
|
||||
// unknown value
|
||||
gfxSurface->tris.himipRadiusInvSq = 0.0f;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user