From a8e4cd57482e64c11c0ef17af7fef5091174bd29 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Wed, 10 Nov 2021 02:33:31 +0100 Subject: [PATCH] NSEntity: Make sure .scale affects SetSize() calls and is updated with SetModel() calls. Also keep track of original .mins/.maxs in case scale changes. --- src/client/entry.qc | 2 -- src/gs-entbase/shared/NSEntity.h | 6 +++++- src/gs-entbase/shared/NSEntity.qc | 10 +++++----- src/gs-entbase/shared/NSRenderableEntity.qc | 5 ++++- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/client/entry.qc b/src/client/entry.qc index 9a90618e..8d83ef73 100644 --- a/src/client/entry.qc +++ b/src/client/entry.qc @@ -553,8 +553,6 @@ CSQC_Input_Frame(void) sendevent("Spraylogo", ""); } - - if (pSeat->m_flCameraTime > time) { /* TODO: Supress the changing of view_angles/input_angles. */ } diff --git a/src/gs-entbase/shared/NSEntity.h b/src/gs-entbase/shared/NSEntity.h index dcf04669..3b4cae21 100644 --- a/src/gs-entbase/shared/NSEntity.h +++ b/src/gs-entbase/shared/NSEntity.h @@ -22,6 +22,10 @@ class NSEntity:NSTrigger { void(void) NSEntity; + /* these are the real bounds, whereas .mins .maxs are affected by .scale */ + vector m_vecMins; + vector m_vecMaxs; + #ifdef CLIENT virtual void(float flChanged) ReceiveEntity; virtual void(void) postdraw; @@ -73,4 +77,4 @@ class NSEntity:NSTrigger virtual void(vector) SetOrigin; virtual void(vector, vector) SetSize; virtual void(string, string) SpawnKey; -}; \ No newline at end of file +}; diff --git a/src/gs-entbase/shared/NSEntity.qc b/src/gs-entbase/shared/NSEntity.qc index 713ef01c..5d821d1b 100644 --- a/src/gs-entbase/shared/NSEntity.qc +++ b/src/gs-entbase/shared/NSEntity.qc @@ -284,10 +284,9 @@ NSEntity::SetAngles(vector newAngles) void NSEntity::SetSize(vector newMins, vector newMaxs) { - if (newMins == mins && newMaxs == maxs) - return; - - setsize(this, newMins, newMaxs); + m_vecMins = newMins; + m_vecMaxs = newMaxs; + setsize(this, m_vecMins * scale, m_vecMaxs * scale); SetSendFlags(BASEFL_CHANGED_SIZE); } void @@ -306,6 +305,7 @@ NSEntity::SetModel(string newModel) { model = newModel; setmodel(this, newModel); + SetSize(mins, maxs); SetSendFlags(BASEFL_CHANGED_MODELINDEX); } void @@ -315,10 +315,10 @@ NSEntity::SetModelindex(float newModelIndex) return; modelindex = newModelIndex; + SetSize(mins, maxs); SetSendFlags(BASEFL_CHANGED_MODELINDEX); } - #ifdef SERVER vector NSEntity::GetSpawnOrigin(void) diff --git a/src/gs-entbase/shared/NSRenderableEntity.qc b/src/gs-entbase/shared/NSRenderableEntity.qc index 4cf6ecde..98e90d26 100644 --- a/src/gs-entbase/shared/NSRenderableEntity.qc +++ b/src/gs-entbase/shared/NSRenderableEntity.qc @@ -346,7 +346,6 @@ NSRenderableEntity::ReceiveEntity(float flChanged) maxs[0] = readcoord(); maxs[1] = readcoord(); maxs[2] = readcoord(); - setsize(this, mins, maxs); } if (flChanged & BASEFL_CHANGED_FRAME) { frame1time = 0.0; @@ -402,6 +401,9 @@ NSRenderableEntity::ReceiveEntity(float flChanged) if (scale == 0.0) scale = 1.0f; + if (flChanged & BASEFL_CHANGED_SIZE) + setsize(this, mins * scale, maxs * scale); + setorigin(this, origin); } /* @@ -528,6 +530,7 @@ NSRenderableEntity::SetScale(float newScale) return; scale = newScale; + setsize(this, m_vecMins * scale, m_vecMaxs * scale); SetSendFlags(BASEFL_CHANGED_SCALE); }