From 6aaf5df6175650e224b59f6f35c27d0730a7721e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 20 Jan 2018 22:41:28 +0100 Subject: [PATCH] - reworked spot lights to receive all relevant information through the args. As a bonus, arg0str can now be used for all dynamic lights to pass a color in textual form, including X11R6RGB-names. --- src/doomdata.h | 3 +-- src/namedef.h | 2 -- src/p_mobj.cpp | 20 ++++++++++++++++++-- src/p_udmf.cpp | 9 +-------- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/doomdata.h b/src/doomdata.h index 4e3acdce61..cfebe196d6 100644 --- a/src/doomdata.h +++ b/src/doomdata.h @@ -372,8 +372,7 @@ struct FMapThing uint32_t RenderStyle; int FloatbobPhase; int friendlyseeblocks; - double SpotInnerAngle = 10; - double SpotOuterAngle = 25; + FString arg0str; }; diff --git a/src/namedef.h b/src/namedef.h index fa345397f6..ace456a691 100644 --- a/src/namedef.h +++ b/src/namedef.h @@ -503,8 +503,6 @@ xx(Scale) xx(ScaleX) xx(ScaleY) xx(FriendlySeeBlocks) -xx(SpotInnerAngle) -xx(SpotOuterAngle) xx(Floatbobphase) xx(Floatbobstrength) xx(Target) diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 09fdc3eac9..0f77f534d7 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -6094,10 +6094,26 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position) mobj->fillcolor = (mthing->fillcolor & 0xffffff) | (ColorMatcher.Pick((mthing->fillcolor & 0xff0000) >> 16, (mthing->fillcolor & 0xff00) >> 8, (mthing->fillcolor & 0xff)) << 24); + // allow color strings for lights and reshuffle the args for spot lights if (i->IsDescendantOf(RUNTIME_CLASS(ADynamicLight))) { - ((ADynamicLight*)mobj)->SpotInnerAngle = mthing->SpotInnerAngle; - ((ADynamicLight*)mobj)->SpotOuterAngle = mthing->SpotOuterAngle; + auto light = static_cast(mobj); + if (mthing->arg0str.IsNotEmpty()) + { + PalEntry color = V_GetColor(nullptr, mthing->arg0str); + } + else if (light->lightflags & LF_SPOT) + { + light->args[0] = RPART(mthing->args[0]); + light->args[1] = GPART(mthing->args[0]); + light->args[2] = BPART(mthing->args[0]); + } + + if (light->lightflags & LF_SPOT) + { + light->SpotInnerAngle = double(mthing->args[1]); + light->SpotOuterAngle = double(mthing->args[2]); + } } mobj->CallBeginPlay (); diff --git a/src/p_udmf.cpp b/src/p_udmf.cpp index 5b3d0e3542..53d2ece9bd 100644 --- a/src/p_udmf.cpp +++ b/src/p_udmf.cpp @@ -604,6 +604,7 @@ public: case NAME_Arg0Str: CHECK_N(Zd); arg0str = CheckString(key); + th->arg0str = arg0str; break; case NAME_Arg1Str: @@ -799,14 +800,6 @@ public: th->Scale.X = th->Scale.Y = CheckFloat(key); break; - case NAME_SpotInnerAngle: - th->SpotInnerAngle = CheckFloat(key); - break; - - case NAME_SpotOuterAngle: - th->SpotOuterAngle = CheckFloat(key); - break; - case NAME_FriendlySeeBlocks: CHECK_N(Zd | Zdt) th->friendlyseeblocks = CheckInt(key);