You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.0 KiB
79 lines
3.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
#ifndef VEHICLE_VIEWBLEND_SHARED_H |
|
#define VEHICLE_VIEWBLEND_SHARED_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
// Definition for how to calculate a point on the remap curve |
|
enum RemapAngleRange_CurvePart_t |
|
{ |
|
RemapAngleRange_CurvePart_Zero = 0, |
|
RemapAngleRange_CurvePart_Spline, |
|
RemapAngleRange_CurvePart_Linear, |
|
}; |
|
|
|
// If we enter the linear part of the remap for curve for any degree of freedom, we can lock |
|
// that DOF (stop remapping). This is useful for making flips feel less spastic as we oscillate |
|
// randomly between different parts of the remapping curve. |
|
struct ViewLockData_t |
|
{ |
|
float flLockInterval; // The duration to lock the view when we lock it for this degree of freedom. |
|
// 0 = never lock this degree of freedom. |
|
|
|
bool bLocked; // True if this DOF was locked because of the above condition. |
|
|
|
float flUnlockTime; // If this DOF is locked, the time when we will unlock it. |
|
|
|
float flUnlockBlendInterval; // If this DOF is locked, how long to spend blending out of the locked view when we unlock. |
|
}; |
|
|
|
// This is separate from the base vehicle implementation so that any class |
|
// that derives from IClientVehicle can use it. To use it, contain one of the |
|
// following structs, fill out the first section, and then call VehicleViewSmoothing() |
|
// inside your GetVehicleViewPosition() function. |
|
struct ViewSmoothingData_t |
|
{ |
|
DECLARE_SIMPLE_DATADESC(); |
|
|
|
// Fill these out in your vehicle |
|
CBaseAnimating *pVehicle; |
|
bool bClampEyeAngles; // Perform eye Z clamping |
|
float flPitchCurveZero; // Pitch values below this are clamped to zero. |
|
float flPitchCurveLinear; // Pitch values above this are mapped directly. |
|
// Spline in between. |
|
float flRollCurveZero; // Pitch values below this are clamped to zero. |
|
float flRollCurveLinear; // Roll values above this are mapped directly. |
|
// Spline in between. |
|
float flFOV; // FOV when in the vehicle. |
|
|
|
ViewLockData_t pitchLockData; |
|
ViewLockData_t rollLockData; |
|
|
|
bool bDampenEyePosition; // Only set to true for C_PropVehicleDriveable derived vehicles |
|
|
|
// Don't change these, they're used by VehicleViewSmoothing() |
|
bool bRunningEnterExit; |
|
bool bWasRunningAnim; |
|
float flEnterExitStartTime; // Time we began our animation at |
|
float flEnterExitDuration; // Duration of the animation |
|
QAngle vecAnglesSaved; |
|
Vector vecOriginSaved; |
|
QAngle vecAngleDiffSaved; // The original angular error between the entry/exit anim and player's view when we started playing the anim. |
|
QAngle vecAngleDiffMin; // Tracks the minimum angular error achieved so we can converge on the anim's angles. |
|
}; |
|
|
|
// TEMP: Shared vehicle view smoothing |
|
void SharedVehicleViewSmoothing(CBasePlayer *pPlayer, |
|
Vector *pAbsOrigin, QAngle *pAbsAngles, |
|
bool bEnterAnimOn, bool bExitAnimOn, |
|
const Vector &vecEyeExitEndpoint, |
|
ViewSmoothingData_t *pData, |
|
float *pFOV ); |
|
|
|
#endif // VEHICLE_VIEWBLEND_SHARED_H
|
|
|