mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-28 17:13:03 +00:00
279 lines
6.6 KiB
C++
279 lines
6.6 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
#ifndef IN_SIXENSE_H
|
|
#define IN_SIXENSE_H
|
|
|
|
#include "mathlib/vector.h"
|
|
#include "vgui_controls/Frame.h"
|
|
#include "vgui_controls/Label.h"
|
|
#include "vgui_video.h"
|
|
#include "convar.h"
|
|
#include "usercmd.h"
|
|
#include "tier1/utlstring.h"
|
|
#include "GameEventListener.h"
|
|
#include "in_sixense_gesture_bindings.h"
|
|
|
|
|
|
#if defined( CLIENT_DLL )
|
|
class C_Portal_Player;
|
|
#define CPortal_Player C_Portal_Player
|
|
#else
|
|
class CPortal_Player;
|
|
#endif
|
|
|
|
// forward declarations
|
|
namespace sixenseUtils {
|
|
class IFPSViewAngles;
|
|
class IFPSPlayerMovement;
|
|
class IFPSEvents;
|
|
class IFPSMeleeWeapon;
|
|
|
|
class IDerivatives;
|
|
class IButtonStates;
|
|
class ILaserPointer;
|
|
|
|
class IControllerManager;
|
|
};
|
|
|
|
class SixenseInput : public CGameEventListener
|
|
{
|
|
|
|
public:
|
|
bool LoadModules();
|
|
bool UnloadModules();
|
|
|
|
SixenseInput();
|
|
~SixenseInput();
|
|
|
|
|
|
void Init();
|
|
void PostInit();
|
|
void Shutdown();
|
|
#ifdef PORTAL2
|
|
bool IsBaseWarningUp();
|
|
void PlayerPortalled( const VMatrix &PortalMatrix );
|
|
void SetOneToOneMode( bool bOnOrOff );
|
|
|
|
inline QAngle GetAnglesToRightHand() { return m_AnglesToRightHand; }
|
|
inline QAngle GetAnglesToLeftHand() { return m_AnglesToLeftHand; }
|
|
|
|
// If the right trigger is held and a melee weapon is selected, go to 1-to-1 melee mode
|
|
bool IsInOneToOneMode();
|
|
bool IsInAlwaysOneToOneMode();
|
|
|
|
void FixPortalView();
|
|
void SetPortalTweakingParameters( bool bIsTweaking );
|
|
|
|
bool IsHoldingObject();
|
|
|
|
C_BaseEntity *GetHeldObject();
|
|
#endif
|
|
|
|
bool IsEnabled();
|
|
bool IsLeftHanded();
|
|
|
|
// SixenseFrame computes the view parameters from the controllers. Should be called once per frame
|
|
bool SixenseFrame( float flFrametime, CUserCmd *pCmd );
|
|
void SixenseUpdateKeys( float flFrametime, CUserCmd *pCmd );
|
|
|
|
bool SendKeyToActiveWindow(ButtonCode_t key);
|
|
void SixenseUpdateMouseCursor();
|
|
void SixenseUpdateControllerManager();
|
|
void controllerManagerCallback( int );
|
|
inline void ResetFrameTime( float flTime ) { m_fRemainingFrameTime = flTime; }
|
|
|
|
// Set the engine's view angles
|
|
void SetView( float flInputSampleFrametime, CUserCmd *pCmd );
|
|
void SetMode( int nMode );
|
|
void ResetView( QAngle SpawnAngles );
|
|
void SetEnabled( bool bEnabled );
|
|
void LoadDefaultSettings( int nLevel );
|
|
bool InMenuMode();
|
|
|
|
|
|
QAngle GetViewAngles();
|
|
QAngle GetViewAngleOffset();
|
|
|
|
void ForceViewAngles( QAngle angles );
|
|
bool IsSixenseMap();
|
|
void CreateGUI( vgui::VPANEL parent );
|
|
void SwitchViewModes( CUserCmd *pCmd );
|
|
|
|
// playerIndex = (0 to 3), handIndex = (left = 0 or right = 1)
|
|
void Rumble( unsigned char nIndex, unsigned char nRumbleData, unsigned char nRumbleFlags );
|
|
void Rumble( unsigned char nPlayerIndex, unsigned char nHandIndex, unsigned char nRumbleData, unsigned char nRumbleFlags );
|
|
|
|
void SetFilter( float f );
|
|
void GetFOV( float *pHfov, float *pVfov );
|
|
|
|
#ifdef SIXENSE_PLAYER_DATA
|
|
void SetPlayerHandPositions( CUserCmd *pCmd, float flFrametime );
|
|
#endif
|
|
|
|
void SetBaseOffset();
|
|
void SetFilterLevel( float flNearRange, float flNearVal, float flFarRange, float flFarVal );
|
|
|
|
static class SixenseGUIFrame *m_SixenseFrame;
|
|
|
|
bool IsAimingForwards();
|
|
|
|
|
|
|
|
virtual void FireGameEvent( IGameEvent *pEvent );
|
|
|
|
void BlendView();
|
|
|
|
void DisableFreeAimSpin( int nDisable );
|
|
void DisableGestures( int nDisable );
|
|
void PlayerSpawn();
|
|
bool AreBindingsDisabled();
|
|
|
|
void LeftPointGesture( bool start );
|
|
void RightPointGesture( bool start );
|
|
|
|
void StartRatchet();
|
|
void StopRatchet();
|
|
|
|
void CheckWeaponForScope();
|
|
|
|
SixenseGestureBindings *GetGestureBindings();
|
|
|
|
void InstallConvarCallbacks();
|
|
void UpdateValuesFromConvars();
|
|
void ConvarChanged();
|
|
|
|
private:
|
|
|
|
bool m_bIsEnabled; // sixense.dll loaded
|
|
bool m_bIsActive; // controllers not docked
|
|
|
|
bool m_bModulesLoaded;
|
|
|
|
bool m_bWasInMenuMode;
|
|
|
|
#ifdef PORTAL2
|
|
bool m_bJustPortalled;
|
|
|
|
bool m_bIsLeftTriggerDown;
|
|
bool m_bIsRightTriggerDown;
|
|
|
|
bool m_bIsIn1to1Mode;
|
|
bool m_bIs1to1ModeLocked;
|
|
bool m_bIs1to1ModeScaling;
|
|
bool m_bIs1to1ModeRatcheting;
|
|
|
|
bool m_bExitOneWhenAimingForwards;
|
|
bool m_bScalingLockedOneToOne;
|
|
|
|
bool m_bIsTweaking;
|
|
|
|
float m_fDisableJumpUntil;
|
|
|
|
int m_nGlowIndex;
|
|
|
|
float m_fLastHorizSpeedMult;
|
|
float m_fLastVertSpeedMult;
|
|
|
|
QAngle m_AnglesToRightHand, m_AnglesToLeftHand;
|
|
|
|
float m_fTweakSixenseAimFreeaimAccelBandExponent;
|
|
float m_fTweakSixenseAimFreeaimAutoLevelRate;
|
|
float m_fTweakSixenseAimFreeaimAccelBandSize;
|
|
float m_fTweakSixenseAimFreeaimMaxSpeed;
|
|
float m_fTweakSixenseAimFreeaimDeadZoneRadius;
|
|
float m_fTweakSixenseAimFreeaimHeadingMultiplier;
|
|
float m_fTweakSixenseAimFreeaimPitchMultiplier;
|
|
float m_fTweakSixenseAim1to1HeadingMultiplier;
|
|
float m_fTweakSixenseAim1to1PitchMultiplier;
|
|
|
|
Vector3 m_GrabPos;
|
|
#endif
|
|
|
|
bool m_bConvarChanged;
|
|
|
|
bool m_bPlayerValid;
|
|
|
|
float m_fRemainingFrameTime;
|
|
|
|
bool m_bScopeSwitchedMode;
|
|
sixenseUtils::IFPSViewAngles::fps_mode m_nScopeSwitchedPrevMode;
|
|
int m_nScopeSwitchedPrevSpringViewEnabled;
|
|
|
|
float m_fTeleportWaitToBlendTime;
|
|
|
|
class ISixenseAPI *m_pSixenseAPI;
|
|
|
|
struct _sixenseAllControllerData *m_pACD;
|
|
|
|
class sixenseUtils::IFPSViewAngles *m_pFPSViewAngles;
|
|
class sixenseUtils::IFPSPlayerMovement *m_pFPSPlayerMovement;
|
|
class sixenseUtils::IFPSEvents *m_pFPSEvents;
|
|
|
|
class sixenseUtils::IDerivatives *m_pLeftDeriv, *m_pRightDeriv;
|
|
class sixenseUtils::IButtonStates *m_pLeftButtonStates, *m_pRightButtonStates;
|
|
class sixenseUtils::ILaserPointer *m_pLaserPointer;
|
|
|
|
class sixenseUtils::IControllerManager *m_pControllerManager;
|
|
|
|
int m_LastViewMode;
|
|
int m_nLeftIndex, m_nRightIndex;
|
|
|
|
void PlayerDroppedEntity( int entityID );
|
|
void PlayerUsedEntity( int entityID );
|
|
|
|
bool m_bMoveMouseToCenter;
|
|
int m_nFilterLevel;
|
|
unsigned char m_nLastLeftSequence, m_nLastRightSequence;
|
|
bool m_bShouldSetBaseOffset;
|
|
bool m_bJustSpawned;
|
|
|
|
#ifdef WATERMARK
|
|
class SixenseWatermarkFrame *m_WatermarkFrame;
|
|
#endif
|
|
|
|
int m_nFreeaimSpinDisabled;
|
|
int m_nGesturesDisabled;
|
|
|
|
bool m_nShouldUnduck;
|
|
|
|
SixenseGestureBindings *m_pGestureBindings;
|
|
};
|
|
|
|
extern SixenseInput *g_pSixenseInput;
|
|
|
|
|
|
class SixenseGUIFrame : public vgui::Frame
|
|
{
|
|
DECLARE_CLASS_SIMPLE( SixenseGUIFrame, vgui::Frame );
|
|
|
|
public:
|
|
|
|
// Construction
|
|
SixenseGUIFrame( vgui::VPANEL parent, char const *pPanelName );
|
|
virtual ~SixenseGUIFrame();
|
|
|
|
void setImage( CUtlString img_name );
|
|
|
|
virtual void SetVisible( bool bState );
|
|
|
|
private:
|
|
|
|
vgui::ImagePanel *m_ImagePanel;
|
|
|
|
};
|
|
|
|
#ifdef PORTAL2
|
|
class SixenseBaseWarning : public vgui::Frame
|
|
{
|
|
DECLARE_CLASS_SIMPLE( SixenseBaseWarning, vgui::Frame );
|
|
public:
|
|
SixenseBaseWarning( vgui::Panel *parent, char const *name );
|
|
//virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
|
|
protected:
|
|
//virtual void PaintBackground();
|
|
virtual void ApplySchemeSettings(vgui::IScheme *pScheme);
|
|
vgui::Label *_label;
|
|
};
|
|
#endif
|
|
|
|
#endif
|