]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
Attempt to implement sideway view bobbing as well, for better simulation of steps...
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 12 Jul 2010 18:05:07 +0000 (18:05 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 12 Jul 2010 18:05:07 +0000 (18:05 +0000)
This is not ready yet! The commit before this is stable. Still trying to figure out how to make the X and Y axes both work as the player's side.

From: MirceaKitsune <sonichedgehog_hyperblast00@yahoo.com>

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@10290 d7cf8633-e32d-0410-b094-e92efae38249

view.c

diff --git a/view.c b/view.c
index 7e6223de28a2ff07ca808b92665837c7c6ac1947..c01f817516622144bb023f76529f3597b64af6bc 100644 (file)
--- a/view.c
+++ b/view.c
@@ -39,6 +39,11 @@ cvar_t cl_rollangle = {0, "cl_rollangle", "2.0", "how much to tilt the view when
 cvar_t cl_bob = {CVAR_SAVE, "cl_bob","0.02", "view bobbing amount"};
 cvar_t cl_bobcycle = {CVAR_SAVE, "cl_bobcycle","0.6", "view bobbing speed"};
 cvar_t cl_bobup = {CVAR_SAVE, "cl_bobup","0.5", "view bobbing adjustment that makes the up or down swing of the bob last longer"};
+
+cvar_t cl_bob_side = {CVAR_SAVE, "cl_bob_side","0.02", "view bobbing amount"};
+cvar_t cl_bobcycle_side = {CVAR_SAVE, "cl_bobcycle_side","0.6", "view bobbing speed"};
+cvar_t cl_bobup_side = {CVAR_SAVE, "cl_bobup_side","0.5", "view bobbing adjustment that makes the sideways swing of the bob last longer"};
+
 cvar_t cl_bobroll = {CVAR_SAVE, "cl_bobroll","0", "view rolling amount"};
 cvar_t cl_bobrollcycle = {CVAR_SAVE, "cl_bobrollcycle","0.8", "view rolling speed"};
 cvar_t cl_bobrollairtime = {CVAR_SAVE, "cl_bobrollairtime","0.05", "how fast the view rolls back when you stop touching the ground"};
@@ -588,7 +593,7 @@ void V_CalcRefdef (void)
                                VectorAdd(vieworg, cl.punchvector, vieworg);
                                if (cl.stats[STAT_HEALTH] > 0)
                                {
-                                       double xyspeed, bob, bobroll;
+                                       double xyspeed, bob, bob2, bobroll;
                                        float cycle, cycle2;
                                        vec_t frametime;
 
@@ -665,6 +670,34 @@ void V_CalcRefdef (void)
                                                gunorg[2] += bound(-7, bob, 4);
                                        }
 
+                                       // view bobbing code 2
+                                       if (cl_bob_side.value && cl_bobcycle_side.value)
+                                       {
+                                               // LordHavoc: this code is *weird*, but not replacable (I think it
+                                               // should be done in QC on the server, but oh well, quake is quake)
+                                               // LordHavoc: figured out bobup: the time at which the sin is at 180
+                                               // degrees (which allows lengthening or squishing the peak or valley)
+                                               cycle = cl.time / cl_bobcycle_side.value;
+                                               cycle -= (int) cycle;
+                                               if (cycle < cl_bobup_side.value)
+                                                       cycle = sin(M_PI * cycle / cl_bobup_side.value);
+                                               else
+                                                       cycle = sin(M_PI + M_PI * (cycle-cl_bobup_side.value)/(1.0 - cl_bobup_side.value));
+                                               // bob is proportional to velocity in the xy plane
+                                               // (don't count Z, or jumping messes it up)
+                                               bob = xyspeed * cl_bob_side.value;
+                                               bob = bob*0.3 + bob*0.7*cycle;
+                                               vieworg[1] += bound(-7, bob, 4);
+                                               vieworg[0] += bound(-7, bob, 4);
+                                               // we also need to adjust gunorg, or this appears like pushing the gun!
+                                               // In the old code, this was applied to vieworg BEFORE copying to gunorg,
+                                               // but this is not viable with the new followmodel code as that would mean
+                                               // that followmodel would work on the munged-by-bob vieworg and do feedback
+                                               gunorg[1] += bound(-7, bob, 4);
+                                               gunorg[0] += bound(-7, bob, 4);
+                                               //vieworg[0] += bound(-7, bob, 4);
+                                       }
+
                                        // view rolling code
                                        if (cl_bobroll.value && cl_bobrollcycle.value)
                                        {
@@ -926,6 +959,11 @@ void V_Init (void)
        Cvar_RegisterVariable (&cl_bob);
        Cvar_RegisterVariable (&cl_bobcycle);
        Cvar_RegisterVariable (&cl_bobup);
+
+       Cvar_RegisterVariable (&cl_bob_side);
+       Cvar_RegisterVariable (&cl_bobcycle_side);
+       Cvar_RegisterVariable (&cl_bobup_side);
+
        Cvar_RegisterVariable (&cl_bobroll);
        Cvar_RegisterVariable (&cl_bobrollcycle);
        Cvar_RegisterVariable (&cl_bobrollairtime);