diff --git a/src/common/rendering/hwrenderer/data/hw_dynlightdata.h b/src/common/rendering/hwrenderer/data/hw_dynlightdata.h index c354ad124..94b30fddc 100644 --- a/src/common/rendering/hwrenderer/data/hw_dynlightdata.h +++ b/src/common/rendering/hwrenderer/data/hw_dynlightdata.h @@ -87,6 +87,14 @@ struct sun_trace_cache_t bool SunResult = false; }; +enum FShadowCastingTypes +{ + SHADOWCASTING_None = 0, + SHADOWCASTING_Lightmap, + // Not yet implemented. + //SHADOWCASTING_Dynamic +}; + extern thread_local FDynLightData lightdata; diff --git a/src/namedef_custom.h b/src/namedef_custom.h index 843ca4c0a..ad44ce3f2 100644 --- a/src/namedef_custom.h +++ b/src/namedef_custom.h @@ -875,6 +875,7 @@ xx(lm_suncolor) xx(lm_sunintensity) xx(lm_bounce) xx(lm_ao) +xx(ShadowCastingType) // Light keywords xx(light_softshadowradius) diff --git a/src/rendering/hwrenderer/doom_levelmesh.cpp b/src/rendering/hwrenderer/doom_levelmesh.cpp index 0dbbafa55..ffce01988 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.cpp +++ b/src/rendering/hwrenderer/doom_levelmesh.cpp @@ -295,16 +295,19 @@ DoomLevelMesh::DoomLevelMesh(FLevelLocals& doomMap) // Collect all the models we want to bake into the level mesh if (lm_models) { - TThinkerIterator it(&doomMap, PClass::FindClass("StaticMapModel"), STAT_STATIC, true); + TThinkerIterator it(&doomMap, PClass::FindClass("Actor"), STAT_STATIC, true); AActor* thing; while ((thing = it.Next()) != nullptr) { - bool isPicnumOverride = thing->picnum.isValid(); - int spritenum = thing->sprite; - FSpriteModelFrame* modelframe = isPicnumOverride ? nullptr : FindModelFrame(thing, spritenum, thing->frame, !!(thing->flags & MF_DROPPED)); - if (modelframe && modelframe->modelIDs.size() != 0) + if (thing->IntVar(NAME_ShadowCastingType) == SHADOWCASTING_Lightmap) { - CreateModelSurfaces(thing, modelframe); + bool isPicnumOverride = thing->picnum.isValid(); + int spritenum = thing->sprite; + FSpriteModelFrame* modelframe = isPicnumOverride ? nullptr : FindModelFrame(thing, spritenum, thing->frame, !!(thing->flags & MF_DROPPED)); + if (modelframe && modelframe->modelIDs.size() != 0) + { + CreateModelSurfaces(thing, modelframe); + } } } } diff --git a/wadsrc/static/zscript/actors/actor.zs b/wadsrc/static/zscript/actors/actor.zs index 228c8066d..b94632e53 100644 --- a/wadsrc/static/zscript/actors/actor.zs +++ b/wadsrc/static/zscript/actors/actor.zs @@ -286,6 +286,9 @@ class Actor : Thinker native meta double FastSpeed; // speed in fast mode meta Sound PushSound; // Sound being played when pushed by something + // VKDoom + meta readonly int ShadowCastingType; + // todo: implement access to native meta properties. // native meta int infighting_group; // native meta int projectile_group; @@ -372,6 +375,7 @@ class Actor : Thinker native property ShadowPenaltyFactor: ShadowPenaltyFactor; property AutomapOffsets : AutomapOffsets; property LandingSpeed: LandingSpeed; + property ShadowCastingType: ShadowCastingType; // need some definition work first //FRenderStyle RenderStyle; diff --git a/wadsrc/static/zscript/doombase.zs b/wadsrc/static/zscript/doombase.zs index fbe9d2760..2d1e1261c 100644 --- a/wadsrc/static/zscript/doombase.zs +++ b/wadsrc/static/zscript/doombase.zs @@ -988,4 +988,10 @@ struct Lightmap native static void SetSunIntensity(double intensity); }; -class StaticMapModel : Actor {} +enum FShadowCastingTypes +{ + SHADOWCASTING_None = 0, + SHADOWCASTING_Lightmap, + // Not yet implemented. + //SHADOWCASTING_Dynamic +}