From 706241a7b6e436ea33403a4d4e09301c9d55a396 Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Sun, 16 Apr 2023 10:43:40 -0700 Subject: [PATCH] Client: viewmodel and player model weapon now inherit the rendermode of the player. --- src/client/view.qc | 25 +++++++++++++++++++------ src/shared/NSClientPlayer.qc | 9 ++++++--- src/shared/NSRenderableEntity.qc | 4 +--- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/client/view.qc b/src/client/view.qc index 9f6ff8b5..5d6ce35d 100644 --- a/src/client/view.qc +++ b/src/client/view.qc @@ -24,11 +24,13 @@ View_Init(void) pSeat = &g_seats[s]; if(!pSeat->m_eViewModel) { /* right side */ - pSeat->m_eViewModel = spawn(); + pSeat->m_eViewModel = spawn(NSRenderableEntity); pSeat->m_eViewModel.classname = "vm"; pSeat->m_eViewModel.renderflags = RF_DEPTHHACK | RF_FIRSTPERSON; pSeat->m_eViewModel.effects |= EF_NOSHADOW; pSeat->m_eViewModel.alpha = 1.0f; + pSeat->m_eViewModel.drawmask = 0; + setsize(pSeat->m_eViewModel, [0,0,0], [0,0,0]); pSeat->m_eMuzzleflash = spawn(); @@ -38,11 +40,12 @@ View_Init(void) setsize(pSeat->m_eMuzzleflash, [0,0,0], [0,0,0]); /* left side */ - pSeat->m_eViewModelL = spawn(); + pSeat->m_eViewModelL = spawn(NSRenderableEntity); pSeat->m_eViewModelL.classname = "vm"; pSeat->m_eViewModelL.renderflags = RF_DEPTHHACK | RF_FIRSTPERSON; pSeat->m_eViewModelL.effects |= EF_NOSHADOW; pSeat->m_eViewModelL.alpha = 1.0f; + pSeat->m_eViewModelL.drawmask = 0; setsize(pSeat->m_eViewModelL, [0,0,0], [0,0,0]); pSeat->m_eMuzzleflashL = spawn(); @@ -135,9 +138,9 @@ muzzleflash, dynamic lights and so on appear void View_DrawViewModel(void) { - entity m_eViewModel = pSeat->m_eViewModel; + NSRenderableEntity m_eViewModel = pSeat->m_eViewModel; entity m_eMuzzleflash = pSeat->m_eMuzzleflash; - entity m_eViewModelL = pSeat->m_eViewModelL; + NSRenderableEntity m_eViewModelL = pSeat->m_eViewModelL; entity m_eMuzzleflashL = pSeat->m_eMuzzleflashL; player pl = __NULL__; @@ -172,6 +175,11 @@ View_DrawViewModel(void) return; } + m_eViewModel.SetRenderMode(pl.GetRenderMode()); + m_eViewModel.SetRenderFX(pl.GetRenderFX()); + m_eViewModel.SetRenderColor(pl.GetRenderColor()); + m_eViewModel.SetRenderAmt(pl.GetRenderAmt()); + View_UpdateWeapon(pl, m_eViewModel, m_eMuzzleflash); float fBaseTime2 = m_eViewModel.frame1time; float fBaseTime = m_eViewModel.frame1time; @@ -278,8 +286,13 @@ View_DrawViewModel(void) } setorigin(m_eViewModel, m_eViewModel.origin); setorigin(m_eViewModelL, m_eViewModel.origin); - addentity(m_eViewModel); - addentity(m_eViewModelL); + m_eViewModel.RenderFXPass(); + m_eViewModelL.RenderFXPass(); + + if (m_eViewModel.GetRenderMode() != RM_DONTRENDER) + addentity(m_eViewModel); + if (m_eViewModelL.GetRenderMode() != RM_DONTRENDER) + addentity(m_eViewModelL); } } diff --git a/src/shared/NSClientPlayer.qc b/src/shared/NSClientPlayer.qc index 2b8db35b..8af87b61 100644 --- a/src/shared/NSClientPlayer.qc +++ b/src/shared/NSClientPlayer.qc @@ -297,8 +297,10 @@ NSClientPlayer::predraw(void) g_view.SetDrawLocalPlayer(true); /* sucks we can't draw a shadow on this thing, maybe in the future when FTEQW allows it */ - if (p_model) - addentity(p_model); + if (p_model) { + if (p_model.GetRenderMode() != RM_DONTRENDER) + addentity(p_model); + } } else { /* we're doing first person stuff */ /* flags that the model appear in mirrors only */ renderflags |= RF_EXTERNALMODEL; @@ -318,7 +320,8 @@ NSClientPlayer::predraw(void) /* this needs to be called absolutely last */ /* we're calling this so that the shadow can still be drawn */ - addentity(this); + if (GetRenderMode() != RM_DONTRENDER) + addentity(this); return (PREDRAW_NEXT); } diff --git a/src/shared/NSRenderableEntity.qc b/src/shared/NSRenderableEntity.qc index d3c90448..24a5fed4 100644 --- a/src/shared/NSRenderableEntity.qc +++ b/src/shared/NSRenderableEntity.qc @@ -371,8 +371,6 @@ NSRenderableEntity::RenderFXPass(void) abslight = 128; break; case RM_DONTRENDER: - /* prevent addentity() from being called */ - alpha = 0.0f; break; } @@ -555,7 +553,7 @@ NSRenderableEntity::predraw(void) float dim = ((sin(time * autocvar(rfx_q2pulse_speed, 4)) + (M_PI/2)) * autocvar(rfx_q2pulse_intensity, 1.0)); dim += 1.0f; addentity_lighting(this, [0,0,0], [dim, dim, dim], [0,0,0], 0, 0); - } else { + } else if (m_iRenderMode != RM_DONTRENDER) { addentity(this); } }