From 966e6797e49061093a5a28a0b28edaee5bb0b59a Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 9 May 2016 23:16:06 +0200 Subject: [PATCH] - fixed: The view path for checking whether the player sprite should be drawn during a portal transition was never set properly in the portal transitioning case. --- src/r_main.cpp | 3 ++- src/r_utility.cpp | 4 ++-- src/vectors.h | 10 ++++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/r_main.cpp b/src/r_main.cpp index 58e94e5445..ce4841a2e7 100644 --- a/src/r_main.cpp +++ b/src/r_main.cpp @@ -58,6 +58,7 @@ #include "v_font.h" #include "r_data/colormaps.h" #include "farchive.h" +#include "p_maputl.h" // MACROS ------------------------------------------------------------------ @@ -687,7 +688,7 @@ void R_EnterPortal (PortalDrawseg* pds, int depth) P_TranslatePortalXY(pds->src, ViewPath[0].X, ViewPath[0].Y); P_TranslatePortalXY(pds->src, ViewPath[1].X, ViewPath[1].Y); - if (!r_showviewer && camera) + if (!r_showviewer && camera && P_PointOnLineSidePrecise(ViewPath[0], pds->dst) != P_PointOnLineSidePrecise(ViewPath[1], pds->dst)) { double distp = (ViewPath[0] - ViewPath[1]).Length(); if (distp > EQUAL_EPSILON) diff --git a/src/r_utility.cpp b/src/r_utility.cpp index 701a3cffd3..71d3f23769 100644 --- a/src/r_utility.cpp +++ b/src/r_utility.cpp @@ -433,14 +433,14 @@ void R_InterpolateView (player_t *player, double Frac, InterpolationViewer *ivie } InterpolationPath.Pop(); ViewPath[0] = iview->Old.Pos; + ViewPath[1] = ViewPath[0] + (InterpolationPath[0].pos - ViewPath[0]).XY().MakeResize(pathlen); } } else { DVector2 disp = Displacements.getOffset(oldgroup, newgroup); ViewPos = iview->Old.Pos + (iview->New.Pos - iview->Old.Pos - disp) * Frac; - ViewPath[1] = iview->New.Pos; - ViewPath[0] = iview->Old.Pos; + ViewPath[0] = ViewPath[1] = iview->New.Pos; } } else diff --git a/src/vectors.h b/src/vectors.h index caa9c2f206..00a65df507 100644 --- a/src/vectors.h +++ b/src/vectors.h @@ -260,6 +260,16 @@ struct TVector2 return len; } + // Resizes this vector to be the specified length (if it is not 0) + TVector2 &MakeResize(double len) + { + double scale = len / Length(); + X = vec_t(X * scale); + Y = vec_t(Y * scale); + return *this; + } + + // Dot product double operator | (const TVector2 &other) const {