summaryrefslogtreecommitdiff
path: root/game/client/tf/workshop/item_import.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/workshop/item_import.h
downloadarchived-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.h317
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;
+};