From: divverent Date: Mon, 12 Jul 2010 18:05:07 +0000 (+0000) Subject: Attempt to implement sideway view bobbing as well, for better simulation of steps... X-Git-Tag: xonotic-v0.1.0preview~230^2~188 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=0895d56c3531cf7c7e63cd0951abdada67e0912b;p=xonotic%2Fdarkplaces.git Attempt to implement sideway view bobbing as well, for better simulation of steps (a copy of the current view bobbing code with its own cvars, meant to bob to the side of the player). 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 git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@10290 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/view.c b/view.c index 7e6223de..c01f8175 100644 --- 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);