From ff871f37e37bb6263757c567f26ee5175fc1002a Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 3 Jun 2019 02:47:30 -0500 Subject: [PATCH] Added refactor of Editor Settings window Various fixes for asset handling. WIP of crash tracking --- Engine/source/T3D/assets/GUIAsset.cpp | 22 +- Engine/source/T3D/assets/GameObjectAsset.cpp | 2 - Engine/source/T3D/assets/ImageAsset.cpp | 20 +- Engine/source/T3D/assets/LevelAsset.cpp | 23 +- Engine/source/T3D/assets/LevelAsset.h | 2 + .../source/T3D/lighting/reflectionProbe.cpp | 4 +- Engine/source/gfx/gfxTextureManager.cpp | 5 + Engine/source/gfx/gfxTextureManager.h | 3 + .../gui/editor/inspector/variableField.cpp | 27 ++- .../editor/inspector/variableInspector.cpp | 9 +- .../source/materials/materialDefinition.cpp | 12 +- Engine/source/materials/processedMaterial.cpp | 2 +- Engine/source/module/moduleDefinition.h | 4 +- Engine/source/module/moduleManager.cpp | 2 +- Engine/source/postFx/postEffect.cpp | 23 +- Engine/source/postFx/postEffect.h | 3 +- .../source/renderInstance/renderProbeMgr.cpp | 13 ++ .../BaseGame/game/core/postFX/scripts/pbr.cs | 1 - .../game/core/rendering/Core_Rendering.cs | 1 + .../game/data/pbr/levels/PbrMatTest.mis | 4 +- Templates/BaseGame/game/tools/Tools.cs | 3 + .../tools/assetBrowser/scripts/assetImport.cs | 114 ++-------- .../scripts/assetTypes/material.cs | 6 +- .../assetBrowser/scripts/assetTypes/shape.cs | 58 ++--- .../tools/gui/EditorSettingsWindow.ed.gui | 201 +++++++++++++++++ .../game/tools/gui/editorSettingsWindow.ed.cs | 202 ++++++++++++++++++ .../BaseGame/game/tools/gui/profiles.ed.cs | 20 +- Templates/BaseGame/game/tools/main.cs | 3 - Templates/BaseGame/game/tools/settings.xml | 142 ++++++------ .../tools/worldEditor/scripts/EditorGui.ed.cs | 4 +- 30 files changed, 662 insertions(+), 273 deletions(-) create mode 100644 Templates/BaseGame/game/tools/gui/EditorSettingsWindow.ed.gui create mode 100644 Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs diff --git a/Engine/source/T3D/assets/GUIAsset.cpp b/Engine/source/T3D/assets/GUIAsset.cpp index ce638f9b8..ec06156a2 100644 --- a/Engine/source/T3D/assets/GUIAsset.cpp +++ b/Engine/source/T3D/assets/GUIAsset.cpp @@ -47,14 +47,14 @@ IMPLEMENT_CONOBJECT(GUIAsset); -ConsoleType(GUIAssetPtr, TypeGUIAssetPtr, GUIAsset, ASSET_ID_FIELD_PREFIX) +ConsoleType(GUIAssetPtr, TypeGUIAssetPtr, String, ASSET_ID_FIELD_PREFIX) //----------------------------------------------------------------------------- ConsoleGetType(TypeGUIAssetPtr) { // Fetch asset Id. - return (*((AssetPtr*)dptr)).getAssetId(); + return *((StringTableEntry*)dptr); } //----------------------------------------------------------------------------- @@ -67,19 +67,11 @@ ConsoleSetType(TypeGUIAssetPtr) // Yes, so fetch field value. const char* pFieldValue = argv[0]; - // Fetch asset pointer. - AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + // Fetch asset Id. + StringTableEntry* assetId = (StringTableEntry*)(dptr); - // Is the asset pointer the correct type? - if (pAssetPtr == NULL) - { - // No, so fail. - //Con::warnf("(TypeGUIAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); - return; - } - - // Set asset. - pAssetPtr->setAssetId(pFieldValue); + // Update asset value. + *assetId = StringTable->insert(pFieldValue); return; } @@ -268,4 +260,4 @@ bool GuiInspectorTypeGUIAssetPtr::updateRects() } return resized; -} \ No newline at end of file +} diff --git a/Engine/source/T3D/assets/GameObjectAsset.cpp b/Engine/source/T3D/assets/GameObjectAsset.cpp index df711875f..4058d5ee1 100644 --- a/Engine/source/T3D/assets/GameObjectAsset.cpp +++ b/Engine/source/T3D/assets/GameObjectAsset.cpp @@ -225,8 +225,6 @@ const char* GameObjectAsset::create() //Entity* e = dynamic_cast(pSimObject); //e->_setGameObject(getAssetId()); - StringTableEntry assetId = getAssetId(); - pSimObject->setDataField(StringTable->insert("GameObject"), nullptr, getAssetId()); return pSimObject->getIdString(); diff --git a/Engine/source/T3D/assets/ImageAsset.cpp b/Engine/source/T3D/assets/ImageAsset.cpp index 38f11d6c8..5f099ad38 100644 --- a/Engine/source/T3D/assets/ImageAsset.cpp +++ b/Engine/source/T3D/assets/ImageAsset.cpp @@ -47,14 +47,14 @@ IMPLEMENT_CONOBJECT(ImageAsset); -ConsoleType(ImageAssetPtr, TypeImageAssetPtr, ImageAsset, ASSET_ID_FIELD_PREFIX) +ConsoleType(ImageAssetPtr, TypeImageAssetPtr, String, ASSET_ID_FIELD_PREFIX) //----------------------------------------------------------------------------- ConsoleGetType(TypeImageAssetPtr) { // Fetch asset Id. - return (*((AssetPtr*)dptr)).getAssetId(); + return *((StringTableEntry*)dptr); } //----------------------------------------------------------------------------- @@ -67,19 +67,11 @@ ConsoleSetType(TypeImageAssetPtr) // Yes, so fetch field value. const char* pFieldValue = argv[0]; - // Fetch asset pointer. - AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + // Fetch asset Id. + StringTableEntry* assetId = (StringTableEntry*)(dptr); - // Is the asset pointer the correct type? - if (pAssetPtr == NULL) - { - // No, so fail. - //Con::warnf("(TypeImageAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); - return; - } - - // Set asset. - pAssetPtr->setAssetId(pFieldValue); + // Update asset value. + *assetId = StringTable->insert(pFieldValue); return; } diff --git a/Engine/source/T3D/assets/LevelAsset.cpp b/Engine/source/T3D/assets/LevelAsset.cpp index ab0102bee..36b7d14cd 100644 --- a/Engine/source/T3D/assets/LevelAsset.cpp +++ b/Engine/source/T3D/assets/LevelAsset.cpp @@ -47,14 +47,14 @@ IMPLEMENT_CONOBJECT(LevelAsset); -ConsoleType(LevelAssetPtr, TypeLevelAssetPtr, LevelAsset, ASSET_ID_FIELD_PREFIX) +ConsoleType(LevelAssetPtr, TypeLevelAssetPtr, String, ASSET_ID_FIELD_PREFIX) //----------------------------------------------------------------------------- ConsoleGetType(TypeLevelAssetPtr) { // Fetch asset Id. - return (*((AssetPtr*)dptr)).getAssetId(); + return *((StringTableEntry*)dptr); } //----------------------------------------------------------------------------- @@ -67,19 +67,11 @@ ConsoleSetType(TypeLevelAssetPtr) // Yes, so fetch field value. const char* pFieldValue = argv[0]; - // Fetch asset pointer. - AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + // Fetch asset Id. + StringTableEntry* assetId = (StringTableEntry*)(dptr); - // Is the asset pointer the correct type? - if (pAssetPtr == NULL) - { - // No, so fail. - //Con::warnf("(TypeLevelAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); - return; - } - - // Set asset. - pAssetPtr->setAssetId(pFieldValue); + // Update asset value. + *assetId = StringTable->insert(pFieldValue); return; } @@ -121,6 +113,9 @@ void LevelAsset::initPersistFields() addField("LevelName", TypeString, Offset(mLevelName, LevelAsset), "Human-friendly name for the level."); addProtectedField("PreviewImage", TypeAssetLooseFilePath, Offset(mPreviewImage, LevelAsset), &setPreviewImageFile, &getPreviewImageFile, "Path to the image used for selection preview."); + + addField("isSubScene", TypeString, Offset(mIsSubLevel, LevelAsset), "Is this a sublevel to another Scene"); + addField("gameModeName", TypeString, Offset(mGamemodeName, LevelAsset), "Name of the Game Mode to be used with this level"); } //------------------------------------------------------------------------------ diff --git a/Engine/source/T3D/assets/LevelAsset.h b/Engine/source/T3D/assets/LevelAsset.h index b8f222a47..e271d1c91 100644 --- a/Engine/source/T3D/assets/LevelAsset.h +++ b/Engine/source/T3D/assets/LevelAsset.h @@ -51,6 +51,8 @@ class LevelAsset : public AssetBase bool mIsSubLevel; StringTableEntry mMainLevelAsset; + StringTableEntry mGamemodeName; + public: LevelAsset(); virtual ~LevelAsset(); diff --git a/Engine/source/T3D/lighting/reflectionProbe.cpp b/Engine/source/T3D/lighting/reflectionProbe.cpp index 3ef73af46..d60778fa8 100644 --- a/Engine/source/T3D/lighting/reflectionProbe.cpp +++ b/Engine/source/T3D/lighting/reflectionProbe.cpp @@ -531,7 +531,7 @@ void ReflectionProbe::updateProbeParams() mProbeInfoIdx = ProbeRenderInst::all.size() - 1; mProbeInfo->mIsEnabled = false; - PROBEMGR->registerProbe(mProbeInfoIdx); + //PROBEMGR->registerProbe(mProbeInfoIdx); } mProbeInfo->mProbeShapeType = mProbeShapeType; @@ -965,4 +965,4 @@ DefineEngineMethod(ReflectionProbe, Bake, void, (), , { clientProbe->bake(); } -} \ No newline at end of file +} diff --git a/Engine/source/gfx/gfxTextureManager.cpp b/Engine/source/gfx/gfxTextureManager.cpp index a21022f9d..5b4654f6b 100644 --- a/Engine/source/gfx/gfxTextureManager.cpp +++ b/Engine/source/gfx/gfxTextureManager.cpp @@ -47,6 +47,7 @@ String GFXTextureManager::smUnavailableTexturePath(Con::getVariable("$Core::UnAv String GFXTextureManager::smWarningTexturePath(Con::getVariable("$Core::WarningTexturePath")); String GFXTextureManager::smDefaultIrradianceCubemapPath(Con::getVariable("$Core::DefaultIrradianceCubemap")); String GFXTextureManager::smDefaultPrefilterCubemapPath(Con::getVariable("$Core::DefaultPrefilterCubemap")); +String GFXTextureManager::smBRDFTexturePath(Con::getVariable("$Core::BRDFTexture")); GFXTextureManager::EventSignal GFXTextureManager::smEventSignal; @@ -80,6 +81,10 @@ void GFXTextureManager::init() Con::addVariable("$Core::DefaultPrefilterCubemap", TypeRealString, &smDefaultPrefilterCubemapPath, "The file path of the texture used as the default specular cubemap for PBR.\n" "@ingroup GFX\n"); + + Con::addVariable("$Core::BRDFTexture", TypeRealString, &smBRDFTexturePath, + "The file path of the texture used as the default irradiance cubemap for PBR.\n" + "@ingroup GFX\n"); } GFXTextureManager::GFXTextureManager() diff --git a/Engine/source/gfx/gfxTextureManager.h b/Engine/source/gfx/gfxTextureManager.h index 1254299f5..d706d14f0 100644 --- a/Engine/source/gfx/gfxTextureManager.h +++ b/Engine/source/gfx/gfxTextureManager.h @@ -77,6 +77,8 @@ public: static const String& getDefaultIrradianceCubemapPath() { return smDefaultIrradianceCubemapPath; } static const String& getDefaultPrefilterCubemapPath() { return smDefaultPrefilterCubemapPath; } + static const String& getBRDFTexturePath() { return smBRDFTexturePath; } + /// Update width and height based on available resources. /// /// We provide a simple interface for managing texture memory usage. Specifically, @@ -215,6 +217,7 @@ protected: static String smDefaultIrradianceCubemapPath; static String smDefaultPrefilterCubemapPath; + static String smBRDFTexturePath; GFXTextureObject *mListHead; GFXTextureObject *mListTail; diff --git a/Engine/source/gui/editor/inspector/variableField.cpp b/Engine/source/gui/editor/inspector/variableField.cpp index 76f640762..8f39fb65d 100644 --- a/Engine/source/gui/editor/inspector/variableField.cpp +++ b/Engine/source/gui/editor/inspector/variableField.cpp @@ -27,6 +27,7 @@ #include "gui/editor/guiInspector.h" #include "core/util/safeDelete.h" #include "gfx/gfxDrawUtil.h" +#include "util/settings.h" //----------------------------------------------------------------------------- // GuiInspectorVariableField @@ -104,7 +105,17 @@ void GuiInspectorVariableField::setData( const char* data, bool callbacks ) { if (mOwnerObject != nullptr) { - mOwnerObject->setDataField(mVariableName, NULL, data); + //Special case: if our object is a Settings class, we'll assume that we're trying to get/set the fields via the Setting class's normal behavior + //otherwise, use fields as normal + Settings* setting = dynamic_cast(mOwnerObject); + if (setting) + { + setting->setValue(mVariableName, data); + } + else + { + mOwnerObject->setDataField(mVariableName, NULL, data); + } } else { @@ -121,8 +132,16 @@ const char* GuiInspectorVariableField::getData( U32 inspectObjectIndex ) { if ( !mCaption || mCaption[0] == 0 ) return ""; - - return Con::getVariable( mCaption ); + + Settings* setting = dynamic_cast(mOwnerObject); + if (setting) + { + return setting->value(mVariableName); + } + else + { + return Con::getVariable(mCaption); + } } void GuiInspectorVariableField::setValue( const char* newValue ) @@ -138,4 +157,4 @@ void GuiInspectorVariableField::updateValue() return; setValue( getData() ); -} \ No newline at end of file +} diff --git a/Engine/source/gui/editor/inspector/variableInspector.cpp b/Engine/source/gui/editor/inspector/variableInspector.cpp index 10d640fc9..717dc8bb4 100644 --- a/Engine/source/gui/editor/inspector/variableInspector.cpp +++ b/Engine/source/gui/editor/inspector/variableInspector.cpp @@ -60,7 +60,10 @@ void GuiVariableInspector::loadVars( String searchStr ) void GuiVariableInspector::update() { - clearGroups(); + for (U32 g = 0; g < mGroups.size(); g++) + { + mGroups[g]->clearFields(); + } for (U32 i = 0; i < mFields.size(); i++) { @@ -149,6 +152,8 @@ void GuiVariableInspector::addField(const char* name, const char* label, const c fieldTypeMask = TypeF32; else if (newField.mFieldTypeName == StringTable->insert("vector")) fieldTypeMask = TypePoint3F; + else if (newField.mFieldTypeName == StringTable->insert("vector2")) + fieldTypeMask = TypePoint2F; //else if (fieldType == StringTable->insert("material")) // fieldTypeMask = TypeMaterialName; else if (newField.mFieldTypeName == StringTable->insert("image")) @@ -264,4 +269,4 @@ DefineEngineMethod(GuiVariableInspector, setFieldEnabled, void, (const char* fie DefineEngineMethod( GuiVariableInspector, loadVars, void, ( const char * searchString ), , "loadVars( searchString )" ) { object->loadVars( searchString ); -} \ No newline at end of file +} diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index eb449ef37..b6c0cbfab 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -117,6 +117,7 @@ Material::Material() mDiffuse[i].set( 1.0f, 1.0f, 1.0f, 1.0f ); mDiffuseMapSRGB[i] = true; mDiffuseMapAsset[i] = StringTable->EmptyString(); + mDiffuseMapAssetId[i] = StringTable->EmptyString(); mSmoothness[i] = 0.0f; mMetalness[i] = 0.0f; @@ -238,7 +239,7 @@ void Material::initPersistFields() addField("diffuseMap", TypeImageFilename, Offset(mDiffuseMapFilename, Material), MAX_STAGES, "The diffuse color texture map." ); - addField("diffuseMapAsset", TypeImageAssetPtr, Offset(mDiffuseMapAsset, Material), MAX_STAGES, + addField("diffuseMapAsset", TypeImageAssetPtr, Offset(mDiffuseMapAssetId, Material), MAX_STAGES, "The diffuse color texture map." ); addField("diffuseMapSRGB", TypeBool, Offset(mDiffuseMapSRGB, Material), MAX_STAGES, @@ -585,6 +586,15 @@ bool Material::onAdd() if ( slash != String::NPos ) mPath = scriptFile.substr( 0, slash + 1 ); + //bind any assets we have + for (U32 i = 0; i < MAX_STAGES; i++) + { + if (mDiffuseMapAssetId[i] != StringTable->EmptyString()) + { + mDiffuseMapAsset[0] = mDiffuseMapAssetId[0]; + } + } + _mapMaterial(); return true; diff --git a/Engine/source/materials/processedMaterial.cpp b/Engine/source/materials/processedMaterial.cpp index 9fd8aff7e..3455257a6 100644 --- a/Engine/source/materials/processedMaterial.cpp +++ b/Engine/source/materials/processedMaterial.cpp @@ -409,7 +409,7 @@ void ProcessedMaterial::_setStageData() mStages[i].setTex(MFT_DiffuseMap, _createTexture(GFXTextureManager::getMissingTexturePath().c_str(), &GFXStaticTextureSRGBProfile)); } } - else if (!mMaterial->mDiffuseMapAsset[i].isNull()) + else if (mMaterial->mDiffuseMapAsset[i] && !mMaterial->mDiffuseMapAsset[i].isNull()) { mStages[i].setTex(MFT_DiffuseMap, mMaterial->mDiffuseMapAsset[i]->getImage()); if (!mStages[i].getTex(MFT_DiffuseMap)) diff --git a/Engine/source/module/moduleDefinition.h b/Engine/source/module/moduleDefinition.h index 8652876cf..f26c2ae2c 100644 --- a/Engine/source/module/moduleDefinition.h +++ b/Engine/source/module/moduleDefinition.h @@ -191,8 +191,8 @@ public: inline void increaseLoadCount( void ) { ++mLoadCount; } inline void reduceLoadCount( void ) { --mLoadCount; } inline S32 getLoadCount( void ) const { return mLoadCount; } - inline void setLocked( const bool status ) { mLocked = status; } - inline bool getLocked( void ) const { return mLocked; } + inline void setModuleLocked( const bool status ) { mLocked = status; } + inline bool getModuleLocked( void ) const { return mLocked; } inline ModuleManager* getModuleManager( void ) const { return mpModuleManager; } bool save( void ); diff --git a/Engine/source/module/moduleManager.cpp b/Engine/source/module/moduleManager.cpp index e122177e8..d8620c1f0 100644 --- a/Engine/source/module/moduleManager.cpp +++ b/Engine/source/module/moduleManager.cpp @@ -2121,7 +2121,7 @@ bool ModuleManager::registerModule( const char* pModulePath, const char* pModule pModuleDefinition->setSignature( formatBuffer ); // Locked the module definition. - pModuleDefinition->setLocked( true ); + pModuleDefinition->setModuleLocked( true ); // Fetch modules definitions. ModuleDefinitionEntry* pDefinitions = findModuleId( moduleId ); diff --git a/Engine/source/postFx/postEffect.cpp b/Engine/source/postFx/postEffect.cpp index 4941486a7..d75d170a9 100644 --- a/Engine/source/postFx/postEffect.cpp +++ b/Engine/source/postFx/postEffect.cpp @@ -1076,11 +1076,6 @@ void PostEffect::_setupConstants( const SceneRenderState *state ) setShaderConsts_callback(); } - if (mShaderName == String("PFX_ReflectionProbeArray") || getName() == StringTable->insert("reflectionProbeArrayPostFX")) - { - bool derp = true; - } - EffectConstTable::Iterator iter = mEffectConsts.begin(); for ( ; iter != mEffectConsts.end(); iter++ ) iter->value->setToBuffer( mShaderConsts ); @@ -1607,6 +1602,22 @@ void PostEffect::setTexture( U32 index, const String &texFilePath ) mTextureType[index] = NormalTextureType; } +void PostEffect::setTexture(U32 index, const GFXTexHandle& texHandle) +{ + // Set the new texture name. + mTexFilename[index] = ""; + mTextures[index].free(); + + // Skip empty stages or ones with variable or target names. + if (!texHandle.isValid()) + return; + + // Try to load the texture. + mTextures[index] = texHandle; + + mTextureType[index] = NormalTextureType; +} + void PostEffect::setCubemapTexture(U32 index, const GFXCubemapHandle &cubemapHandle) { // Set the new texture name. @@ -2048,4 +2059,4 @@ DefineEngineFunction( dumpRandomNormalMap, void, (),, String path = Torque::FS::MakeUniquePath( "", "randNormTex", "png" ); tex->dumpToDisk( "png", path ); -} \ No newline at end of file +} diff --git a/Engine/source/postFx/postEffect.h b/Engine/source/postFx/postEffect.h index 377336a9e..84ea55c4f 100644 --- a/Engine/source/postFx/postEffect.h +++ b/Engine/source/postFx/postEffect.h @@ -416,6 +416,7 @@ public: F32 getPriority() const { return mRenderPriority; } void setTexture( U32 index, const String &filePath ); + void setTexture(U32 index, const GFXTexHandle& texHandle); void setCubemapTexture(U32 index, const GFXCubemapHandle &cubemapHandle); void setCubemapArrayTexture(U32 index, const GFXCubemapArrayHandle &cubemapArrayHandle); @@ -451,4 +452,4 @@ public: }; }; -#endif // _POST_EFFECT_H_ \ No newline at end of file +#endif // _POST_EFFECT_H_ diff --git a/Engine/source/renderInstance/renderProbeMgr.cpp b/Engine/source/renderInstance/renderProbeMgr.cpp index ebc7b76d7..4e217f749 100644 --- a/Engine/source/renderInstance/renderProbeMgr.cpp +++ b/Engine/source/renderInstance/renderProbeMgr.cpp @@ -267,6 +267,13 @@ bool RenderProbeMgr::onAdd() return false; } + /*String brdfTexturePath = GFXTextureManager::getBRDFTexturePath(); + if (!mBRDFTexture.set(brdfTexturePath, &GFXTexturePersistentSRGBProfile, "BRDFTexture")) + { + Con::errorf("RenderProbeMgr::onAdd: Failed to load BRDF Texture"); + return false; + }*/ + return true; } @@ -554,6 +561,7 @@ void RenderProbeMgr::_update4ProbeConsts(const SceneData &sgData, ProbeShaderConstants *probeShaderConsts, GFXShaderConstBuffer *shaderConsts) { + return; PROFILE_SCOPE(ProbeManager_Update4ProbeConsts); // Skip over gathering lights if we don't have to! @@ -658,6 +666,9 @@ void RenderProbeMgr::_update4ProbeConsts(const SceneData &sgData, shaderConsts->setSafe(probeShaderConsts->mProbeBoxMaxSC, probeBoxMaxArray); shaderConsts->setSafe(probeShaderConsts->mProbeConfigDataSC, probeConfigArray); + //if (mBRDFTexture.isValid()) + // GFX->setTexture(3, mBRDFTexture); + if(probeShaderConsts->mProbeSpecularCubemapSC->getSamplerRegister() != -1) GFX->setCubeArrayTexture(probeShaderConsts->mProbeSpecularCubemapSC->getSamplerRegister(), mPrefilterArray); if(probeShaderConsts->mProbeIrradianceCubemapSC->getSamplerRegister() != -1) @@ -743,6 +754,7 @@ void RenderProbeMgr::setProbeInfo(ProcessedMaterial *pmat, //----------------------------------------------------------------------------- void RenderProbeMgr::render( SceneRenderState *state ) { + return; //PROFILE_SCOPE(RenderProbeMgr_render); if (getProbeArrayEffect() == nullptr) return; @@ -793,6 +805,7 @@ void RenderProbeMgr::render( SceneRenderState *state ) mProbeArrayEffect->setShaderConst("$cubeMips", (float)mMipCount); if (mEffectiveProbeCount != 0) { + //mProbeArrayEffect->setTexture(3, mBRDFTexture); mProbeArrayEffect->setCubemapArrayTexture(4, mPrefilterArray); mProbeArrayEffect->setCubemapArrayTexture(5, mIrradianceArray); diff --git a/Templates/BaseGame/game/core/postFX/scripts/pbr.cs b/Templates/BaseGame/game/core/postFX/scripts/pbr.cs index 89f65eb5d..5445f8a24 100644 --- a/Templates/BaseGame/game/core/postFX/scripts/pbr.cs +++ b/Templates/BaseGame/game/core/postFX/scripts/pbr.cs @@ -15,5 +15,4 @@ singleton PostEffect( reflectionProbeArrayPostFX ) texture[0] = "#deferred"; texture[1] = "#color"; texture[2] = "#matinfo"; - texture[3] = "core/rendering/images/brdfTexture.dds"; }; diff --git a/Templates/BaseGame/game/core/rendering/Core_Rendering.cs b/Templates/BaseGame/game/core/rendering/Core_Rendering.cs index 8fc913948..07e9bcc02 100644 --- a/Templates/BaseGame/game/core/rendering/Core_Rendering.cs +++ b/Templates/BaseGame/game/core/rendering/Core_Rendering.cs @@ -7,6 +7,7 @@ function Core_Rendering::onCreate(%this) $Core::CommonShaderPath = "core/rendering/shaders"; $Core::DefaultIrradianceCubemap = "core/rendering/images/default_irradiance.dds"; $Core::DefaultPrefilterCubemap = "core/rendering/images/default_prefilter.dds"; + $Core::BRDFTexture = "core/rendering/images/brdfTexture.dds"; exec("./scripts/renderManager.cs"); exec("./scripts/gfxData/clouds.cs"); diff --git a/Templates/BaseGame/game/data/pbr/levels/PbrMatTest.mis b/Templates/BaseGame/game/data/pbr/levels/PbrMatTest.mis index 1ebf0e784..cbd1c452f 100644 --- a/Templates/BaseGame/game/data/pbr/levels/PbrMatTest.mis +++ b/Templates/BaseGame/game/data/pbr/levels/PbrMatTest.mis @@ -256,7 +256,7 @@ new Scene(PbrMatTestLevel) { canSave = "1"; canSaveDynamicFields = "1"; }; - new StaticShapeObject() { + /*new StaticShapeObject() { scale = "1 1 1"; canSave = "1"; canSaveDynamicFields = "1"; @@ -298,6 +298,6 @@ new Scene(PbrMatTestLevel) { Enabled = "1"; internalName = "AnimationComponent"; }; - }; + };*/ }; //--- OBJECT WRITE END --- diff --git a/Templates/BaseGame/game/tools/Tools.cs b/Templates/BaseGame/game/tools/Tools.cs index 15a3fd5c7..d0ea6c9b8 100644 --- a/Templates/BaseGame/game/tools/Tools.cs +++ b/Templates/BaseGame/game/tools/Tools.cs @@ -16,6 +16,9 @@ function ToolsModule::onCreate(%this) // to find exactly which subsystems should be readied before kicking things off. // ---------------------------------------------------------------------------- + new Settings(EditorSettings) { file = "tools/settings.xml"; }; + EditorSettings.read(); + ModuleDatabase.LoadExplicit( "MainEditor" ); ModuleDatabase.LoadExplicit( "Tools_ObjectViewer" ); } diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs index 09baff973..b63f5dd22 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetImport.cs @@ -32,7 +32,13 @@ function isImageFormat(%fileExt) function isShapeFormat(%fileExt) { - if( (%fileExt $= ".dae") || (%fileExt $= ".dts") || (%fileExt $= ".fbx") || (%fileExt $= ".obj") || (%fileExt $= ".blend")) + if( (%fileExt $= ".dae") || + (%fileExt $= ".dts") || + (%fileExt $= ".fbx") || + (%fileExt $= ".gltf") || + (%fileExt $= ".glb") || + (%fileExt $= ".obj") || + (%fileExt $= ".blend")) return true; return false; @@ -67,6 +73,9 @@ function findImageFile(%path, %materialName, %type) function AssetBrowser::onBeginDropFiles( %this ) { + if(!AssetBrowser.isAwake()) + return; + error("% DragDrop - Beginning files dropping."); %this.importAssetUnprocessedListArray.empty(); %this.importAssetFinalListArray.empty(); @@ -378,29 +387,26 @@ function AssetBrowser::addImportingAsset( %this, %assetType, %filePath, %parentA if(%assetItem.assetType $= "Model") { %fileExt = fileExt(%assetItem.filePath); + %shapeInfo = new GuiTreeViewCtrl(); if(%fileExt $= ".dae") { - %shapeInfo = new GuiTreeViewCtrl(); enumColladaForImport(%assetItem.filePath, %shapeInfo, false); } else if(%fileExt $= ".dts") { - %shapeInfo = new GuiTreeViewCtrl(); %shapeInfo.insertItem(0, "Shape", 1); %shapeInfo.insertItem(0, "Animations", 0); } else { - %shapeInfo = GetShapeInfo(%assetItem.filePath); + %success = GetShapeInfo(%assetItem.filePath, %shapeInfo); } %assetItem.shapeInfo = %shapeInfo; - %shapeItem = %assetItem.shapeInfo.findItemByName("Shape"); - %shapeCount = %assetItem.shapeInfo.getItemValue(%shapeItem); + %shapeCount = %assetItem.shapeInfo._meshCount; - %animItem = %assetItem.shapeInfo.findItemByName("Animations"); - %animCount = %assetItem.shapeInfo.getItemValue(%animItem); + %animCount = %assetItem.shapeInfo._animCount; //If the model has shapes AND animations, then it's a normal shape with embedded animations //if it has shapes and no animations it's a regular static mesh @@ -683,97 +689,7 @@ function ImportAssetWindow::processNewImportAssets(%this, %id) if(%assetItem.assetType $= "Model") { - %fileExt = fileExt(%assetItem.filePath); - if(%fileExt $= ".dae") - { - %shapeInfo = new GuiTreeViewCtrl(); - enumColladaForImport(%assetItem.filePath, %shapeInfo, false); - } - else - { - %shapeInfo = GetShapeInfo(%assetItem.filePath); - } - - %assetItem.shapeInfo = %shapeInfo; - - %shapeItem = %assetItem.shapeInfo.findItemByName("Shape"); - %shapeCount = %assetItem.shapeInfo.getItemValue(%shapeItem); - - if(%assetConfigObj.ImportMesh == 1 && %shapeCount > 0) - { - - } - - %animItem = %assetItem.shapeInfo.findItemByName("Animations"); - %animCount = %assetItem.shapeInfo.getItemValue(%animItem); - - if(%assetConfigObj.ImportAnimations == 1 && %animCount > 0) - { - %animationItem = %assetItem.shapeInfo.getChild(%animItem); - - %animName = %assetItem.shapeInfo.getItemText(%animationItem); - //%animName = %assetItem.shapeInfo.getItemValue(%animationItem); - - AssetBrowser.addImportingAsset("Animation", %animName, %assetItem); - - %animationItem = %assetItem.shapeInfo.getNextSibling(%animationItem); - while(%animationItem != 0) - { - %animName = %assetItem.shapeInfo.getItemText(%animationItem); - //%animName = %assetItem.shapeInfo.getItemValue(%animationItem); - - AssetBrowser.addImportingAsset("Animation", %animName, %assetItem); - - %animationItem = %shapeInfo.getNextSibling(%animationItem); - } - } - - %matItem = %assetItem.shapeInfo.findItemByName("Materials"); - %matCount = %assetItem.shapeInfo.getItemValue(%matItem); - - if(%assetConfigObj.importMaterials == 1 && %matCount > 0) - { - %materialItem = %assetItem.shapeInfo.getChild(%matItem); - - %matName = %assetItem.shapeInfo.getItemText(%materialItem); - - %filePath = %assetItem.shapeInfo.getItemValue(%materialItem); - if(%filePath !$= "") - { - AssetBrowser.addImportingAsset("Material", %filePath, %assetItem); - } - else - { - //we need to try and find our material, since the shapeInfo wasn't able to find it automatically - %filePath = findImageFile(filePath(%assetItem.filePath), %matName); - if(%filePath !$= "") - AssetBrowser.addImportingAsset("Material", %filePath, %assetItem); - else - AssetBrowser.addImportingAsset("Material", %matName, %assetItem); - } - - %materialItem = %assetItem.shapeInfo.getNextSibling(%materialItem); - while(%materialItem != 0) - { - %matName = %assetItem.shapeInfo.getItemText(%materialItem); - %filePath = %assetItem.shapeInfo.getItemValue(%materialItem); - if(%filePath !$= "") - { - AssetBrowser.addImportingAsset("Material", %filePath, %assetItem); - } - else - { - //we need to try and find our material, since the shapeInfo wasn't able to find it automatically - %filePath = findImageFile(filePath(%assetItem.filePath), %matName); - if(%filePath !$= "") - AssetBrowser.addImportingAsset("Material", %filePath, %assetItem); - else - AssetBrowser.addImportingAsset("Material", %matName, %assetItem); - } - - %materialItem = %shapeInfo.getNextSibling(%materialItem); - } - } + AssetBrowser.prepareImportShapeAsset(%assetItem); } else if(%assetItem.assetType $= "Animation") { diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.cs index ef3641181..ed8f99b0a 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.cs @@ -314,14 +314,14 @@ function AssetBrowser::importMaterialAsset(%this, %assetItem) %assetPath = "data/" @ %moduleName @ "/materials"; %tamlpath = %assetPath @ "/" @ %assetName @ ".asset.taml"; %sgfPath = %assetPath @ "/" @ %assetName @ ".sgf"; - %scriptPath = %assetName @ ".cs"; + %scriptPath = %assetPath @ "/" @ %assetName @ ".cs"; %newAsset = new MaterialAsset() { assetName = %assetName; versionId = 1; shaderGraph = %sgfPath; - scriptFile = %scriptPath; + scriptFile = %assetName @ ".cs"; originalFilePath = %filePath; materialDefinitionName = %assetName; }; @@ -431,6 +431,8 @@ function AssetBrowser::buildMaterialAssetPreview(%this, %assetDef, %previewData) @ "EditorGui.setEditor(MaterialEditorPlugin); " @ "AssetBrowser.hideDialog();"; + %test = %assetDef.materialDefinitionName.diffuseMapAsset[0]; + if(isFile(%assetDef.materialDefinitionName.diffuseMap[0])) %previewData.previewImage = %assetDef.materialDefinitionName.diffuseMap[0]; else if(%assetDef.materialDefinitionName.diffuseMapAsset[0] !$= "") diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.cs index c3d7ad093..26b11e25e 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.cs @@ -43,20 +43,29 @@ function AssetBrowser::editShapeAsset(%this, %assetDef) function AssetBrowser::prepareImportShapeAsset(%this, %assetItem) { %fileExt = fileExt(%assetItem.filePath); - if(%fileExt $= ".dae") + + if(!isObject(%assetItem.shapeInfo)) { %shapeInfo = new GuiTreeViewCtrl(); - enumColladaForImport(%assetItem.filePath, %shapeInfo, false); + if(%fileExt $= ".dae") + { + enumColladaForImport(%assetItem.filePath, %shapeInfo, false); + } + else if(%fileExt $= ".dts") + { + %shapeInfo.insertItem(0, "Shape", 1); + %shapeInfo.insertItem(0, "Animations", 0); + } + else + { + GetShapeInfo(%assetItem.filePath, %shapeInfo); + } + + %assetItem.shapeInfo = %shapeInfo; } - else - { - %shapeInfo = GetShapeInfo(%assetItem.filePath); - } - - %assetItem.shapeInfo = %shapeInfo; - %shapeItem = %assetItem.shapeInfo.findItemByName("Shape"); - %shapeCount = %assetItem.shapeInfo.getItemValue(%shapeItem); + %shapeCount = %assetItem.shapeInfo._meshCount; + %shapeItem = %assetItem.shapeInfo.findItemByName("Meshes"); %shapeId = ImportAssetTree.findItemByObjectId(%assetItem); @@ -65,8 +74,8 @@ function AssetBrowser::prepareImportShapeAsset(%this, %assetItem) } + %animCount = %assetItem.shapeInfo._animCount; %animItem = %assetItem.shapeInfo.findItemByName("Animations"); - %animCount = %assetItem.shapeInfo.getItemValue(%animItem); if(ImportAssetWindow.activeImportConfig.ImportAnimations == 1 && %animCount > 0) { @@ -88,30 +97,29 @@ function AssetBrowser::prepareImportShapeAsset(%this, %assetItem) }*/ } + + %matCount = %assetItem.shapeInfo._materialCount; %matItem = %assetItem.shapeInfo.findItemByName("Materials"); - %matCount = %assetItem.shapeInfo.getItemValue(%matItem); if(ImportAssetWindow.activeImportConfig.importMaterials == 1 && %matCount > 0) { - - %materialItem = %assetItem.shapeInfo.getChild(%matItem); %matName = %assetItem.shapeInfo.getItemText(%materialItem); %filePath = %assetItem.shapeInfo.getItemValue(%materialItem); - if(%filePath !$= "") + if(%filePath !$= "" && isFile(%filePath)) { - AssetBrowser.addImportingAsset("Material", %filePath, %shapeId); + AssetBrowser.addImportingAsset("Material", %filePath, %assetItem); } else { //we need to try and find our material, since the shapeInfo wasn't able to find it automatically %filePath = findImageFile(filePath(%assetItem.filePath), %matName); - if(%filePath !$= "") - AssetBrowser.addImportingAsset("Material", %filePath, %shapeId); + if(%filePath !$= "" && isFile(%filePath)) + AssetBrowser.addImportingAsset("Material", %filePath, %assetItem); else - AssetBrowser.addImportingAsset("Material", %matName, %shapeId); + AssetBrowser.addImportingAsset("Material", %matName, %assetItem); } %materialItem = %assetItem.shapeInfo.getNextSibling(%materialItem); @@ -119,21 +127,21 @@ function AssetBrowser::prepareImportShapeAsset(%this, %assetItem) { %matName = %assetItem.shapeInfo.getItemText(%materialItem); %filePath = %assetItem.shapeInfo.getItemValue(%materialItem); - if(%filePath !$= "") + if(%filePath !$= "" && isFile(%filePath)) { - AssetBrowser.addImportingAsset("Material", %filePath, %shapeId); + AssetBrowser.addImportingAsset("Material", %filePath, %assetItem); } else { //we need to try and find our material, since the shapeInfo wasn't able to find it automatically %filePath = findImageFile(filePath(%assetItem.filePath), %matName); - if(%filePath !$= "") - AssetBrowser.addImportingAsset("Material", %filePath, %shapeId); + if(%filePath !$= "" && isFile(%filePath)) + AssetBrowser.addImportingAsset("Material", %filePath, %assetItem); else - AssetBrowser.addImportingAsset("Material", %matName, %shapeId); + AssetBrowser.addImportingAsset("Material", %matName, %assetItem); } - %materialItem = %shapeInfo.getNextSibling(%materialItem); + %materialItem = %assetItem.shapeInfo.getNextSibling(%materialItem); } } } diff --git a/Templates/BaseGame/game/tools/gui/EditorSettingsWindow.ed.gui b/Templates/BaseGame/game/tools/gui/EditorSettingsWindow.ed.gui new file mode 100644 index 000000000..12189376d --- /dev/null +++ b/Templates/BaseGame/game/tools/gui/EditorSettingsWindow.ed.gui @@ -0,0 +1,201 @@ +//--- OBJECT WRITE BEGIN --- +%guiContent = new GuiControl(EditorSettingsWindow,EditorGuiGroup) { + position = "0 0"; + extent = "1024 768"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "1"; + + new GuiWindowCollapseCtrl(ESettingsWindow) { + text = "Editor Settings"; + resizeWidth = "0"; + resizeHeight = "1"; + canMove = "1"; + canClose = "1"; + canMinimize = "0"; + canMaximize = "0"; + canCollapse = "1"; + closeCommand = "ESettingsWindow.hideDialog();"; + edgeSnap = "1"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "34 48"; + extent = "958 671"; + minExtent = "319 100"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiWindowProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + internalName = "EditorSettingsWindow"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiSplitContainer() { + orientation = "Vertical"; + splitterSize = "2"; + splitPoint = "182 100"; + fixedPanel = "None"; + fixedSize = "100"; + docking = "None"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "0 24"; + extent = "958 647"; + minExtent = "64 64"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiPanel() { + docking = "Client"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "0 0"; + extent = "180 647"; + minExtent = "16 16"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + internalName = "Panel1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiScrollCtrl() { + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + lockHorizScroll = "0"; + lockVertScroll = "0"; + constantThumbHeight = "0"; + childMargin = "0 0"; + mouseWheelScrollSpeed = "-1"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "3 3"; + extent = "177 643"; + minExtent = "100 50"; + horizSizing = "width"; + vertSizing = "height"; + profile = "ToolsGuiScrollProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextListCtrl(ESettingsWindowList) { + columns = "0"; + fitParentWidth = "0"; + clipColumnText = "0"; + position = "1 1"; + extent = "9 2"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "height"; + profile = "ToolsGuiListBoxProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; + }; + new GuiPanel() { + docking = "Client"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "184 0"; + extent = "774 647"; + minExtent = "16 16"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + internalName = "panel2"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiVariableInspector(SettingsInspector) { + dividerMargin = "5"; + showCustomFields = "1"; + stackingType = "Vertical"; + horizStacking = "Left to Right"; + vertStacking = "Top to Bottom"; + padding = "1"; + dynamicSize = "1"; + dynamicNonStackExtent = "0"; + dynamicPos = "0"; + changeChildSizeToFit = "1"; + changeChildPosition = "1"; + position = "0 0"; + extent = "773 643"; + minExtent = "16 16"; + horizSizing = "width"; + vertSizing = "height"; + profile = "GuiInspectorProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs b/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs new file mode 100644 index 000000000..373739be3 --- /dev/null +++ b/Templates/BaseGame/game/tools/gui/editorSettingsWindow.ed.cs @@ -0,0 +1,202 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +function ESettingsWindow::startup( %this ) +{ +} + +function ESettingsWindow::onWake( %this ) +{ + new ArrayObject(SettingsPageList); + %this.addSettingsPage("Axis", "Axis Gizmo"); + %this.addSettingsPage("General", "General Settings"); + %this.addSettingsPage("Camera", "Camera Settings"); + %this.addSettingsPage("SceneEditor", "Scene Editor"); + %this.addSettingsPage("ShapeEditor", "Shape Editor"); + %this.addSettingsPage("NavEditor", "Navigation Editor"); + + ESettingsWindowList.setSelectedById( 1 ); +} + +function ESettingsWindow::hideDialog( %this ) +{ + %this.setVisible(false); +} + +function ESettingsWindow::ToggleVisibility() +{ + if ( ESettingsWindow.visible ) + { + ESettingsWindow.setVisible(false); + EditorSettings.write(); + } + else + { + ESettingsWindow.setVisible(true); + ESettingsWindow.selectWindow(); + ESettingsWindow.setCollapseGroup(false); + } + + ESettingsWindowList.setSelectedById( 1 ); +} + +/*function ESettingsWindow::addTabPage( %this, %page ) +{ + ESettingsWindowTabBook.add( %page ); + ESettingsWindowList.addRow( ESettingsWindowTabBook.getSelectedPage(), %page.text ); + ESettingsWindowList.sort(0); +}*/ + +function ESettingsWindow::addSettingsPage(%this, %settingsPageName, %settingsPageText) +{ + SettingsPageList.add(%settingsPageName, %settingsPageText); + + ESettingsWindowList.addRow( SettingsPageList.count(), %settingsPageText ); + ESettingsWindowList.sort(0); +} + +//----------------------------------------------------------------------------- + +function ESettingsWindowList::onSelect( %this, %id, %text ) +{ + SettingsInspector.clearFields(); + %pageName = SettingsPageList.getKey(SettingsPageList.getIndexFromValue(%text)); + eval("ESettingsWindow.get" @ %pageName @ "Settings();"); +} + +function ESettingsWindow::getAxisSettings(%this) +{ + SettingsInspector.startGroup("Gizmo"); + SettingsInspector.addSettingsField("AxisGizmo/mouseRotateScalar", "Rotate Scalar", "float", ""); + SettingsInspector.addSettingsField("AxisGizmo/mouseScaleScalar", "Scale Scalar", "float", ""); + SettingsInspector.addSettingsField("AxisGizmo/renderWhenUsed", "Render When Manipulated", "bool", ""); + SettingsInspector.addSettingsField("AxisGizmo/renderInfoText", "Render Tool Text", "bool", ""); + SettingsInspector.endGroup(); + + SettingsInspector.startGroup("Grid"); + SettingsInspector.addSettingsField("AxisGizmo/Grid/renderPlane", "Render Plane", "bool", ""); + SettingsInspector.addSettingsField("AxisGizmo/Grid/renderPlaneHashes", "Render Plane Hashes", "bool", ""); + SettingsInspector.addSettingsField("AxisGizmo/Grid/planeDim", "Plane Size", "float", ""); + SettingsInspector.addSettingsField("AxisGizmo/Grid/gridColor", "Plane Color", "colorI", ""); + SettingsInspector.endGroup(); +} + +function ESettingsWindow::getGeneralSettings(%this) +{ + SettingsInspector.startGroup("Paths"); + SettingsInspector.addSettingsField("WorldEditor/newLevelFile", "New Level", "filename", ""); + SettingsInspector.addSettingsField("WorldEditor/torsionPath", "Torsion Path", "filename", ""); + SettingsInspector.endGroup(); + + SettingsInspector.startGroup("Theme"); + SettingsInspector.addSettingsField("WorldEditor/Theme/backgroundColor", "Background Color", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/Theme/windowTitleBGColor", "Window Title Color", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/Theme/windowTitleFontColor", "Window Title Text Color", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/Theme/mainTextColor", "Main Text Color", "colorI", ""); + SettingsInspector.endGroup(); +} + +function ESettingsWindow::getCameraSettings(%this) +{ + SettingsInspector.startGroup("Mouse Control"); + SettingsInspector.addSettingsField("Camera/invertYAxis", "Invert Y Axis", "bool", ""); + SettingsInspector.addSettingsField("Camera/invertXAxis", "Invert X Axis", "bool", ""); + SettingsInspector.endGroup(); + + //Based on currently loaded level(rootScene) + SettingsInspector.startGroup(EditorSettings.value("WorldEditor/newLevelFile") @ " Camera"); + SettingsInspector.addSettingsField("WorldEditor/newLevelFile", "Camera Speed Min", "float", ""); + SettingsInspector.addSettingsField("WorldEditor/torsionPath", "Camera Speed Max", "200", ""); + SettingsInspector.endGroup(); +} + +function ESettingsWindow::getNavEditorSettings(%this) +{ + SettingsInspector.startGroup("Test Spawn"); + SettingsInspector.addSettingsField("WorldEditor/newLevelFile", "Spawn Class", "list", "", "AIPlayer"); + SettingsInspector.addSettingsField("WorldEditor/torsionPath", "Datablock", "string", ""); + SettingsInspector.endGroup(); + + SettingsInspector.startGroup("Colors"); + SettingsInspector.addSettingsField("WorldEditor/newLevelFile", "Hover Spline", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/torsionPath", "Select Spline", "colorI", ""); + SettingsInspector.endGroup(); +} + +function ESettingsWindow::getSceneEditorSettings(%this) +{ + SettingsInspector.startGroup("Render"); + SettingsInspector.addSettingsField("WorldEditor/Render/renderObjHandle", "Object Icons", "bool", ""); + SettingsInspector.addSettingsField("WorldEditor/Render/renderObjText", "Object Text", "bool", ""); + SettingsInspector.addSettingsField("WorldEditor/Render/showMousePopupInfo", "Mouse Popup Info", "bool", ""); + SettingsInspector.addSettingsField("WorldEditor/Render/renderPopupBackground", "Popup Menu Background", "bool", ""); + SettingsInspector.endGroup(); + + SettingsInspector.startGroup("Colors"); + SettingsInspector.addSettingsField("WorldEditor/Grid/gridColor", "Grid Major", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/Grid/gridMinorColor", "Grid Minor", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/Grid/gridOriginColor", "Grid Origin", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/Color/dragRectColor", "Drag Rect", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/Color/objectTextColor", "Object Text", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/Color/popupTextColor", "Popup Text", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/Color/popupBackgroundColor", "Popup Back", "colorI", ""); + SettingsInspector.endGroup(); + + SettingsInspector.startGroup("Misc"); + SettingsInspector.addSettingsField("WorldEditor/forceLoadDAE", "Force Load DAE", "bool", ""); + SettingsInspector.addSettingsField("WorldEditor/Tools/dropAtScreenCenterScalar", "Screen Center Scalar", "float", ""); + SettingsInspector.addSettingsField("WorldEditor/Tools/dropAtScreenCenterMax", "Screen Center Max", "float", ""); + SettingsInspector.endGroup(); +} + +function ESettingsWindow::getShapeEditorSettings(%this) +{ + SettingsInspector.startGroup("Colors"); + SettingsInspector.addSettingsField("WorldEditor/newLevelFile", "Sun Diffuse", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/newLevelFile", "Sun Ambient", "colorI", ""); + SettingsInspector.addSettingsField("WorldEditor/newLevelFile", "Background", "colorI", ""); + SettingsInspector.endGroup(); + + SettingsInspector.startGroup("Grid"); + SettingsInspector.addSettingsField("WorldEditor/newLevelFile", "Grid Size", "float", ""); + SettingsInspector.addSettingsField("WorldEditor/newLevelFile", "Grid Dimension", "vector2", ""); + SettingsInspector.endGroup(); +} + +//Read/write field functions +function SettingsInspector::addSettingsField(%this, %settingsFieldName, %labelText, %fieldType, %tooltip, %fieldData) +{ + %moddedSettingsFieldName = strreplace(%settingsFieldName, "/", "-"); + %this.addCallbackField(%moddedSettingsFieldName, %labelText, %fieldType, "", EditorSettings.value(%settingsFieldName), %fieldData, "changeEditorSetting"); +} + +function SettingsInspector::changeEditorSetting(%this, %varName, %value) +{ + %varName = strreplace(%varName, "-", "/"); + + echo("Set " @ %varName @ " to be " @ %value); + + EditorSettings.setValue(%varName, %value); + + %id = ESettingsWindowList.getSelectedRow(); + ESettingsWindowList.setSelectedRow(%id); +} \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/gui/profiles.ed.cs b/Templates/BaseGame/game/tools/gui/profiles.ed.cs index e1be42469..bb750611c 100644 --- a/Templates/BaseGame/game/tools/gui/profiles.ed.cs +++ b/Templates/BaseGame/game/tools/gui/profiles.ed.cs @@ -37,8 +37,8 @@ new GuiControlProfile (ToolsGuiDefaultProfile) mouseOverSelected = false; // fill color - opaque = false; - fillColor = "48 48 48"; + opaque = true; + fillColor = "50 50 50"; fillColorHL = "91 101 116"; fillColorSEL = "91 101 116"; fillColorNA = "255 0 255 "; @@ -154,11 +154,11 @@ new GuiControlProfile (ToolsGuiWindowProfile) { opaque = false; border = 1; - fillColor = "48 48 48"; - fillColorHL = "42 42 42"; - fillColorNA = "42 42 42"; - fontColor = "215 215 215"; - fontColorHL = "215 215 215"; + fillColor = EditorSettings.value("WorldEditor/Theme/windowTitleBGColor"); + fillColorHL = EditorSettings.value("WorldEditor/Theme/windowTitleBGHLColor"); + fillColorNA = EditorSettings.value("WorldEditor/Theme/windowTitleBGNAColor"); + fontColor = EditorSettings.value("WorldEditor/Theme/windowTitleFontColor"); + fontColorHL = EditorSettings.value("WorldEditor/Theme/windowTitleFontHLColor"); bevelColorHL = "255 255 255"; bevelColorLL = "0 0 0"; text = "untitled"; @@ -548,6 +548,12 @@ new GuiControlProfile( ToolsGuiPopUpMenuEditProfile : ToolsGuiPopUpMenuDefault ) if( !isObject( ToolsGuiListBoxProfile ) ) new GuiControlProfile( ToolsGuiListBoxProfile ) { + fillColorHL = "100 100 100"; + fillColorNA = "150 150 150"; + fontColor = "215 215 215"; + fontColorHL = "215 215 215"; + fontColorNA = "50 50 50"; + tab = true; canKeyFocus = true; category = "Tools"; diff --git a/Templates/BaseGame/game/tools/main.cs b/Templates/BaseGame/game/tools/main.cs index 23e0ee4b0..bab76c20d 100644 --- a/Templates/BaseGame/game/tools/main.cs +++ b/Templates/BaseGame/game/tools/main.cs @@ -49,9 +49,6 @@ package Tools //First, we want to ensure we don't inadvertently clean up our editor objects by leaving them in the MissionCleanup group, so lets change that real fast $instantGroup = ""; pushInstantGroup(); - - new Settings(EditorSettings) { file = "tools/settings.xml"; }; - EditorSettings.read(); echo( " % - Initializing Tools" ); diff --git a/Templates/BaseGame/game/tools/settings.xml b/Templates/BaseGame/game/tools/settings.xml index 2f8de41ac..0c5e8e80b 100644 --- a/Templates/BaseGame/game/tools/settings.xml +++ b/Templates/BaseGame/game/tools/settings.xml @@ -1,115 +1,126 @@ + 0.8 0 1 100 15 0 0.8 - 0.8 - 0 - 10 10 10 0 - 0 255 255 255 20 500 + 0 + 0 + 10 10 10 - 0 - 6 - 50 - 1 - WorldEditorInspectorPlugin - screenCenter 40 + 50 + 6 + 0 + 1 + screenCenter + WorldEditorInspectorPlugin + AssetWork_Debug.exe + + 102 102 102 100 + 255 255 255 100 + 51 51 51 100 + 1 + 0 + - 100 100 100 255 - 0 0 255 255 - 255 255 0 255 - 255 255 255 255 255 0 0 255 - 255 255 0 255 + 255 255 255 255 + 0 0 255 255 0 255 0 255 - - - 255 - 20 - 8 - 1 - 0 - - - tools/worldEditor/images/SelectHandle - tools/worldEditor/images/LockedHandle - tools/worldEditor/images/DefaultHandle - - - 2 - 0 - 100 - 1 - 0 - 1 - 0 + 255 255 0 255 + 100 100 100 255 + 255 255 0 255 - 1 - 1 - 1 1 + 1 + 1 1 + 1 - - 51 51 51 100 - 0 - 255 255 255 100 - 1 - 102 102 102 100 + + 100 + 0 + 0 + 1 + 2 + 1 + 0 + + + 8 + 20 + 255 + 0 + 1 - http://www.garagegames.com/products/torque-3d/forums - http://www.garagegames.com/products/torque-3d/documentation/user ../../../Documentation/Official Documentation.html + http://www.garagegames.com/products/torque-3d/documentation/user ../../../Documentation/Torque 3D - Script Manual.chm + http://www.garagegames.com/products/torque-3d/forums + + + tools/worldEditor/images/LockedHandle + tools/worldEditor/images/SelectHandle + tools/worldEditor/images/DefaultHandle + + + 50 50 50 255 + 48 48 48 255 + 180 180 180 255 + 215 215 215 255 + 255 255 255 255 - tools/materialEditor/gui + tools/gui 1024 768 - - 1 - 2 - 1 - 1 - 8 - 1 - 0 - 1 - - - 1 - 1 - http://www.garagegames.com/products/torque-3d/documentation/user - ../../../Documentation/Torque 3D - Script Manual.chm ../../../Documentation/Official Documentation.html + ../../../Documentation/Torque 3D - Script Manual.chm + + + 2 + 1 + 0 + 8 + 1 + 1 + 1 + 1 Categorized 0 - 0 0 + 0 + + + 1 + 1 0 + + AIPlayer + data/FPSGameplay/levels @@ -118,9 +129,6 @@ - - AIPlayer - Grid_512_Orange diff --git a/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.cs b/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.cs index b4d843345..8b34e7942 100644 --- a/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.cs +++ b/Templates/BaseGame/game/tools/worldEditor/scripts/EditorGui.ed.cs @@ -141,8 +141,8 @@ function EditorGui::init(%this) // Editor Settings Window if( !isObject( %this-->EditorSettingsWindow ) ) { - exec("~/worldEditor/gui/EditorSettingsWindow.ed.gui"); - exec("~/worldEditor/scripts/editorSettingsWindow.ed.cs"); + exec("tools/gui/EditorSettingsWindow.ed.gui"); + exec("tools/gui/editorSettingsWindow.ed.cs"); %this.add( ESettingsWindow ); ESettingsWindow.setVisible(false);