You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
318 lines
10 KiB
318 lines
10 KiB
4 years ago
|
//========= 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;
|
||
|
};
|