//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: Holds XP source data // // $NoKeywords: $ //=============================================================================// #ifndef TF_SURVEY_QUESTIONS_H #define TF_SURVEY_QUESTIONS_H #ifdef _WIN32 #pragma once #endif #include "tf_gcmessages.h" #ifdef CLIENT_DLL #include "vgui_controls/EditablePanel.h" #endif #ifdef GC #include "tf_gc.h" #endif #ifdef CLIENT_DLL using namespace vgui; #endif //----------------------------------------------------------------------------- // Purpose: The definition of a survey question. // // m_eType : The type of the survey question // m_pszSurveyQuestionName: Name of the survey type. Mostly for debugging // m_flWeight: The weight used when randomly choosing which survey question // to ask a user // m_pFnSurveyValidForPlayer: Survey specific function to determine if player // meets criteria to receive survey // m_bIsActive: Is the survey currently active (asked of players) //----------------------------------------------------------------------------- struct SurveyQuestion_t { SurveyQuestionType m_eType; const char* m_pszSurveyQuestionName; float m_flWeight; bool ( *m_pFnSurveyValidForPlayer ) ( const CMsgGC_Match_Result& msgMatchResult , uint32 nPlayerIndex ); bool m_bIsActive; }; #define UNASWERED_SURVEY_QUESTION ( (int16) -1 ) #define SEEN_BUT_UNANSWERED_SURVEY_QUESTION ( (int16) -2 ) #define SEEN_AND_DISMISSED_SURVEY_QUESTION ( (int16) -3 ) extern const SurveyQuestion_t g_SurveyQuestions[ SurveyQuestionType_ARRAYSIZE ]; #ifdef CLIENT_DLL //----------------------------------------------------------------------------- // Purpose: Use CreateSurveyQuestionPanel to create the panel you want //----------------------------------------------------------------------------- class CSurveyQuestionPanel* CreateSurveyQuestionPanel( Panel* pParent, const CMsgGCSurveyRequest& msgSurveyQuestion ); //----------------------------------------------------------------------------- // Purpose: Base, abstract survey panel to handle common functionality //----------------------------------------------------------------------------- class CSurveyQuestionPanel : public EditablePanel, public CGameEventListener { public: DECLARE_CLASS_SIMPLE( CSurveyQuestionPanel, EditablePanel ); CSurveyQuestionPanel( Panel* pParent, CMsgGCSurveyRequest msgSurveyQuestion ); ~CSurveyQuestionPanel(); virtual void OnCommand( const char *command ) OVERRIDE; virtual void FireGameEvent( IGameEvent *event ) OVERRIDE; virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE; private: virtual void Submit() = 0; virtual const char* GetResFile() const = 0; bool m_bResponded; CMsgGCSurveyRequest m_msgRequest; }; //----------------------------------------------------------------------------- // Purpose: Base class for multiple choice surveys //----------------------------------------------------------------------------- class CMultipleChoiceSurveyQuestionPanel : public CSurveyQuestionPanel { public: DECLARE_CLASS_SIMPLE( CMultipleChoiceSurveyQuestionPanel, CSurveyQuestionPanel ); CMultipleChoiceSurveyQuestionPanel( Panel* pParent, CMsgGCSurveyRequest msgSurveyQuestion, uint16 nSurveyResponses ); private: virtual void Think() OVERRIDE; virtual void Submit() OVERRIDE; uint16 m_nSurveyResponses; }; //----------------------------------------------------------------------------- // Purpose: Match quality survey. Users can rate the quality of their match // with a score of 0 - 4. Score is marked through radio buttons. //----------------------------------------------------------------------------- class CMatchQualitySurvey : public CMultipleChoiceSurveyQuestionPanel { public: CMatchQualitySurvey( Panel* pParent, CMsgGCSurveyRequest msgSurveyQuestion ) : CMultipleChoiceSurveyQuestionPanel( pParent, msgSurveyQuestion, 5 ) {} virtual const char* GetResFile() const OVERRIDE { return "resource/ui/SurveyPanel_MatchQuality.res"; } }; //----------------------------------------------------------------------------- // Purpose: Map quality survey. Users can rate the quality of the map played // with a score of 0 - 4. Score is marked through radio buttons. //----------------------------------------------------------------------------- class CMapQualitySurvey : public CMultipleChoiceSurveyQuestionPanel { public: CMapQualitySurvey( Panel* pParent, CMsgGCSurveyRequest msgSurveyQuestion ) : CMultipleChoiceSurveyQuestionPanel( pParent, msgSurveyQuestion, 5 ) {} virtual const char* GetResFile() const OVERRIDE { return "resource/ui/SurveyPanel_MapQuality.res"; } virtual void PerformLayout() OVERRIDE; }; //----------------------------------------------------------------------------- // Purpose: Survey casual mode players to see why they're not playing competitive //----------------------------------------------------------------------------- class CCompInquirySurvey : public CMultipleChoiceSurveyQuestionPanel { public: CCompInquirySurvey( Panel* pParent, CMsgGCSurveyRequest msgSurveyQuestion ) : CMultipleChoiceSurveyQuestionPanel( pParent, msgSurveyQuestion, 6 ) {} virtual const char* GetResFile() const OVERRIDE { return "resource/ui/SurveyPanel_CompInquiry.res"; } }; //----------------------------------------------------------------------------- // Purpose: Survey competitive mode players to see why they're not playing casual //----------------------------------------------------------------------------- class CCasualInquirySurvey : public CMultipleChoiceSurveyQuestionPanel { public: CCasualInquirySurvey( Panel* pParent, CMsgGCSurveyRequest msgSurveyQuestion ) : CMultipleChoiceSurveyQuestionPanel( pParent, msgSurveyQuestion, 6 ) {} virtual const char* GetResFile() const OVERRIDE { return "resource/ui/SurveyPanel_CasualInquiry.res"; } }; #endif #endif // TF_SURVEY_QUESTIONS_H