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