Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.
 
 
 
 
 
 

317 lines
10 KiB

//========= 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;
};