This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
nekohook/modules/source2013/sdk/game/shared/vehicle_viewblend_shared.h
2020-08-04 13:13:01 -04:00

86 lines
3.4 KiB
C

//========= 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