From 046799db68d0fab80f400a608ca8fcaa39b841f5 Mon Sep 17 00:00:00 2001 From: Major Cooke Date: Mon, 6 Dec 2021 02:13:40 -0600 Subject: [PATCH] Removed all attempts to stop the sprite from appearing in portals. This may likely require a fundamental breakdown of the system itself in order to address the problem. --- src/playsim/actor.h | 25 ++----------- src/playsim/p_map.cpp | 35 ------------------- src/rendering/hwrenderer/scene/hw_sprites.cpp | 6 ---- src/rendering/r_utility.cpp | 5 --- 4 files changed, 2 insertions(+), 69 deletions(-) diff --git a/src/playsim/actor.h b/src/playsim/actor.h index 2c4855cb43..02f47f79f0 100644 --- a/src/playsim/actor.h +++ b/src/playsim/actor.h @@ -669,22 +669,11 @@ public: DVector3 Offset; int Flags; - // Engine only. - // Used to do a backwards trace to disable rendering over portals. - bool isUsed; - DVector3 PlrPos, - CamPos; - double Distance; - sector_t *CamSec; - - // Functions FViewPosition() { - Offset = PlrPos = CamPos = { 0,0,0 }; - isUsed = false; - Distance = 0.0; - CamSec = nullptr; + Offset = { 0,0,0 }; + Flags = 0; } void Set(DVector3 &off, int f = -1) @@ -699,16 +688,6 @@ public: { return Offset.isZero(); } - - void ResetTraceInfo() - { - isUsed = false; - PlrPos = CamPos = {0,0,0}; - Distance = 0.; - CamSec = nullptr; - } - - bool TraceBack(AActor *Owner); }; const double MinVel = EQUAL_EPSILON; diff --git a/src/playsim/p_map.cpp b/src/playsim/p_map.cpp index 2b443d314e..55d41e3f0d 100644 --- a/src/playsim/p_map.cpp +++ b/src/playsim/p_map.cpp @@ -5441,43 +5441,8 @@ void P_AdjustViewPos(AActor *t1, DVector3 orig, DVector3 &campos, sector_t *&Cam { campos = trace.HitPos - trace.HitVector * 1 / 256.; } -// DVector3 cpos = campos; CameraSector = trace.Sector; unlinked = trace.unlinked; - - // Save the info for the renderers. Needed to disable sprites across portals. - VP->Distance = distance; - VP->isUsed = true; -} - -struct EViewPosFinder -{ - AActor *Owner; -}; - -static ETraceStatus TraceToOwner(FTraceResults &res, void *userdata) -{ - // Try to guarantee hitting the owner if possible. - if (res.HitType != TRACE_HitActor) - return TRACE_Skip; - - EViewPosFinder *data = (EViewPosFinder *)userdata; - ETraceStatus ret = (res.Actor == data->Owner) ? TRACE_Stop : TRACE_Skip; - return ret; -} - -bool FViewPosition::TraceBack(AActor *Owner) -{ - if (!isUsed || !Owner) - return false; - - DVector3 vvec = (CamPos - PlrPos).Unit() * -1.0; - FTraceResults res; - EViewPosFinder TrcBack = {Owner}; - - bool ret = Trace(CamPos, CamSec, vvec, Distance, 0, 0, nullptr, res, TRACE_ReportPortals, TraceToOwner, &TrcBack); - - return ret; } //========================================================================== diff --git a/src/rendering/hwrenderer/scene/hw_sprites.cpp b/src/rendering/hwrenderer/scene/hw_sprites.cpp index 902fc6f1a5..b6a9c204ba 100644 --- a/src/rendering/hwrenderer/scene/hw_sprites.cpp +++ b/src/rendering/hwrenderer/scene/hw_sprites.cpp @@ -734,12 +734,6 @@ void HWSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t DVector3 thingorigin = thing->Pos(); if (thruportal == 1) thingorigin += di->Level->Displacements.getOffset(thing->Sector->PortalGroup, sector->PortalGroup); if (fabs(thingorigin.X - vp.ActorPos.X) < 2 && fabs(thingorigin.Y - vp.ActorPos.Y) < 2) return; - - // Try to do an inverted trace to get to the camera's body. This way, we know exactly behind which line to disable. - // Currently doesn't work. - FViewPosition *vpos = camera->ViewPos; - if (vpos && vpos->TraceBack(camera)) - return; } // Thing is invisible if close to the camera. if (thing->renderflags & RF_MAYBEINVISIBLE) diff --git a/src/rendering/r_utility.cpp b/src/rendering/r_utility.cpp index b1ca77e9a1..0487d42bc8 100644 --- a/src/rendering/r_utility.cpp +++ b/src/rendering/r_utility.cpp @@ -794,7 +794,6 @@ void R_SetupFrame (FRenderViewpoint &viewpoint, FViewWindow &viewwindow, AActor { AActor *mo = viewpoint.camera; FViewPosition *VP = mo->ViewPos; - if (VP) VP->ResetTraceInfo(); const DVector3 orig = { mo->Pos().XY(), mo->player ? mo->player->viewz : mo->Z() + mo->GetCameraHeight() }; viewpoint.ActorPos = orig; @@ -879,10 +878,6 @@ void R_SetupFrame (FRenderViewpoint &viewpoint, FViewWindow &viewwindow, AActor DefaultDraw = false; viewpoint.NoPortalPath = true; P_AdjustViewPos(mo, orig, next, viewpoint.sector, unlinked, VP); - - VP->PlrPos = orig; - VP->CamPos = next; - VP->CamSec = viewpoint.sector; if (viewpoint.sector->PortalGroup != oldsector->PortalGroup || (unlinked && ((iview->New.Pos.XY() - iview->Old.Pos.XY()).LengthSquared()) > 256 * 256)) {