]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add different physics hud _acceleration_max cvar for slick
authorotta8634 <k9wolf@pm.me>
Tue, 24 Sep 2024 08:05:22 +0000 (16:05 +0800)
committerotta8634 <k9wolf@pm.me>
Tue, 24 Sep 2024 08:05:22 +0000 (16:05 +0800)
While on slick acceleration is much higher, so the default
_acceleration_max is useless until very high speeds (e.g. ~2800 qu/s).
Reuses some code from strafehud. Later a lot of the shared code should be
migrated to a shared file instead.
Currently physics hud only uses csqcplayer instead of fetching the
playermodel from the server. Using strafehud's code this too would also fix
the associated issues

_hud_common.cfg
qcsrc/client/hud/panel/physics.qc
qcsrc/client/hud/panel/physics.qh

index 847f36d92be61322b9b01b6685c65d694c530ec7..e8bbe37c49032ffcd280b12e75a1aa9a7706457d 100644 (file)
@@ -108,6 +108,7 @@ seta hud_panel_engineinfo_framecounter_decimals "0" "amount of decimals to show"
 seta hud_panel_engineinfo_framecounter_time "0.1" "time between framerate display updates"
 
 seta hud_panel_physics_acceleration_movingaverage "1" "use an averaging method for calculating acceleration instead of the real value"
+seta hud_panel_physics_acceleration_max_slick "-1" "acceleration progressbar gets completely filled up by this value (in g) while on slick, -1 = same as the normal max"
 seta hud_panel_physics_update_interval "0.016" "how often (in seconds) numeric values get updated on screen"
 seta hud_panel_physics_jumpspeed "0" "also show jump speed, replacing the speed unit text"
 seta hud_panel_physics_jumpspeed_time "1" "how many seconds the jump speed takes to fade out"
index 2da1903aab5191f9baa2032c0be0012ee3f4f8ca..12e7c34eb7f0b7de67b9711c07adcd98dd264971 100644 (file)
@@ -56,6 +56,19 @@ void HUD_Physics()
 
        draw_beginBoldFont();
 
+       bool onslick = false;
+       if(IS_ONGROUND(csqcplayer))
+       {
+               if(PHYS_FRICTION(csqcplayer) == 0)
+                       onslick = true;
+               else // don't use IS_ONSLICK(), it only works for the local player and only if client prediction is enabled
+               {
+                       trace_dphitq3surfaceflags = 0;
+                       tracebox(csqcplayer.origin, csqcplayer.mins, csqcplayer.maxs, csqcplayer.origin - '0 0 1', MOVE_NOMONSTERS, csqcplayer);
+                       onslick = trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK;
+               }
+       }
+
        float acceleration_progressbar_scale = 0;
        if(autocvar_hud_panel_physics_progressbar && autocvar_hud_panel_physics_acceleration_progressbar_scale > 1)
                acceleration_progressbar_scale = autocvar_hud_panel_physics_acceleration_progressbar_scale;
@@ -296,7 +309,10 @@ void HUD_Physics()
                else
                        progressbar_color = autocvar_hud_progressbar_acceleration_color;
 
-               f = acceleration/autocvar_hud_panel_physics_acceleration_max;
+               float acceleration_max = onslick && autocvar_hud_panel_physics_acceleration_max_slick != -1
+                       ? autocvar_hud_panel_physics_acceleration_max_slick
+                       : autocvar_hud_panel_physics_acceleration_max;
+               f = acceleration / acceleration_max;
                if (autocvar_hud_panel_physics_acceleration_progressbar_nonlinear)
                        f = (f >= 0 ? sqrt(f) : -sqrt(-f));
 
index 6293dd1685f71fb53930725b1d52132c29c54a45..500ef4a38ffc5e4e94e717e4197bd25818e4c2a7 100644 (file)
@@ -7,6 +7,7 @@ float autocvar_hud_panel_physics_acceleration_progressbar_mode;
 float autocvar_hud_panel_physics_acceleration_progressbar_scale;
 float autocvar_hud_panel_physics_acceleration_progressbar_nonlinear;
 float autocvar_hud_panel_physics_acceleration_max;
+float autocvar_hud_panel_physics_acceleration_max_slick = -1;
 float autocvar_hud_panel_physics_update_interval;
 int autocvar_hud_panel_physics_progressbar;
 bool autocvar_hud_panel_physics_acceleration_vertical;