//========= Copyright Valve Corporation, All rights reserved. ============// #ifndef IN_SIXENSE_GESTURES_H #define IN_SIXENSE_GESTURES_H #ifdef _WIN32 #pragma once #endif #include class SixenseGestureBindings { public: SixenseGestureBindings(); // Add a new binding. release_command can be empty. If press_command starts with '+', a release_command is generated with '-'. void AddBinding( CUtlString hand, CUtlString action, CUtlString arg, CUtlString press_command, CUtlString release_command ); // Print bindings to console void ListBindings(); // Write the bindings to a cfg file that can be loaded from the console or at startup (defaults to sixense_bindings.cfg) void WriteBindings( CUtlString filename ); // Clear all bindings void ClearBindings(); // Delete the nth binding void DeleteBinding( int n ); // Create a set of default bindings appropriate for this game void CreateDefaultBindings(); // Check to see if any bindings need to be triggered. disable_activations allows the caller to prevent new bindings from being triggered, while // still allowing enabled gestures to disable. void UpdateBindings( sixenseUtils::IButtonStates *pLeftButtonStates, sixenseUtils::IButtonStates *pRightButtonStates, bool bIsMenuVisible ); // How many bindings are there? int GetNumBindings(); // Allow per-game authorization of commmands when the menu is up bool AllowMenuCommand( char * ); // Allow per-game authorization of commmands in general bool AllowCommand( char * ); protected: typedef struct { int m_Action; int m_iHand; // 0=left, 1=right int m_iArgument; char *m_pActivateCommand; char *m_pDeactivateCommand; bool m_bAutoMirrored; } GestureBinding; // some helpers for converting input strings bool HandFromString( CUtlString hand_str, int *hand ); bool ActionFromString( CUtlString action_str, sixenseUtils::IButtonStates::ActionType *action ); bool ButtonMaskFromString( CUtlString button, unsigned short *button_token ); bool DirectionFromString( CUtlString dir_str, sixenseUtils::IButtonStates::Direction *dir ); bool ActionTokenToStr( sixenseUtils::IButtonStates::ActionType action, char *buf, int buflen ); bool DirectionTokenToStr( int arg, char *buf, int buflen ); bool ButtonTokenToStr( int arg, char *buf, int buflen ); bool HandTokenToStr( int hand, char *buf, int buflen ); // Help deallocate a binding void FreeStrings( GestureBinding binding ); private: CUtlLinkedList m_GestureBindingList; }; #endif