//----------------------------------------------- // Response curve function specifically for the // 'look' analog stick. // // when AXIS == YAW, otherAxisValue contains the // value for the pitch of the control stick, and // vice-versa. //----------------------------------------------- static float ResponseCurveLook( int curve, float x, int axis, float otherAxis, float dist ) { float input = x; // Make X positive to make things easier, just remember whether we have to flip it back! bool negative = false; if( x < 0.0f ) { negative = true; x *= -1; } // Perform the two-stage mapping. if( x > joy_lowend.GetFloat() ) { float highmap = 1.0f - joy_lowmap.GetFloat(); float xNormal = x - joy_lowend.GetFloat(); float factor = xNormal / ( 1.0f - joy_lowend.GetFloat() ); x = joy_lowmap.GetFloat() + (highmap * factor); // Accelerate. if( controlEnvelope.envelopeScale[axis] < 1.0f ) { float delta = x - joy_lowmap.GetFloat(); x = joy_lowmap.GetFloat() + (delta * controlEnvelope.envelopeScale[axis]); controlEnvelope.envelopeScale[axis] += ( gpGlobals->frametime * joy_accelscale.GetFloat() ); if( controlEnvelope.envelopeScale[axis] > 1.0f ) { controlEnvelope.envelopeScale[axis] = 1.0f; } } } else { // Shut off acceleration controlEnvelope.envelopeScale[axis] = 0.0f; float factor = x / joy_lowend.GetFloat(); x = joy_lowmap.GetFloat() * factor; } x *= AutoAimDampening( input, axis, dist ); if( axis == PITCH && input != 0.0f && joy_display_input.GetBool() ) { Msg("In:%f Out:%f\n", input, x ); } if( negative ) { x *= -1; } return x; }
static float ResponseCurveLookAccelerated( float x, int axis, float otherAxis, float dist, float frametime ) { float input = x; float flJoyDist = ( sqrt(x*x + otherAxis * otherAxis) ); bool bIsPegged = ( flJoyDist>= joy_pegged.GetFloat() ); // Make X positive to make arithmetic easier for the rest of this function, and // remember whether we have to flip it back! bool negative = false; if( x < 0.0f ) { negative = true; x *= -1; } // Perform the two-stage mapping. bool bDoAcceleration = false;// Assume we won't accelerate the input if( bIsPegged && x > joy_accel_filter.GetFloat() ) { // Accelerate this axis, since the stick is pegged and // this axis is pressed farther than the acceleration filter // Take the lowmap value, or the input, whichever is higher, since // we don't necesarily know whether this is the axis which is pegged x = MAX( joy_lowmap.GetFloat(), x ); bDoAcceleration = true; } else { // Joystick is languishing in the low-end, turn off acceleration. controlEnvelope.envelopeScale[axis] = 0.0f; float factor = x / joy_lowend.GetFloat(); x = joy_lowmap.GetFloat() * factor; } if( bDoAcceleration ) { float flMax = joy_accelmax.GetFloat(); if( controlEnvelope.envelopeScale[axis] < flMax ) { float delta = x - joy_lowmap.GetFloat(); x = joy_lowmap.GetFloat() + (delta * controlEnvelope.envelopeScale[axis]); controlEnvelope.envelopeScale[axis] += ( frametime * joy_accelscale.GetFloat() ); if( controlEnvelope.envelopeScale[axis] > flMax ) { controlEnvelope.envelopeScale[axis] = flMax; } } } x *= AutoAimDampening( input, axis, dist ); if( axis == YAW && input != 0.0f && joy_display_input.GetBool() ) { Msg("In:%f Out:%f Frametime:%f\n", input, x, frametime ); } if( negative ) { x *= -1; } return x; }
static float ResponseCurveLookDefault( float x, int axis, float otherAxis, float dist, float frametime ) { float input = x; bool bStickIsPhysicallyPegged = ( dist >= joy_pegged.GetFloat() ); // Make X positive to make things easier, just remember whether we have to flip it back! bool negative = false; if( x < 0.0f ) { negative = true; x *= -1; } if( axis == YAW && joy_virtual_peg.GetBool() ) { if( x >= 0.95f ) { // User has pegged the stick controlEnvelope.peggedAxis[axis] = true; controlEnvelope.axisPeggedDir[axis] = negative; } if( controlEnvelope.peggedAxis[axis] == true ) { // User doesn't have the stick pegged on this axis, but they used to. // If the stick is physically pegged, pretend this axis is still pegged. if( bStickIsPhysicallyPegged && negative == controlEnvelope.axisPeggedDir[axis] ) { // If the user still has the stick physically pegged and hasn't changed direction on // this axis, keep pretending they have the stick pegged on this axis. x = 1.0f; } else { controlEnvelope.peggedAxis[axis] = false; } } } // Perform the two-stage mapping. if( x > joy_lowend.GetFloat() ) { float highmap = 1.0f - joy_lowmap.GetFloat(); float xNormal = x - joy_lowend.GetFloat(); float factor = xNormal / ( 1.0f - joy_lowend.GetFloat() ); x = joy_lowmap.GetFloat() + (highmap * factor); // Accelerate. if( controlEnvelope.envelopeScale[axis] < 1.0f ) { controlEnvelope.envelopeScale[axis] += ( frametime * joy_accelscale.GetFloat() ); if( controlEnvelope.envelopeScale[axis] > 1.0f ) { controlEnvelope.envelopeScale[axis] = 1.0f; } } float delta = x - joy_lowmap.GetFloat(); x = joy_lowmap.GetFloat() + (delta * controlEnvelope.envelopeScale[axis]); } else { // Shut off acceleration controlEnvelope.envelopeScale[axis] = 0.0f; float factor = x / joy_lowend.GetFloat(); x = joy_lowmap.GetFloat() * factor; } x *= AutoAimDampening( input, axis, dist ); if( axis == YAW && x > 0.0f && joy_display_input.GetBool() ) { Msg("In:%f Out:%f Frametime:%f\n", input, x, frametime ); } if( negative ) { x *= -1; } return x; }