diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/workshop/item_import.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/tf/workshop/item_import.h')
| -rw-r--r-- | game/client/tf/workshop/item_import.h | 317 |
1 files changed, 317 insertions, 0 deletions
diff --git a/game/client/tf/workshop/item_import.h b/game/client/tf/workshop/item_import.h new file mode 100644 index 0000000..27ea77c --- /dev/null +++ b/game/client/tf/workshop/item_import.h @@ -0,0 +1,317 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//============================================================================= + +#include "vgui_controls/frame.h" +#include "vgui_controls/ComboBox.h" +#include "vgui_controls/RadioButton.h" +#include "vgui_bitmappanel.h" + +#include "tf_shareddefs.h" + +class CTFFileImportTextEditDialog; +class CTFImportMaterialEditDialog; +class CImportPreviewItemPanel; +class CTFPlayerModelPanel; + +enum MATERIAL_FILE_TYPE +{ + MATERIAL_FILE_BASETEXTURE, + MATERIAL_FILE_NORMAL, + MATERIAL_FILE_PHONGEXPONENT, + MATERIAL_FILE_SELFILLUM, + NUM_MATERIAL_TEXTURE_FILE_TYPE +}; + +//----------------------------------------------------------------------------- +// Purpose: Import file dialog +//----------------------------------------------------------------------------- +class CTFFileImportDialog : public vgui::Frame +{ + DECLARE_CLASS_SIMPLE( CTFFileImportDialog, Frame ); + +public: + enum BUILD_RESULT { + BUILD_OKAY, + BUILD_FAILED_NOSDK, + BUILD_FAILED_NONAME, + BUILD_FAILED_NOTYPE, + BUILD_FAILED_NOMODELS, + BUILD_FAILED_LODCOUNTMISMATCH, + BUILD_FAILED_NOMATERIALS, + BUILD_FAILED_MATERIALCOUNTMISMATCH, + BUILD_FAILED_NOBACKPACKICON, + BUILD_FAILED_BADNAME, + BUILD_FAILED_BADTFENGLISHNAME, + BUILD_FAILED_BADTYPE, + BUILD_FAILED_BADMODEL, + BUILD_FAILED_BADMATERIALTYPE, + BUILD_FAILED_BADMATERIAL, + BUILD_FAILED_MATERIALMISSINGSHADER, + BUILD_FAILED_MATERIALMISSINGCLOAK, + BUILD_FAILED_MATERIALMISSINGBURNING, + BUILD_FAILED_MATERIALMISSINGJARATE, + BUILD_FAILED_MATERIALMISSINGPAINTABLE, + BUILD_FAILED_MISSINGMODEL, + BUILD_FAILED_NEEDMORELOD, + BUILD_FAILED_COMPLEXMODEL, + BUILD_FAILED_BADIMAGE, + BUILD_FAILED_COMPILE, + BUILD_FAILED_NO_WORKSHOP_ID, + BUILD_FAILED_IMAGEUNSUPPORTEDFILETYPE, + BUILD_FAILED_IMAGERESOLUTIONNOTPOWEROF2, + BUILD_FAILED_IMAGERESOLUTIONOVERLIMIT, + BUILD_FAILED_NO_TAUNT_SOURCES, + BUILD_FAILED_BAD_VCD_FILE, + BUILD_FAILED_VCD_MISSING_EVENT_SEQUENCE, + BUILD_FAILED_VCD_EVENT_SEQUENCE_TOO_LONG, + + NUM_BUILD_RESULTS + }; + enum LOAD_RESULT { + LOAD_OKAY, + LOAD_FAILED, + LOAD_FAILED_BADMODEL, + LOAD_FAILED_COMPLEXMODEL, + LOAD_FAILED_TOOMANYBONES, + LOAD_FAILED_BADMATERIAL, + LOAD_FAILED_TOOMANYMATERIALS, + LOAD_FAILED_MATERIALCOUNTMISMATCH, + LOAD_FAIL_ANIMATIONTOOLONG, + NUM_LOAD_RESULTS + }; + enum SAVE_RESULT { + SAVE_OKAY, + SAVE_FAILED, + NUM_SAVE_RESULTS + }; + + enum BUILD_STAGE + { + BUILD_PREVIEW, + BUILD_VERIFY, + BUILD_FINAL + }; + + enum WARNING + { + WARNING_BASEALPHAMASK, + NUM_WARNINGS + }; + + enum ImportPrefab_t + { + PREFAB_HAT = 0, + PREFAB_MISC, + PREFAB_TAUNT, + + PREFAB_COUNT + }; + +public: + CTFFileImportDialog( vgui::Panel *parent ); + + virtual ~CTFFileImportDialog(); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); + + virtual void OnCommand( const char *command ); + void OnCommandLoad(); + void OnCommandSave(); + void OnCommandBrowseIcon(); + void OnCommandBrowseLOD( int index ); + void OnCommandBrowseAnimationSource(); + void OnCommandBrowseAnimationVCD(); + void OnCommandSwapVMT(); + void OnCommandEditMaterial( int nSkinIndex, int nMaterialIndex ); + void OnCommandEditMaterialDone( int nSkinIndex, int nMaterialIndex ); + void OnCommandEditQC(); + void OnCommandEditQCI(); + void OnCommandEditQCDone(); + void OnCommandEditQCIDone(); + bool OnCommandBuild( BUILD_STAGE buildStage ); + void OnCommandUpdateBodygroup(); + + void OnOpen(); + + virtual void OnClose(); + + MESSAGE_FUNC_PARAMS( OnTextChanged, "TextChanged", data ); + + MESSAGE_FUNC_CHARPTR( OnFileSelected, "FileSelected", fullpath ); + + MESSAGE_FUNC_PTR( OnRadioButtonChecked, "RadioButtonChecked", panel ); + + KeyValues *GetItemValues() { return m_pItemValues; } + + void SetItemName( const char *pszName ); + const char *GetItemName(); + bool IsValidPrefab( const char *pszPrefab ); + void SetItemPrefab( const char *pszPrefab ); + const char *GetItemPrefab(); + bool GetItemPrefabValue( const char *pszPrefab, const char *pszName, CUtlString& strOutput ); + void SelectClass( int nClassIndex ); + void SetItemIcon( const char *pszFilePath ); + const char *GetItemIcon(); + void SetPaintable( bool bPaintable, int nMaterialIndex ); + bool IsPaintable( int nMaterialIndex ); + bool IsAnyVMTPaintable(); + const char *GetUserAnimationQCTemplate( int nSelectedClass, bool bPerforce = false ); + const char *GetQCTemplate( int nSelectedClass ); + const char *GetQCITemplate( int nSelectedClass ); + void ClearLODs(); + LOAD_RESULT SetLOD( int selectedClass, int nModelIndex, const char *pszFilePath, KeyValues* pKV = NULL ); + void UpdateLODDisplay(); + int GetModelTriangleBudget( int selectedClass, int nModelIndex ); + int GetModelBoneBudget(); + bool SetMaterial( int nMaterialPanelIndex, const char* pszFilePath, MATERIAL_FILE_TYPE fileType ); + bool SetMaterial( int selectedSkin, int nMaterialIndex, const char *pszFilePath, MATERIAL_FILE_TYPE fileType ); + const char* GetMaterialTextureFile( int selectedSkin, int nMaterialIndex, MATERIAL_FILE_TYPE fileType ); + CUtlString GetMaterialName( int selectedSkin, int nMaterialIndex ); + void ClearMaterials(); + void ClearMaterial( int nSkinIndex, int nMaterialIndex ); + void UpdateMaterialDisplay(); + void UpdateMaterialDisplay( int nSkinIndex, int nMaterialIndex ); + const char *GetMaterialText( int nSkinIndex, int nMaterialIndex, CUtlBuffer &sMaterialText ); + bool SetMaterialText( int nSkinIndex, int nMaterialIndex, const char* pszMaterialText ); + BUILD_RESULT ValidateMaterialValues( KeyValues *pKV, int nMaterialIndex ); + void RemoveUnnecessaryParametersFromVMT( KeyValues *pKV, int nMaterialIndex ); + void RemoveLightParameters( KeyValues *pKV, int nMaterialIndex ); + void RemovePaintParameters( KeyValues *pKV, int nMaterialIndex ); + void RemoveTranslucentParameters( KeyValues *pKV ); + void RemoveCubeMapParameters( KeyValues *pKV ); + void RemoveSelfIllumParameters( KeyValues *pKV ); + + void UpdateBodygroupsDisplay(); + void SetBodygroup( KeyValues* pBodygroupKey ); + + LOAD_RESULT SetAnimationSource( int selectedClass, const char *pszFilePath, KeyValues* pKV = NULL ); + LOAD_RESULT SetAnimationVCD( int selectedClass, const char *pszFilePath, KeyValues* pKV = NULL ); + void SetAnimationDuration( int selectedClass, float flDuration ); + BUILD_RESULT VerifyVCD( const CAssetTF &asset ); + void UpdateAnimationSourceDisplay(); + void UpdateAnimationVCDDisplay(); + void UpdateAnimDurationDisplay(); + + void SetDirty( bool bDirty ); + + void SetLoopableTaunt( bool bLoopable, float flLoopStartTime ); + bool IsLoopableTaunt() const; + float GetAnimationLoopStartTime() const; + + BUILD_RESULT AddTauntToAsset( CAssetTF &asset, int nClassIndex, bool bIsMulticlass, BUILD_STAGE buildStage, KeyValues *pItemData, KeyValues *pBuildMessageVariables ); + BUILD_RESULT AddModelToAsset( CAssetTF &asset, int nClassIndex, bool bIsMulticlass, BUILD_STAGE buildStage, KeyValues *pItemData, KeyValues *pBuildMessageVariables ); + BUILD_RESULT AddMaterialsToAsset( CAssetTF &asset, KeyValues *pItemData, KeyValues *pBuildMessageVariables ); + bool CheckSourceSDK(); + BUILD_RESULT Build( BUILD_STAGE buildStage, KeyValues *pBuildMessageVariables ); + KeyValues *BuildSessionData( const char *pszItemName ); + KeyValues *BuildItemSchema( const char *pszItemName ); + LOAD_RESULT Load( const char *pszFilePath, const char *pathID, CUtlString &sFailedPath ); + LOAD_RESULT LoadTxt( const char *pszFilePath, const char *pathID, CUtlString &sFailedPath ); + LOAD_RESULT LoadZip( const char *pszFilePath, const char *pathID, CUtlString &sFailedPath ); + SAVE_RESULT Save( const char *pszFilePath, const char *pathID ); + + void SavePreviewData( CAssetTF &asset ); + bool SetupPreviewData(); + void CleanupPreviewData(); + +protected: + bool IsMulticlass(); + const char *GetClassFolder(); + bool AnyClassHasModels(); + bool ClassHasModels( int nClassIndex ); + bool DidSpecifyAllMaterials(); + bool AreClassesLODCountMatch(); + bool AreClassesMaterialCountMatch(); + bool AnyClassHasTauntSources(); + bool ClassHasTauntSources( int nClassIndex ); + + void GetWorkshopData(); + void SetWorkshopData(); + +private: + bool ShouldP4AddOrEdit() const; + bool IsPartnerContent() const; + const char* GetWorkshopFolder() const; + + int GetCustomBones( int selectedClass, const char* pszFileName, CUtlStringList& strBoneList ); + void SetLODPanelEnable( bool bEnable, int nModelIndex ); + void SetSkinType( int nSkinType ); + void SetEquipRegion( const char* pszEquipRegion ); + void SetWorkshopID( const char* pszWorkshopID ); + bool IsTFEnglishNameValid( item_definition_index_t defIndex ); + void SetTFEnglishName( const char* pszTFEnglishName ); + void UpdateUIForPrefab( ImportPrefab_t nPrefab ); + item_definition_index_t AddKeyValuesToItemWorkshopSchema( KeyValues *pKV ); + + int m_nSelectedClass; + ImportPrefab_t m_nPrefab; + + enum FileOpenMode { + FILE_OPEN_NONE, + FILE_OPEN_LOAD, + FILE_OPEN_SAVE, + FILE_OPEN_ICON, + FILE_OPEN_LOD0, + FILE_OPEN_LOD1, + FILE_OPEN_LOD2, + FILE_OPEN_ANIMATION_SOURCE, + FILE_OPEN_ANIMATION_VCD, + } m_nFileOpenMode; + + KeyValues *m_pItemValues; + KeyValues *m_pPreviewSchema; + CUtlVector< CUtlString > m_vecPreviewFiles; + CUtlVector< CUtlString > m_vecCustomModFiles; + CUtlBuffer m_tempQC; + + vgui::TextEntry *m_pNameTextEntry; + vgui::ComboBox *m_pTypeComboBox; + vgui::Button *m_pSwapVMTButton; + vgui::ComboBox *m_pSkinComboBox; + vgui::TextEntry *m_pWorkshopIDTextEntry; + vgui::TextEntry *m_pTFEnglishNameTextEntry; + vgui::CheckButton *m_pPerforceCheckButton; + vgui::CheckButton *m_pPartnerCheckButton; + + vgui::EditablePanel *m_pEquipRegionPanel; + vgui::ComboBox *m_pEquipRegionComboBox; + + vgui::ImagePanel *m_pIconImagePanel; + CUtlVector< vgui::CheckButton* > m_pPaintableCheckButtons; + + vgui::RadioButton *m_pClassRadioButtons[TF_LAST_NORMAL_CLASS]; + vgui::Panel *m_pClassHighlights[TF_LAST_NORMAL_CLASS]; + + vgui::EditablePanel *m_pBodygroupsPanel; + CUtlVector< vgui::CheckButton* > m_pBodygroups; + + vgui::EditablePanel *m_pLODsPanel; + CUtlVector< vgui::Panel* > m_pLODPanels; + CUtlVector< vgui::Label* > m_pLODFiles; + CUtlVector< vgui::Label* > m_pLODDetails; + + vgui::EditablePanel *m_pSkinsPanel; + CUtlVector< vgui::Panel* > m_pMaterialPanels; + CUtlVector< vgui::Label* > m_pMaterialLabels; + CUtlVector< vgui::Label* > m_pMaterialFiles; + + vgui::EditablePanel *m_pTauntInputPanel; + vgui::Label *m_pAnimationSourceFile; + vgui::Label *m_pAnimationVCDFile; + vgui::Label *m_pAnimationDurationLabel; + vgui::Label *m_pAnimationPropLabel; + vgui::CheckButton *m_pAnimationLoopCheckButton; + vgui::TextEntry *m_pAnimationLoopStartTextEntry; + + vgui::Button *m_pBuildButton; + vgui::DHANDLE<CTFFileImportTextEditDialog> m_pTextEditDialog; + vgui::DHANDLE<CTFImportMaterialEditDialog> m_pMaterialEditDialog; + vgui::DHANDLE<CImportPreviewItemPanel> m_pPreviewDialog; + CTFPlayerModelPanel *m_pPlayerModelPanel; + + bool m_bWasCheatOn; +}; |