From 6d8273331a53e3334ff06ebf94c9051146349055 Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Fri, 5 Aug 2022 21:15:19 -0700 Subject: [PATCH] Client: Replace rogue setproperty calls with ones talking to our g_view object --- src/client/NSView.h | 7 +++- src/client/NSView.qc | 27 ++++++++++--- src/client/cmd.qc | 4 +- src/client/defs.h | 6 +-- src/client/entry.qc | 6 +++ src/client/event.qc | 4 +- src/gs-entbase/client/env_cubemap.qc | 6 +-- src/gs-entbase/shared/func_illusionary.qc | 23 +---------- src/gs-entbase/shared/func_wall.qc | 29 +++----------- .../shared/prop_vehicle_driveable.qc | 3 +- src/gs-entbase/shared/trigger_camera.qc | 4 +- src/shared/NSClient.qc | 14 +++---- src/shared/NSClientPlayer.qc | 9 +++-- src/shared/NSEntity.qc | 18 +++++---- src/shared/NSRenderableEntity.qc | 38 +++++++++---------- 15 files changed, 95 insertions(+), 103 deletions(-) diff --git a/src/client/NSView.h b/src/client/NSView.h index b3a4eaeb..d2f8ebc4 100644 --- a/src/client/NSView.h +++ b/src/client/NSView.h @@ -48,6 +48,9 @@ NSView NSClient m_client; + vector m_vecClientAngle; + bool m_bSetClientAngle; + void(void) NSView; /* the only method we we want to call setproperty() */ @@ -75,8 +78,10 @@ NSView virtual void(vector) SetCameraOrigin; virtual void(vector) SetCameraAngle; + virtual void(vector) SetClientAngle; virtual void(int) SetSeatID; virtual void(float) SetAFOV; + virtual float(void) GetAFOV; virtual vector(void) GetHUDCanvasSize; virtual vector(void) GetHUDCanvasPos; @@ -92,4 +97,4 @@ NSView NSView g_viewSeats[4]; /* the current seat run for each draw call, for each player. always use talk to this! */ -NSView g_view; \ No newline at end of file +NSView g_view; diff --git a/src/client/NSView.qc b/src/client/NSView.qc index 31798c31..73885949 100644 --- a/src/client/NSView.qc +++ b/src/client/NSView.qc @@ -39,6 +39,14 @@ NSView::SetupView(void) setproperty(VF_ANGLES, angles); } + /* the view may not have gotten the chance to set the client angle early on */ + /* honestly this could be handled a lot better, but I don't know of a more reliable solution right now */ + if (m_bSetClientAngle == true || cltime <= 0.5) { + setproperty(VF_ANGLES, m_vecClientAngle); + setproperty(VF_CL_VIEWANGLES, m_vecClientAngle); + m_bSetClientAngle = false; + } + m_vecLastOrigin = origin; } @@ -72,7 +80,6 @@ NSView::StairSmooth(void) endpos[2] = origin[2]; } - //setproperty(VF_ORIGIN, endpos); origin = endpos; } } @@ -119,6 +126,13 @@ NSView::GetCameraAngle(void) return angles; } +void +NSView::SetClientAngle(vector new_angle) +{ + m_vecClientAngle = new_angle; + m_bSetClientAngle = true; +} + void NSView::SetViewMode(viewmode_e new_mode) { @@ -149,6 +163,12 @@ NSView::SetAFOV(float new_fov) m_flFieldOfView = new_fov; } +float +NSView::GetAFOV(void) +{ + return m_flFieldOfView; +} + vector NSView::GetHUDCanvasPos(void) { @@ -224,10 +244,7 @@ NSView::UpdateView(void) cl.UpdateIntermissionCam(); } - SetCameraOrigin(cl.GetEyePos()); - SetCameraAngle(view_angles); StairSmooth(); - AddPunchAngle(cl.punchangle); SetAFOV(cvar("fov") * pl.viewzoom); @@ -316,7 +333,7 @@ NSView::UpdateView(void) /* move this into NSClient methods */ cl.PostFrame(); -#if 0 +#if 1 Font_DrawText(m_vecPosition + [8,8], "NSView Debug Information", FONT_CON); Font_DrawText(m_vecPosition + [8,20], sprintf("Seat: %i", m_iSeat), FONT_CON); Font_DrawText(m_vecPosition + [8,32], sprintf("FOV: %d", m_flFieldOfView), FONT_CON); diff --git a/src/client/cmd.qc b/src/client/cmd.qc index f6c25dc9..c2d3491d 100644 --- a/src/client/cmd.qc +++ b/src/client/cmd.qc @@ -101,8 +101,8 @@ CMD_setpos(void) void CMD_setang(void) { - setproperty(VF_CL_VIEWANGLES, stov(argv(1))); - setproperty(VF_ANGLES, stov(argv(1))); + g_view.SetCameraAngle(stov(argv(1))); + g_view.SetClientAngle(stov(argv(1))); } void diff --git a/src/client/defs.h b/src/client/defs.h index f1920641..994cfd21 100644 --- a/src/client/defs.h +++ b/src/client/defs.h @@ -119,14 +119,14 @@ drawpic3d(vector worldpos, string mat, vector sz, vector rgb, float alpha) drawpic3d_visible(vector p1) { vector delta; float fov; - vector p2 = getproperty(VF_ORIGIN); - vector ang = getproperty(VF_CL_VIEWANGLES); + vector p2 = g_view.GetCameraOrigin(); + vector ang = g_view.GetCameraAngle(); makevectors(ang); delta = normalize (p1 - p2); fov = delta * v_forward; - if (fov > (getproperty(VF_AFOV)/180)) { + if (fov > (g_view.GetAFOV()/180)) { traceline(p2, p1, MOVE_WORLDONLY, self); if (trace_fraction == 1.0) { return (1); diff --git a/src/client/entry.qc b/src/client/entry.qc index 83627f45..9c9c4759 100644 --- a/src/client/entry.qc +++ b/src/client/entry.qc @@ -259,7 +259,13 @@ CSQC_UpdateView(float w, float h, float focus) pSeat = &g_seats[s]; 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; /* set up our single/split viewport */ diff --git a/src/client/event.qc b/src/client/event.qc index 468aa60a..e59556e1 100644 --- a/src/client/event.qc +++ b/src/client/event.qc @@ -115,8 +115,8 @@ Event_Parse(float type) a[0] = readfloat(); a[1] = readfloat(); a[2] = readfloat(); - setproperty(VF_CL_VIEWANGLES, a); - setproperty(VF_ANGLES, a); + g_view.SetCameraAngle(a); + g_view.SetClientAngle(a); break; case EV_SHAKE: if (me.classname == "spectator") diff --git a/src/gs-entbase/client/env_cubemap.qc b/src/gs-entbase/client/env_cubemap.qc index 993baa11..bda7cea4 100644 --- a/src/gs-entbase/client/env_cubemap.qc +++ b/src/gs-entbase/client/env_cubemap.qc @@ -88,9 +88,9 @@ CMap_Shoot(void) print("^3Cubemap processing...\n"); g_vecCubePos = tmp.origin; g_dCubeSize = (float)tmp.m_iSize; - - setproperty(VF_CL_VIEWANGLES, [0,0,0]); - setproperty(VF_ANGLES, [0,0,0]); + + g_view.SetClientAngle([0,0,0]); + g_view.SetCameraAngle([0,0,0]); strReflectcube = sprintf( "env/%s_%d_%d_%d", diff --git a/src/gs-entbase/shared/func_illusionary.qc b/src/gs-entbase/shared/func_illusionary.qc index 70cc918b..e748568a 100644 --- a/src/gs-entbase/shared/func_illusionary.qc +++ b/src/gs-entbase/shared/func_illusionary.qc @@ -37,7 +37,6 @@ func_illusionary:NSRenderableEntity virtual float(entity, float) SendEntity; virtual void(entity, int) Trigger; #else - virtual float() predraw; virtual void(void) Init; #endif }; @@ -90,23 +89,6 @@ func_illusionary::Respawn(void) } } #else -float -func_illusionary::predraw(void) -{ - vector vecPlayer; - - int s = (float)getproperty(VF_ACTIVESEAT); - pSeat = &g_seats[s]; - vecPlayer = pSeat->m_vecPredictedOrigin; - - if (checkpvs(vecPlayer, this) == FALSE) { - return (PREDRAW_NEXT); - } - - super::predraw(); - addentity(self); - return (PREDRAW_NEXT); -} void func_illusionary::Init(void) @@ -120,12 +102,11 @@ func_illusionary::Init(void) } precache_model(model); - setmodel(this, model); - setorigin(this, origin); + SetModel(model); + SetOrigin(origin); SetAngles([0,0,0]); SetMovetype(MOVETYPE_NONE); SetSolid(SOLID_NOT); - angles = [0,0,0]; if (skin == -1 && m_iRenderMode == RM_TEXTURE) SetRenderMode(RM_TRIGGER); diff --git a/src/gs-entbase/shared/func_wall.qc b/src/gs-entbase/shared/func_wall.qc index 4cc9dae0..f83c3eed 100644 --- a/src/gs-entbase/shared/func_wall.qc +++ b/src/gs-entbase/shared/func_wall.qc @@ -37,7 +37,6 @@ func_wall:NSRenderableEntity virtual float(entity, float) SendEntity; virtual void(entity, int) Trigger; #else - virtual float() predraw; virtual void(void) Init; #endif }; @@ -86,24 +85,6 @@ func_wall::Respawn(void) ClearAngles(); } #else -float -func_wall::predraw(void) -{ - vector vecPlayer; - - int s = (float)getproperty(VF_ACTIVESEAT); - pSeat = &g_seats[s]; - vecPlayer = pSeat->m_vecPredictedOrigin; - - if (checkpvs(vecPlayer, this) == FALSE) { - return (PREDRAW_NEXT); - } - - super::predraw(); - addentity(self); - return (PREDRAW_NEXT); -} - void func_wall::Init(void) { @@ -116,11 +97,11 @@ func_wall::Init(void) } precache_model(model); - setmodel(this, model); - setorigin(this, origin); - movetype = MOVETYPE_PUSH; - solid = SOLID_BSP; - angles = [0,0,0]; + SetModel(model); + SetOrigin(origin); + SetAngles([0,0,0]); + SetMovetype(MOVETYPE_NONE); + SetSolid(SOLID_NOT); MakeStatic(); } diff --git a/src/gs-entbase/shared/prop_vehicle_driveable.qc b/src/gs-entbase/shared/prop_vehicle_driveable.qc index 7e9f5537..7e6b10f0 100644 --- a/src/gs-entbase/shared/prop_vehicle_driveable.qc +++ b/src/gs-entbase/shared/prop_vehicle_driveable.qc @@ -187,7 +187,8 @@ prop_vehicle_driveable::UpdateView(void) vecEnd = vecStart + (v_forward * -256) + [0,0,16] + (v_right * 4); other = world; traceline(vecStart, vecEnd, MOVE_OTHERONLY, this); - setproperty(VF_ORIGIN, trace_endpos + (v_forward * 16)); + g_view.SetCameraOrigin(trace_endpos + (v_forward * 16)); + g_view.SetClientAngle(view_angles); } void diff --git a/src/gs-entbase/shared/trigger_camera.qc b/src/gs-entbase/shared/trigger_camera.qc index 99f06926..ddeb0fee 100644 --- a/src/gs-entbase/shared/trigger_camera.qc +++ b/src/gs-entbase/shared/trigger_camera.qc @@ -96,8 +96,8 @@ trigger_camera::ReceiveEntity(float flNew, float flFlags) else pSeat->m_flCameraTime = time + flWait; - setproperty(VF_CL_VIEWANGLES, angles); - setproperty(VF_ANGLES, angles); + g_view.SetCameraAngle(angles); + g_view.SetClientAngle(angles); } classname = "trigger_camera"; diff --git a/src/shared/NSClient.qc b/src/shared/NSClient.qc index a67f6204..1f108ef4 100644 --- a/src/shared/NSClient.qc +++ b/src/shared/NSClient.qc @@ -85,8 +85,8 @@ NSClient::ClientInputFrame(void) void NSClient::UpdateAliveCam(void) { - setproperty(VF_ORIGIN, pSeat->m_vecPredictedOrigin + view_ofs); - setproperty(VF_ANGLES, view_angles + punchangle); + g_view.SetCameraOrigin(GetEyePos()); + g_view.SetCameraAngle(view_angles); } void @@ -94,9 +94,9 @@ NSClient::UpdateDeathcam(void) { /* death cam */ view_angles[2] = 45.0f; - setproperty(VF_ORIGIN, pSeat->m_vecPredictedOrigin); - setproperty(VF_CL_VIEWANGLES, view_angles); - setproperty(VF_ANGLES, view_angles); + + g_view.SetCameraOrigin(GetEyePos()); + g_view.SetCameraAngle(view_angles); } void @@ -104,8 +104,8 @@ NSClient::UpdateIntermissionCam(void) { view_angles = pSeat->m_vecCameraAngle; view_angles += [sin(time), sin(time * 1.5f)] * 0.1f; - setproperty(VF_ORIGIN, pSeat->m_vecCameraOrigin); - setproperty(VF_CL_VIEWANGLES, view_angles); + g_view.SetCameraOrigin(pSeat->m_vecCameraOrigin); + g_view.SetCameraAngle(view_angles); } float diff --git a/src/shared/NSClientPlayer.qc b/src/shared/NSClientPlayer.qc index 3a27f238..fda0aa73 100644 --- a/src/shared/NSClientPlayer.qc +++ b/src/shared/NSClientPlayer.qc @@ -153,11 +153,12 @@ NSClientPlayer::OnRemoveEntity(void) void NSClientPlayer::UpdateAliveCam(void) { - setproperty(VF_ORIGIN, pSeat->m_vecPredictedOrigin + view_ofs); + g_view.SetCameraOrigin(GetEyePos()); + g_view.SetCameraAngle(view_angles); if (vehicle) { NSVehicle veh = (NSVehicle)vehicle; - + if (veh.UpdateView) veh.UpdateView(); } else if (health) { @@ -166,12 +167,12 @@ NSClientPlayer::UpdateAliveCam(void) vector vStart = [pSeat->m_vecPredictedOrigin[0], pSeat->m_vecPredictedOrigin[1], pSeat->m_vecPredictedOrigin[2] + 16] + (v_right * 4); vector vEnd = vStart + (v_forward * -48) + [0,0,16] + (v_right * 4); traceline(vStart, vEnd, FALSE, self); - setproperty(VF_ORIGIN, trace_endpos + (v_forward * 5)); + g_view.SetCameraOrigin(trace_endpos + (v_forward * 5)); } } Shake_Update(this); - setproperty(VF_ANGLES, view_angles + punchangle); + g_view.AddPunchAngle(punchangle); } /* diff --git a/src/shared/NSEntity.qc b/src/shared/NSEntity.qc index 8198558c..4f453c3a 100644 --- a/src/shared/NSEntity.qc +++ b/src/shared/NSEntity.qc @@ -83,7 +83,6 @@ NSEntity::WaterLevel(void) return waterlevel; } - /* ============ NSEntity::VisibleVec @@ -234,7 +233,7 @@ void NSEntity::RendererRestarted(void) { -}; +} /* ============ @@ -481,21 +480,25 @@ NSEntity::ParentUpdate(void) m_eTouchLast = __NULL__; } } + entity NSEntity::GetParent(void) { return find(world, ::targetname, m_parent); } + void NSEntity::SetParent(string name) { m_parent = name; } + void NSEntity::SetParentAttachment(string name) { m_parent_attachment = name; } + void NSEntity::ClearParent(void) { @@ -508,6 +511,7 @@ NSEntity::RestoreAngles(void) { angles = GetSpawnAngles(); } + void NSEntity::ClearAngles(void) { @@ -519,19 +523,19 @@ void NSEntity::SetOwner(entity newOwner) { owner = newOwner; -}; +} void NSEntity::SetVelocity(vector vecNew) { velocity = vecNew; -}; +} void NSEntity::SetTouch(void() newTouch) { touch = newTouch; -}; +} /* we want to really use those set functions because they'll notify of any * networking related changes. otherwise we'll have to keep track of copies @@ -561,6 +565,7 @@ NSEntity::SetSolid(float newSolid) { solid = newSolid; } + void NSEntity::SetScale(float newScale) { @@ -784,7 +789,6 @@ NSEntity::GetFlags(void) return flags; } - vector NSEntity::GetSpawnOrigin(void) { @@ -1016,7 +1020,7 @@ NSEntity::Destroy(void) nextthink = time + 0.01; else nextthink = time; -}; +} void NSEntity::Spawned(void) diff --git a/src/shared/NSRenderableEntity.qc b/src/shared/NSRenderableEntity.qc index 3ae2d16f..40c9f551 100644 --- a/src/shared/NSRenderableEntity.qc +++ b/src/shared/NSRenderableEntity.qc @@ -713,6 +713,7 @@ NSRenderableEntity::Respawn(void) void NSRenderableEntity::Show(void) { + /* this needs to be more useful */ } void @@ -728,11 +729,9 @@ NSRenderableEntity::Hide(void) void NSRenderableEntity::SetEffects(float newEffects) { - if (newEffects == effects) - return; - effects = newEffects; } + void NSRenderableEntity::SetFrame(float newFrame) { @@ -742,22 +741,19 @@ NSRenderableEntity::SetFrame(float newFrame) frame = newFrame; frame1time = 0.0f; } + void NSRenderableEntity::SetSkin(float newSkin) { - if (newSkin == skin) - return; - skin = newSkin; } + void NSRenderableEntity::SetBody(int newBody) { - if (newBody == m_iBody) - return; - m_iBody = newBody; } + void NSRenderableEntity::SetScale(float newScale) { @@ -771,33 +767,24 @@ NSRenderableEntity::SetScale(float newScale) void NSRenderableEntity::SetRenderFX(float newFX) { - if (newFX == m_iRenderFX) - return; - m_iRenderFX = newFX; } + void NSRenderableEntity::SetRenderMode(float newMode) { - if (newMode == m_iRenderMode) - return; - m_iRenderMode = newMode; } + void NSRenderableEntity::SetRenderAmt(float newAmt) { - if (newAmt == m_flRenderAmt) - return; - m_flRenderAmt = newAmt; } + void NSRenderableEntity::SetRenderColor(vector newColor) { - if (newColor == m_vecRenderColor) - return; - m_vecRenderColor = newColor; } @@ -836,41 +823,49 @@ NSRenderableEntity::GetRenderMode(void) { return m_iRenderMode; } + float NSRenderableEntity::GetRenderFX(void) { return m_iRenderFX; } + float NSRenderableEntity::GetRenderAmt(void) { return m_flRenderAmt; } + vector NSRenderableEntity::GetRenderColor(void) { return m_vecRenderColor; } + float NSRenderableEntity::GetBoneControl1(void) { return m_flBoneControl1; } + float NSRenderableEntity::GetBoneControl2(void) { return m_flBoneControl2; } + float NSRenderableEntity::GetBoneControl3(void) { return m_flBoneControl3; } + float NSRenderableEntity::GetBoneControl4(void) { return m_flBoneControl4; } + float NSRenderableEntity::GetBoneControl5(void) { @@ -892,6 +887,7 @@ NSRenderableEntity::Save(float handle) SaveFloat(handle, "rendermode", m_iRenderMode); SaveFloat(handle, "renderfx", m_iRenderFX); } + void NSRenderableEntity::Restore(string strKey, string strValue) {