From 65f21af4052d4c4f6e4bb898dc14276dd72a30a7 Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Tue, 7 Feb 2023 16:21:01 -0800 Subject: [PATCH] env_beam, env_laser, prop_rope: Use GetEyePos() to assign the proper player view position --- src/client/entry.qc | 2 +- src/gs-entbase/shared/env_beam.qc | 10 +++++++++- src/gs-entbase/shared/env_laser.qc | 10 +++++++++- src/gs-entbase/shared/prop_rope.qc | 4 +++- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/client/entry.qc b/src/client/entry.qc index 028d447c..73b16d13 100644 --- a/src/client/entry.qc +++ b/src/client/entry.qc @@ -270,13 +270,13 @@ CSQC_UpdateView(float w, float h, float focus) pSeatLocal = &g_seatslocal[s]; g_view = g_viewSeats[s]; - setproperty(VF_ACTIVESEAT, (float)s); pSeat->m_ePlayer = findfloat(world, ::entnum, player_localentnum); if (pSeat->m_ePlayer == world) continue; cl = (NSClient)pSeat->m_ePlayer; + setproperty(VF_ACTIVESEAT, (float)s); /* set up our single/split viewport */ View_CalcViewport(s, w, h); diff --git a/src/gs-entbase/shared/env_beam.qc b/src/gs-entbase/shared/env_beam.qc index c12c8a62..bc106dc4 100644 --- a/src/gs-entbase/shared/env_beam.qc +++ b/src/gs-entbase/shared/env_beam.qc @@ -427,6 +427,14 @@ static float env_beam_jitlut[BEAM_COUNT] = { float env_beam::predraw(void) { + vector vecPlayer; + NSClientPlayer pl; + + int s = (float)getproperty(VF_ACTIVESEAT); + pSeat = &g_seats[s]; + pl = (NSClientPlayer)pSeat->m_ePlayer; + vecPlayer = pl.GetEyePos(); + /* only draw when active. */ if (!m_iActive) return (PREDRAW_NEXT); @@ -445,7 +453,7 @@ env_beam::predraw(void) if (m_strTexture) { float last_progression = 0.0f; makevectors(g_view.GetCameraAngle()); - setproperty(VF_ORIGIN, pSeat->m_vecPredictedOrigin); + setproperty(VF_ORIGIN, vecPlayer); R_BeginPolygon(m_strTexture, DRAWFLAG_ADDITIVE, 0); for (float i = 0; i < BEAM_COUNT; i++) { diff --git a/src/gs-entbase/shared/env_laser.qc b/src/gs-entbase/shared/env_laser.qc index 9315e4ed..33efafbb 100644 --- a/src/gs-entbase/shared/env_laser.qc +++ b/src/gs-entbase/shared/env_laser.qc @@ -315,6 +315,14 @@ static float env_laser_jitlut[LASER_COUNT] = { float env_laser::predraw(void) { + vector vecPlayer; + NSClientPlayer pl; + + int s = (float)getproperty(VF_ACTIVESEAT); + pSeat = &g_seats[s]; + pl = (NSClientPlayer)pSeat->m_ePlayer; + vecPlayer = pl.GetEyePos(); + /* only draw when active. */ if (!m_iActive) return (PREDRAW_NEXT); @@ -333,7 +341,7 @@ env_laser::predraw(void) if (m_strTexture) { float last_progression = 0.0f; makevectors(g_view.GetCameraAngle()); - setproperty(VF_ORIGIN, pSeat->m_vecPredictedOrigin); + setproperty(VF_ORIGIN, vecPlayer); R_BeginPolygon(m_strTexture, DRAWFLAG_ADDITIVE, 0); for (float i = 0; i < LASER_COUNT; i++) { diff --git a/src/gs-entbase/shared/prop_rope.qc b/src/gs-entbase/shared/prop_rope.qc index e970ae5e..2f5794d8 100644 --- a/src/gs-entbase/shared/prop_rope.qc +++ b/src/gs-entbase/shared/prop_rope.qc @@ -105,10 +105,12 @@ prop_rope::predraw(void) vector pos2; float segments; vector vecPlayer; + NSClientPlayer pl; int s = (float)getproperty(VF_ACTIVESEAT); pSeat = &g_seats[s]; - vecPlayer = pSeat->m_vecPredictedOrigin; + pl = (NSClientPlayer)pSeat->m_ePlayer; + vecPlayer = pl.GetEyePos(); /* draw the start/end without segments */ if (autocvar_rope_debug == TRUE) {