mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 08:34:40 +00:00
WIP of updating terrain editor to work with assets
Fix minor UI issues for asset browser included folder 'asset type' script
This commit is contained in:
parent
a85bc7bae0
commit
22249bf4d4
25 changed files with 2203 additions and 1256 deletions
|
|
@ -40,6 +40,8 @@
|
||||||
#include "assets/assetPtr.h"
|
#include "assets/assetPtr.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "T3D/assets/TerrainMaterialAsset.h"
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
IMPLEMENT_CONOBJECT(TerrainAsset);
|
IMPLEMENT_CONOBJECT(TerrainAsset);
|
||||||
|
|
@ -89,7 +91,7 @@ ConsoleSetType(TypeTerrainAssetPtr)
|
||||||
|
|
||||||
TerrainAsset::TerrainAsset()
|
TerrainAsset::TerrainAsset()
|
||||||
{
|
{
|
||||||
mTerrainFile = StringTable->EmptyString();
|
mTerrainFilePath = StringTable->EmptyString();
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
@ -106,8 +108,22 @@ void TerrainAsset::initPersistFields()
|
||||||
Parent::initPersistFields();
|
Parent::initPersistFields();
|
||||||
|
|
||||||
//addField("shaderGraph", TypeRealString, Offset(mShaderGraphFile, TerrainAsset), "");
|
//addField("shaderGraph", TypeRealString, Offset(mShaderGraphFile, TerrainAsset), "");
|
||||||
addProtectedField("terrainFile", TypeAssetLooseFilePath, Offset(mTerrainFile, TerrainAsset),
|
addProtectedField("terrainFile", TypeAssetLooseFilePath, Offset(mTerrainFilePath, TerrainAsset),
|
||||||
&setTerrainFile, &getTerrainFile, "Path to the file containing the terrain data.");
|
&setTerrainFilePath, &getTerrainFilePath, "Path to the file containing the terrain data.");
|
||||||
|
}
|
||||||
|
|
||||||
|
void TerrainAsset::setDataField(StringTableEntry slotName, const char* array, const char* value)
|
||||||
|
{
|
||||||
|
Parent::setDataField(slotName, array, value);
|
||||||
|
|
||||||
|
//Now, if it's a material slot of some fashion, set it up
|
||||||
|
StringTableEntry matSlotName = StringTable->insert("terrainMaterialAsset");
|
||||||
|
if (String(slotName).startsWith(matSlotName))
|
||||||
|
{
|
||||||
|
StringTableEntry matId = StringTable->insert(value);
|
||||||
|
|
||||||
|
mTerrMaterialAssetIds.push_back(matId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TerrainAsset::initializeAsset()
|
void TerrainAsset::initializeAsset()
|
||||||
|
|
@ -115,22 +131,20 @@ void TerrainAsset::initializeAsset()
|
||||||
// Call parent.
|
// Call parent.
|
||||||
Parent::initializeAsset();
|
Parent::initializeAsset();
|
||||||
|
|
||||||
if (!Platform::isFullPath(mTerrainFile))
|
if (!Platform::isFullPath(mTerrainFilePath))
|
||||||
mTerrainFile = getOwned() ? expandAssetFilePath(mTerrainFile) : mTerrainFile;
|
mTerrainFilePath = getOwned() ? expandAssetFilePath(mTerrainFilePath) : mTerrainFilePath;
|
||||||
|
|
||||||
//if (Platform::isFile(mTerrainFile))
|
loadTerrain();
|
||||||
// Con::executeFile(mScriptFile, false, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TerrainAsset::onAssetRefresh()
|
void TerrainAsset::onAssetRefresh()
|
||||||
{
|
{
|
||||||
mTerrainFile = expandAssetFilePath(mTerrainFile);
|
mTerrainFilePath = expandAssetFilePath(mTerrainFilePath);
|
||||||
|
|
||||||
//if (Platform::isFile(mScriptFile))
|
loadTerrain();
|
||||||
// Con::executeFile(mScriptFile, false, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TerrainAsset::setTerrainFile(const char* pScriptFile)
|
void TerrainAsset::setTerrainFilePath(const char* pScriptFile)
|
||||||
{
|
{
|
||||||
// Sanity!
|
// Sanity!
|
||||||
AssertFatal(pScriptFile != NULL, "Cannot use a NULL script file.");
|
AssertFatal(pScriptFile != NULL, "Cannot use a NULL script file.");
|
||||||
|
|
@ -139,12 +153,52 @@ void TerrainAsset::setTerrainFile(const char* pScriptFile)
|
||||||
pScriptFile = StringTable->insert(pScriptFile);
|
pScriptFile = StringTable->insert(pScriptFile);
|
||||||
|
|
||||||
// Update.
|
// Update.
|
||||||
mTerrainFile = getOwned() ? expandAssetFilePath(pScriptFile) : pScriptFile;
|
mTerrainFilePath = getOwned() ? expandAssetFilePath(pScriptFile) : pScriptFile;
|
||||||
|
|
||||||
// Refresh the asset.
|
// Refresh the asset.
|
||||||
refreshAsset();
|
refreshAsset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TerrainAsset::loadTerrain()
|
||||||
|
{
|
||||||
|
mTerrMaterialAssets.clear();
|
||||||
|
mTerrMaterialAssetIds.clear();
|
||||||
|
|
||||||
|
//First, load any material, animation, etc assets we may be referencing in our asset
|
||||||
|
// Find any asset dependencies.
|
||||||
|
AssetManager::typeAssetDependsOnHash::Iterator assetDependenciesItr = mpOwningAssetManager->getDependedOnAssets()->find(mpAssetDefinition->mAssetId);
|
||||||
|
|
||||||
|
// Does the asset have any dependencies?
|
||||||
|
if (assetDependenciesItr != mpOwningAssetManager->getDependedOnAssets()->end())
|
||||||
|
{
|
||||||
|
// Iterate all dependencies.
|
||||||
|
while (assetDependenciesItr != mpOwningAssetManager->getDependedOnAssets()->end() && assetDependenciesItr->key == mpAssetDefinition->mAssetId)
|
||||||
|
{
|
||||||
|
StringTableEntry assetType = mpOwningAssetManager->getAssetType(assetDependenciesItr->value);
|
||||||
|
|
||||||
|
if (assetType == StringTable->insert("TerrainMaterialAsset"))
|
||||||
|
{
|
||||||
|
mTerrMaterialAssetIds.push_front(assetDependenciesItr->value);
|
||||||
|
|
||||||
|
//Force the asset to become initialized if it hasn't been already
|
||||||
|
AssetPtr<TerrainMaterialAsset> matAsset = assetDependenciesItr->value;
|
||||||
|
|
||||||
|
mTerrMaterialAssets.push_front(matAsset);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next dependency.
|
||||||
|
assetDependenciesItr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mTerrainFile = ResourceManager::get().load(mTerrainFilePath);
|
||||||
|
|
||||||
|
if (mTerrainFile)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
void TerrainAsset::copyTo(SimObject* object)
|
void TerrainAsset::copyTo(SimObject* object)
|
||||||
|
|
@ -190,7 +244,7 @@ GuiControl* GuiInspectorTypeTerrainAssetPtr::constructEditControl()
|
||||||
|
|
||||||
TerrainAsset* matAsset = AssetDatabase.acquireAsset< TerrainAsset>(matAssetId);
|
TerrainAsset* matAsset = AssetDatabase.acquireAsset< TerrainAsset>(matAssetId);
|
||||||
|
|
||||||
TerrainMaterial* materialDef = nullptr;
|
//TerrainMaterial* materialDef = nullptr;
|
||||||
|
|
||||||
char bitmapName[512] = "tools/worldEditor/images/toolbar/shape-editor";
|
char bitmapName[512] = "tools/worldEditor/images/toolbar/shape-editor";
|
||||||
|
|
||||||
|
|
@ -268,23 +322,3 @@ bool GuiInspectorTypeTerrainAssetPtr::updateRects()
|
||||||
|
|
||||||
return resized;
|
return resized;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiInspectorTypeTerrainAssetPtr::setMaterialAsset(String assetId)
|
|
||||||
{
|
|
||||||
mTargetObject->setDataField(mCaption, "", assetId);
|
|
||||||
|
|
||||||
//force a refresh
|
|
||||||
SimObject* obj = mInspector->getInspectObject();
|
|
||||||
mInspector->inspectObject(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
DefineEngineMethod(GuiInspectorTypeTerrainAssetPtr, setMaterialAsset, void, (String assetId), (""),
|
|
||||||
"Gets a particular shape animation asset for this shape.\n"
|
|
||||||
"@param animation asset index.\n"
|
|
||||||
"@return Shape Animation Asset.\n")
|
|
||||||
{
|
|
||||||
if (assetId == String::EmptyString)
|
|
||||||
return;
|
|
||||||
|
|
||||||
return object->setMaterialAsset(assetId);
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
// IN THE SOFTWARE.
|
// IN THE SOFTWARE.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
#pragma once
|
||||||
#ifndef TERRAINASSET_H
|
#ifndef TERRAINASSET_H
|
||||||
#define TERRAINASSET_H
|
#define TERRAINASSET_H
|
||||||
|
|
||||||
|
|
@ -46,14 +47,23 @@
|
||||||
#include "gui/editor/guiInspectorTypes.h"
|
#include "gui/editor/guiInspectorTypes.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "terrain/terrData.h"
|
//#include "terrain/terrData.h"
|
||||||
|
#include "assets/assetPtr.h"
|
||||||
|
#include "terrain/terrFile.h"
|
||||||
|
|
||||||
|
class TerrainMaterialAsset;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
class TerrainAsset : public AssetBase
|
class TerrainAsset : public AssetBase
|
||||||
{
|
{
|
||||||
typedef AssetBase Parent;
|
typedef AssetBase Parent;
|
||||||
|
|
||||||
StringTableEntry mTerrainFile;
|
StringTableEntry mTerrainFilePath;
|
||||||
|
Resource<TerrainFile> mTerrainFile;
|
||||||
|
|
||||||
|
//Material assets we're dependent on and use
|
||||||
|
Vector<StringTableEntry> mTerrMaterialAssetIds;
|
||||||
|
Vector<AssetPtr<TerrainMaterialAsset>> mTerrMaterialAssets;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TerrainAsset();
|
TerrainAsset();
|
||||||
|
|
@ -63,8 +73,14 @@ public:
|
||||||
static void initPersistFields();
|
static void initPersistFields();
|
||||||
virtual void copyTo(SimObject* object);
|
virtual void copyTo(SimObject* object);
|
||||||
|
|
||||||
void setTerrainFile(const char* pTerrainFile);
|
virtual void setDataField(StringTableEntry slotName, const char* array, const char* value);
|
||||||
inline StringTableEntry getTerrainFile(void) const { return mTerrainFile; };
|
|
||||||
|
void setTerrainFilePath(const char* pTerrainFile);
|
||||||
|
inline StringTableEntry getTerrainFilePath(void) const { return mTerrainFilePath; };
|
||||||
|
|
||||||
|
inline Resource<TerrainFile> getTerrainResource(void) const { return mTerrainFile; };
|
||||||
|
|
||||||
|
bool loadTerrain();
|
||||||
|
|
||||||
/// Declare Console Object.
|
/// Declare Console Object.
|
||||||
DECLARE_CONOBJECT(TerrainAsset);
|
DECLARE_CONOBJECT(TerrainAsset);
|
||||||
|
|
@ -73,8 +89,8 @@ protected:
|
||||||
virtual void initializeAsset();
|
virtual void initializeAsset();
|
||||||
virtual void onAssetRefresh(void);
|
virtual void onAssetRefresh(void);
|
||||||
|
|
||||||
static bool setTerrainFile(void *obj, const char *index, const char *data) { static_cast<TerrainAsset*>(obj)->setTerrainFile(data); return false; }
|
static bool setTerrainFilePath(void *obj, const char *index, const char *data) { static_cast<TerrainAsset*>(obj)->setTerrainFilePath(data); return false; }
|
||||||
static const char* getTerrainFile(void* obj, const char* data) { return static_cast<TerrainAsset*>(obj)->getTerrainFile(); }
|
static const char* getTerrainFilePath(void* obj, const char* data) { return static_cast<TerrainAsset*>(obj)->getTerrainFilePath(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
DefineConsoleType(TypeTerrainAssetPtr, TerrainAsset)
|
DefineConsoleType(TypeTerrainAssetPtr, TerrainAsset)
|
||||||
|
|
@ -96,7 +112,6 @@ public:
|
||||||
|
|
||||||
virtual GuiControl* constructEditControl();
|
virtual GuiControl* constructEditControl();
|
||||||
virtual bool updateRects();
|
virtual bool updateRects();
|
||||||
void setMaterialAsset(String assetId);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _ASSET_BASE_H_
|
#endif // _ASSET_BASE_H_
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
// IN THE SOFTWARE.
|
// IN THE SOFTWARE.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
#pragma once
|
||||||
#ifndef TERRAINMATERIALASSET_H
|
#ifndef TERRAINMATERIALASSET_H
|
||||||
#define TERRAINMATERIALASSET_H
|
#define TERRAINMATERIALASSET_H
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@ Material::Material()
|
||||||
dMemset(mCellLayout, 0, sizeof(mCellLayout));
|
dMemset(mCellLayout, 0, sizeof(mCellLayout));
|
||||||
dMemset(mCellSize, 0, sizeof(mCellSize));
|
dMemset(mCellSize, 0, sizeof(mCellSize));
|
||||||
dMemset(mNormalMapAtlas, 0, sizeof(mNormalMapAtlas));
|
dMemset(mNormalMapAtlas, 0, sizeof(mNormalMapAtlas));
|
||||||
dMemset(mUseAnisotropic, 0, sizeof(mUseAnisotropic));
|
dMemset(mUseAnisotropic, 1, sizeof(mUseAnisotropic));
|
||||||
|
|
||||||
// Deferred Shading : Metalness
|
// Deferred Shading : Metalness
|
||||||
dMemset(mUseMetalness, 0, sizeof(mUseMetalness));
|
dMemset(mUseMetalness, 0, sizeof(mUseMetalness));
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
#include "T3D/physics/physicsCollision.h"
|
#include "T3D/physics/physicsCollision.h"
|
||||||
#include "console/engineAPI.h"
|
#include "console/engineAPI.h"
|
||||||
|
|
||||||
#include "console/engineAPI.h"
|
#include "T3D/assets/TerrainMaterialAsset.h"
|
||||||
using namespace Torque;
|
using namespace Torque;
|
||||||
|
|
||||||
IMPLEMENT_CO_NETOBJECT_V1(TerrainBlock);
|
IMPLEMENT_CO_NETOBJECT_V1(TerrainBlock);
|
||||||
|
|
@ -207,6 +207,9 @@ TerrainBlock::TerrainBlock()
|
||||||
mNetFlags.set(Ghostable | ScopeAlways);
|
mNetFlags.set(Ghostable | ScopeAlways);
|
||||||
mIgnoreZodiacs = false;
|
mIgnoreZodiacs = false;
|
||||||
zode_primBuffer = 0;
|
zode_primBuffer = 0;
|
||||||
|
|
||||||
|
mTerrainAsset = StringTable->EmptyString();
|
||||||
|
mTerrainAssetId = StringTable->EmptyString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -352,17 +355,121 @@ void TerrainBlock::setFile(const Resource<TerrainFile>& terr)
|
||||||
mTerrFileName = terr.getPath();
|
mTerrFileName = terr.getPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TerrainBlock::setTerrainAsset(const StringTableEntry terrainAssetId)
|
||||||
|
{
|
||||||
|
mTerrainAssetId = terrainAssetId;
|
||||||
|
mTerrainAsset = mTerrainAssetId;
|
||||||
|
|
||||||
|
if (mTerrainAsset.isNull())
|
||||||
|
{
|
||||||
|
Con::errorf("[TerrainBlock] Failed to load terrain asset.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Resource<TerrainFile> file = mTerrainAsset->getTerrainResource();
|
||||||
|
if (!file)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
mFile = file;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool TerrainBlock::save(const char *filename)
|
bool TerrainBlock::save(const char *filename)
|
||||||
{
|
{
|
||||||
return mFile->save(filename);
|
return mFile->save(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TerrainBlock::saveAsset()
|
||||||
|
{
|
||||||
|
if (!mTerrainAsset.isNull() && mTerrainAsset->isAssetValid())
|
||||||
|
{
|
||||||
|
//first, clear out our old dependency references
|
||||||
|
/*SimFieldDictionary* fieldDictionary = mTerrainAsset->getFieldDictionary();
|
||||||
|
for (SimFieldDictionaryIterator itr(fieldDictionary); *itr; ++itr)
|
||||||
|
{
|
||||||
|
SimFieldDictionary::Entry* entry = *itr;
|
||||||
|
|
||||||
|
if (String(entry->slotName).startsWith("terrainMaterailAsset"))
|
||||||
|
{
|
||||||
|
//got one, so clear it's value
|
||||||
|
setDataField(entry->slotName, NULL, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AssetQuery* pAssetQuery = new AssetQuery();
|
||||||
|
AssetDatabase.findAssetType(pAssetQuery, "TerrainMaterialAsset");
|
||||||
|
|
||||||
|
TerrainBlock* clientTerr = static_cast<TerrainBlock*>(getClientObject());
|
||||||
|
|
||||||
|
U32 terrMatIdx = 0;
|
||||||
|
for (U32 i = 0; i < pAssetQuery->mAssetList.size(); i++)
|
||||||
|
{
|
||||||
|
//Acquire it so we can check it for matches
|
||||||
|
AssetPtr<TerrainMaterialAsset> terrMatAsset = pAssetQuery->mAssetList[i];
|
||||||
|
|
||||||
|
for (U32 m = 0; m < clientTerr->mFile->mMaterials.size(); m++)
|
||||||
|
{
|
||||||
|
StringTableEntry intMatName = clientTerr->mFile->mMaterials[m]->getInternalName();
|
||||||
|
|
||||||
|
StringTableEntry assetMatDefName = terrMatAsset->getMaterialDefinitionName();
|
||||||
|
if (assetMatDefName == intMatName)
|
||||||
|
{
|
||||||
|
//we have a match!
|
||||||
|
char depSlotName[30];
|
||||||
|
dSprintf(depSlotName, sizeof(depSlotName), "terrainMaterialAsset%d", terrMatIdx);
|
||||||
|
|
||||||
|
char depValue[255];
|
||||||
|
dSprintf(depValue, sizeof(depValue), "@Asset=%s", terrMatAsset.getAssetId());
|
||||||
|
|
||||||
|
setDataField(depSlotName, NULL, depValue);
|
||||||
|
|
||||||
|
terrMatIdx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
terrMatAsset.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
pAssetQuery->destroySelf();
|
||||||
|
|
||||||
|
// Set the format mode.
|
||||||
|
Taml taml;
|
||||||
|
|
||||||
|
// Yes, so set it.
|
||||||
|
taml.setFormatMode(Taml::getFormatModeEnum("xml"));
|
||||||
|
|
||||||
|
// Turn-off auto-formatting.
|
||||||
|
taml.setAutoFormat(false);
|
||||||
|
|
||||||
|
// Read object.
|
||||||
|
bool success = taml.write(mTerrainAsset, AssetDatabase.getAssetFilePath(mTerrainAsset.getAssetId()));
|
||||||
|
|
||||||
|
if (!success)
|
||||||
|
return false;*/
|
||||||
|
|
||||||
|
return mFile->save(mTerrainAsset->getTerrainFilePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool TerrainBlock::_setTerrainFile( void *obj, const char *index, const char *data )
|
bool TerrainBlock::_setTerrainFile( void *obj, const char *index, const char *data )
|
||||||
{
|
{
|
||||||
static_cast<TerrainBlock*>( obj )->setFile( FileName( data ) );
|
static_cast<TerrainBlock*>( obj )->setFile( FileName( data ) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TerrainBlock::_setTerrainAsset(void* obj, const char* index, const char* data)
|
||||||
|
{
|
||||||
|
TerrainBlock* terr = static_cast<TerrainBlock*>(obj);// ->setFile(FileName(data));
|
||||||
|
|
||||||
|
terr->setTerrainAsset(StringTable->insert(data));
|
||||||
|
|
||||||
|
terr->setMaskBits(FileMask | HeightMapChangeMask);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void TerrainBlock::_updateBounds()
|
void TerrainBlock::_updateBounds()
|
||||||
{
|
{
|
||||||
if ( !mFile )
|
if ( !mFile )
|
||||||
|
|
@ -901,31 +1008,50 @@ bool TerrainBlock::onAdd()
|
||||||
if(!Parent::onAdd())
|
if(!Parent::onAdd())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ( mTerrFileName.isEmpty() )
|
Resource<TerrainFile> terr;
|
||||||
|
|
||||||
|
if (!mTerrainAsset.isNull())
|
||||||
{
|
{
|
||||||
mTerrFileName = Con::getVariable( "$Client::MissionFile" );
|
terr = mTerrainAsset->getTerrainResource();
|
||||||
String terrainDirectory( Con::getVariable( "$pref::Directories::Terrain" ) );
|
|
||||||
if ( terrainDirectory.isEmpty() )
|
if (terr == NULL)
|
||||||
{
|
{
|
||||||
terrainDirectory = "art/terrains/";
|
if (isClientObject())
|
||||||
|
NetConnection::setLastError("Unable to load terrain asset: %s", mTerrainAsset.getAssetId());
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
mTerrFileName.replace("tools/levels/", terrainDirectory);
|
|
||||||
mTerrFileName.replace("levels/", terrainDirectory);
|
|
||||||
|
|
||||||
Vector<String> materials;
|
mFile = terr;
|
||||||
materials.push_back( "warning_material" );
|
|
||||||
TerrainFile::create( &mTerrFileName, 256, materials );
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
Resource<TerrainFile> terr = ResourceManager::get().load( mTerrFileName );
|
|
||||||
if(terr == NULL)
|
|
||||||
{
|
{
|
||||||
if(isClientObject())
|
if (mTerrFileName.isEmpty())
|
||||||
NetConnection::setLastError("You are missing a file needed to play this mission: %s", mTerrFileName.c_str());
|
{
|
||||||
return false;
|
mTerrFileName = Con::getVariable("$Client::MissionFile");
|
||||||
}
|
String terrainDirectory(Con::getVariable("$pref::Directories::Terrain"));
|
||||||
|
if (terrainDirectory.isEmpty())
|
||||||
|
{
|
||||||
|
terrainDirectory = "art/terrains/";
|
||||||
|
}
|
||||||
|
mTerrFileName.replace("tools/levels/", terrainDirectory);
|
||||||
|
mTerrFileName.replace("levels/", terrainDirectory);
|
||||||
|
|
||||||
setFile( terr );
|
Vector<String> materials;
|
||||||
|
materials.push_back("warning_material");
|
||||||
|
TerrainFile::create(&mTerrFileName, 256, materials);
|
||||||
|
}
|
||||||
|
|
||||||
|
terr = ResourceManager::get().load(mTerrFileName);
|
||||||
|
|
||||||
|
if (terr == NULL)
|
||||||
|
{
|
||||||
|
if (isClientObject())
|
||||||
|
NetConnection::setLastError("You are missing a file needed to play this mission: %s", mTerrFileName.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
setFile(terr);
|
||||||
|
}
|
||||||
|
|
||||||
if ( terr->mNeedsResaving )
|
if ( terr->mNeedsResaving )
|
||||||
{
|
{
|
||||||
|
|
@ -1130,6 +1256,10 @@ void TerrainBlock::initPersistFields()
|
||||||
&TerrainBlock::_setTerrainFile, &defaultProtectedGetFn,
|
&TerrainBlock::_setTerrainFile, &defaultProtectedGetFn,
|
||||||
"The source terrain data file." );
|
"The source terrain data file." );
|
||||||
|
|
||||||
|
addProtectedField("terrainAsset", TypeTerrainAssetPtr, Offset(mTerrainAsset, TerrainBlock),
|
||||||
|
&TerrainBlock::_setTerrainAsset, &defaultProtectedGetFn,
|
||||||
|
"The source terrain data asset.");
|
||||||
|
|
||||||
endGroup( "Media" );
|
endGroup( "Media" );
|
||||||
|
|
||||||
addGroup( "Misc" );
|
addGroup( "Misc" );
|
||||||
|
|
@ -1190,6 +1320,7 @@ U32 TerrainBlock::packUpdate(NetConnection* con, U32 mask, BitStream *stream)
|
||||||
if ( stream->writeFlag( mask & FileMask ) )
|
if ( stream->writeFlag( mask & FileMask ) )
|
||||||
{
|
{
|
||||||
stream->write( mTerrFileName );
|
stream->write( mTerrFileName );
|
||||||
|
stream->writeString( mTerrainAssetId );
|
||||||
stream->write( mCRC );
|
stream->write( mCRC );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1230,12 +1361,25 @@ void TerrainBlock::unpackUpdate(NetConnection* con, BitStream *stream)
|
||||||
{
|
{
|
||||||
FileName terrFile;
|
FileName terrFile;
|
||||||
stream->read( &terrFile );
|
stream->read( &terrFile );
|
||||||
|
char buffer[256];
|
||||||
|
stream->readString(buffer);
|
||||||
|
StringTableEntry terrainAsset = StringTable->insert(buffer);
|
||||||
stream->read( &mCRC );
|
stream->read( &mCRC );
|
||||||
|
|
||||||
if ( isProperlyAdded() )
|
if (terrainAsset != StringTable->EmptyString())
|
||||||
setFile( terrFile );
|
{
|
||||||
|
if (isProperlyAdded())
|
||||||
|
setTerrainAsset(StringTable->insert(terrFile.c_str()));
|
||||||
|
else
|
||||||
|
mTerrainAssetId = StringTable->insert(terrFile.c_str());
|
||||||
|
}
|
||||||
else
|
else
|
||||||
mTerrFileName = terrFile;
|
{
|
||||||
|
if (isProperlyAdded())
|
||||||
|
setFile(terrFile);
|
||||||
|
else
|
||||||
|
mTerrFileName = terrFile;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( stream->readFlag() ) // SizeMask
|
if ( stream->readFlag() ) // SizeMask
|
||||||
|
|
@ -1310,6 +1454,16 @@ DefineEngineMethod( TerrainBlock, save, bool, ( const char* fileName),,
|
||||||
return static_cast<TerrainBlock*>(object)->save(filename);
|
return static_cast<TerrainBlock*>(object)->save(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DefineEngineMethod(TerrainBlock, saveAsset, bool, (), ,
|
||||||
|
"@brief Saves the terrain block's terrain file to the specified file name.\n\n"
|
||||||
|
|
||||||
|
"@param fileName Name and path of file to save terrain data to.\n\n"
|
||||||
|
|
||||||
|
"@return True if file save was successful, false otherwise")
|
||||||
|
{
|
||||||
|
return static_cast<TerrainBlock*>(object)->saveAsset();
|
||||||
|
}
|
||||||
|
|
||||||
//ConsoleMethod(TerrainBlock, save, bool, 3, 3, "(string fileName) - saves the terrain block's terrain file to the specified file name.")
|
//ConsoleMethod(TerrainBlock, save, bool, 3, 3, "(string fileName) - saves the terrain block's terrain file to the specified file name.")
|
||||||
//{
|
//{
|
||||||
// char filename[256];
|
// char filename[256];
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,12 @@
|
||||||
#include "gfx/gfxPrimitiveBuffer.h"
|
#include "gfx/gfxPrimitiveBuffer.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef _ASSET_PTR_H_
|
||||||
|
#include "assets/assetPtr.h"
|
||||||
|
#endif
|
||||||
|
#ifndef TERRAINASSET_H
|
||||||
|
#include "T3D/assets/TerrainAsset.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
class GBitmap;
|
class GBitmap;
|
||||||
class TerrainBlock;
|
class TerrainBlock;
|
||||||
|
|
@ -121,6 +126,9 @@ protected:
|
||||||
///
|
///
|
||||||
FileName mTerrFileName;
|
FileName mTerrFileName;
|
||||||
|
|
||||||
|
AssetPtr<TerrainAsset> mTerrainAsset;
|
||||||
|
StringTableEntry mTerrainAssetId;
|
||||||
|
|
||||||
/// The maximum detail distance found in the material list.
|
/// The maximum detail distance found in the material list.
|
||||||
F32 mMaxDetailDistance;
|
F32 mMaxDetailDistance;
|
||||||
|
|
||||||
|
|
@ -241,6 +249,7 @@ protected:
|
||||||
|
|
||||||
// Protected fields
|
// Protected fields
|
||||||
static bool _setTerrainFile( void *obj, const char *index, const char *data );
|
static bool _setTerrainFile( void *obj, const char *index, const char *data );
|
||||||
|
static bool _setTerrainAsset(void* obj, const char* index, const char* data);
|
||||||
static bool _setSquareSize( void *obj, const char *index, const char *data );
|
static bool _setSquareSize( void *obj, const char *index, const char *data );
|
||||||
static bool _setBaseTexSize(void *obj, const char *index, const char *data);
|
static bool _setBaseTexSize(void *obj, const char *index, const char *data);
|
||||||
static bool _setBaseTexFormat(void *obj, const char *index, const char *data);
|
static bool _setBaseTexFormat(void *obj, const char *index, const char *data);
|
||||||
|
|
@ -418,7 +427,10 @@ public:
|
||||||
|
|
||||||
void setFile(const Resource<TerrainFile>& file);
|
void setFile(const Resource<TerrainFile>& file);
|
||||||
|
|
||||||
|
bool setTerrainAsset(const StringTableEntry terrainAssetId);
|
||||||
|
|
||||||
bool save(const char* filename);
|
bool save(const char* filename);
|
||||||
|
bool saveAsset();
|
||||||
|
|
||||||
F32 getSquareSize() const { return mSquareSize; }
|
F32 getSquareSize() const { return mSquareSize; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ void TerrainMaterial::initPersistFields()
|
||||||
addField( "parallaxScale", TypeF32, Offset( mParallaxScale, TerrainMaterial ), "Used to scale the height from the normal map to give some self "
|
addField( "parallaxScale", TypeF32, Offset( mParallaxScale, TerrainMaterial ), "Used to scale the height from the normal map to give some self "
|
||||||
"occlusion effect (aka parallax) to the terrain material" );
|
"occlusion effect (aka parallax) to the terrain material" );
|
||||||
|
|
||||||
addField("compositeMap", TypeStringFilename, Offset(mCompositeMap, TerrainMaterial), "Composite map for the material");
|
addField("pbrConfigMap", TypeStringFilename, Offset(mCompositeMap, TerrainMaterial), "Composite map for the material");
|
||||||
Parent::initPersistFields();
|
Parent::initPersistFields();
|
||||||
|
|
||||||
// Gotta call this at least once or it won't get created!
|
// Gotta call this at least once or it won't get created!
|
||||||
|
|
|
||||||
|
|
@ -314,7 +314,7 @@
|
||||||
minExtent = "8 2";
|
minExtent = "8 2";
|
||||||
horizSizing = "left";
|
horizSizing = "left";
|
||||||
vertSizing = "bottom";
|
vertSizing = "bottom";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
command = "AssetBrowser.showVisibiltyOptions();";
|
command = "AssetBrowser.showVisibiltyOptions();";
|
||||||
|
|
@ -343,7 +343,7 @@
|
||||||
minExtent = "64 64";
|
minExtent = "64 64";
|
||||||
horizSizing = "relative";
|
horizSizing = "relative";
|
||||||
vertSizing = "height";
|
vertSizing = "height";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
tooltipProfile = "GuiToolTipProfile";
|
tooltipProfile = "GuiToolTipProfile";
|
||||||
|
|
@ -365,7 +365,7 @@
|
||||||
minExtent = "0 0";
|
minExtent = "0 0";
|
||||||
horizSizing = "right";
|
horizSizing = "right";
|
||||||
vertSizing = "bottom";
|
vertSizing = "bottom";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
tooltipProfile = "GuiToolTipProfile";
|
tooltipProfile = "GuiToolTipProfile";
|
||||||
|
|
@ -462,7 +462,7 @@
|
||||||
minExtent = "8 2";
|
minExtent = "8 2";
|
||||||
horizSizing = "width";
|
horizSizing = "width";
|
||||||
vertSizing = "height";
|
vertSizing = "height";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
tooltipProfile = "GuiToolTipProfile";
|
tooltipProfile = "GuiToolTipProfile";
|
||||||
|
|
@ -495,7 +495,7 @@
|
||||||
profile = "GuiEditorScrollProfile";
|
profile = "GuiEditorScrollProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
tooltipProfile = "ToolsGuiDefaultProfile";
|
tooltipProfile = "ToolsGuiSolidDefaultProfile";
|
||||||
hovertime = "1000";
|
hovertime = "1000";
|
||||||
isContainer = "1";
|
isContainer = "1";
|
||||||
canSave = "1";
|
canSave = "1";
|
||||||
|
|
@ -554,7 +554,7 @@
|
||||||
minExtent = "16 16";
|
minExtent = "16 16";
|
||||||
horizSizing = "right";
|
horizSizing = "right";
|
||||||
vertSizing = "bottom";
|
vertSizing = "bottom";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
tooltipProfile = "GuiToolTipProfile";
|
tooltipProfile = "GuiToolTipProfile";
|
||||||
|
|
@ -629,7 +629,7 @@
|
||||||
minExtent = "8 2";
|
minExtent = "8 2";
|
||||||
horizSizing = "left";
|
horizSizing = "left";
|
||||||
vertSizing = "bottom";
|
vertSizing = "bottom";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
tooltipProfile = "GuiToolTipProfile";
|
tooltipProfile = "GuiToolTipProfile";
|
||||||
|
|
@ -654,7 +654,7 @@
|
||||||
minExtent = "8 2";
|
minExtent = "8 2";
|
||||||
horizSizing = "right";
|
horizSizing = "right";
|
||||||
vertSizing = "bottom";
|
vertSizing = "bottom";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
command = "AssetBrowser.toggleFolderCollapseButton();";
|
command = "AssetBrowser.toggleFolderCollapseButton();";
|
||||||
|
|
@ -680,7 +680,7 @@
|
||||||
minExtent = "8 2";
|
minExtent = "8 2";
|
||||||
horizSizing = "left";
|
horizSizing = "left";
|
||||||
vertSizing = "bottom";
|
vertSizing = "bottom";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
command = "AssetBrowser.showFilterOptions();";
|
command = "AssetBrowser.showFilterOptions();";
|
||||||
|
|
@ -704,7 +704,7 @@
|
||||||
minExtent = "8 2";
|
minExtent = "8 2";
|
||||||
horizSizing = "width";
|
horizSizing = "width";
|
||||||
vertSizing = "height";
|
vertSizing = "height";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
tooltipProfile = "GuiToolTipProfile";
|
tooltipProfile = "GuiToolTipProfile";
|
||||||
|
|
@ -737,7 +737,7 @@
|
||||||
profile = "GuiEditorScrollProfile";
|
profile = "GuiEditorScrollProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
tooltipProfile = "ToolsGuiDefaultProfile";
|
tooltipProfile = "ToolsGuiSolidDefaultProfile";
|
||||||
hovertime = "1000";
|
hovertime = "1000";
|
||||||
isContainer = "1";
|
isContainer = "1";
|
||||||
canSave = "1";
|
canSave = "1";
|
||||||
|
|
@ -825,7 +825,7 @@
|
||||||
minExtent = "8 2";
|
minExtent = "8 2";
|
||||||
horizSizing = "width";
|
horizSizing = "width";
|
||||||
vertSizing = "height";
|
vertSizing = "height";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
tooltipProfile = "GuiToolTipProfile";
|
tooltipProfile = "GuiToolTipProfile";
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ function initializeAssetBrowser()
|
||||||
AssetFilterTypeList.add("ShapeAnimations");
|
AssetFilterTypeList.add("ShapeAnimations");
|
||||||
AssetFilterTypeList.add("Sounds");
|
AssetFilterTypeList.add("Sounds");
|
||||||
AssetFilterTypeList.add("StateMachines");
|
AssetFilterTypeList.add("StateMachines");
|
||||||
AssetFilterTypeList.add("Terrains");
|
AssetFilterTypeList.add("Terrain");
|
||||||
AssetFilterTypeList.add("TerrainMaterials");
|
AssetFilterTypeList.add("TerrainMaterials");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -94,6 +94,8 @@ function initializeAssetBrowser()
|
||||||
exec("./scripts/assetTypes/stateMachine.cs");
|
exec("./scripts/assetTypes/stateMachine.cs");
|
||||||
exec("./scripts/assetTypes/cubemap.cs");
|
exec("./scripts/assetTypes/cubemap.cs");
|
||||||
exec("./scripts/assetTypes/folder.cs");
|
exec("./scripts/assetTypes/folder.cs");
|
||||||
|
exec("./scripts/assetTypes/terrain.cs");
|
||||||
|
exec("./scripts/assetTypes/terrainMaterial.cs");
|
||||||
|
|
||||||
exec("./scripts/fieldTypes/fieldTypes.cs");
|
exec("./scripts/fieldTypes/fieldTypes.cs");
|
||||||
exec("./scripts/fieldTypes/listField.cs");
|
exec("./scripts/fieldTypes/listField.cs");
|
||||||
|
|
|
||||||
|
|
@ -1124,28 +1124,9 @@ function AssetBrowserFilterTree::onRightMouseDown(%this, %itemId)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//get the parent, and thus our module
|
EditFolderPopup.showPopup(Canvas);
|
||||||
%moduleId = %this.getParentItem(%itemId);
|
|
||||||
|
|
||||||
//set the module value for creation info
|
|
||||||
AssetBrowser.selectedModule = %this.getItemText(%moduleId);
|
|
||||||
|
|
||||||
if(%this.getItemText(%itemId) $= "ComponentAsset")
|
|
||||||
{
|
|
||||||
AddNewComponentAssetPopup.showPopup(Canvas);
|
|
||||||
//Canvas.popDialog(AssetBrowser_newComponentAsset);
|
|
||||||
//AssetBrowser_newComponentAsset-->AssetBrowserModuleList.setText(AssetBrowser.selectedModule);
|
|
||||||
}
|
|
||||||
else if(%this.getItemText(%itemId) $= "ScriptAsset")
|
|
||||||
{
|
|
||||||
EditAssetCategoryPopup.showPopup(Canvas);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( %this.getSelectedItemsCount() > 0 && %itemId == 1)
|
|
||||||
{
|
|
||||||
AddNewModulePopup.showPopup(Canvas);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -1254,6 +1235,9 @@ function AssetBrowser::rebuildAssetArray(%this)
|
||||||
%assetType = AssetDatabase.getAssetType(%assetId);
|
%assetType = AssetDatabase.getAssetType(%assetId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(AssetBrowser.assetTypeFilter !$= "" && AssetBrowser.assetTypeFilter !$= %assetType)
|
||||||
|
continue;
|
||||||
|
|
||||||
/*if(%this.getItemText(%itemId) $= %assetType || (%assetType $= "" && %this.getItemText(%itemId) $= "Misc")
|
/*if(%this.getItemText(%itemId) $= %assetType || (%assetType $= "" && %this.getItemText(%itemId) $= "Misc")
|
||||||
|| %moduleItemId == 1)
|
|| %moduleItemId == 1)
|
||||||
{*/
|
{*/
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,95 @@
|
||||||
|
function AssetBrowser::buildFolderPreview(%this, %assetDef, %previewData)
|
||||||
|
{
|
||||||
|
%previewData.assetName = %assetDef.assetName;
|
||||||
|
%previewData.assetPath = %assetDef.dirPath;
|
||||||
|
|
||||||
|
//%previewData.previewImage = "tools/assetBrowser/art/folderIcon";
|
||||||
|
%previewData.previewImage = "tools/gui/images/folder";
|
||||||
|
|
||||||
|
//%previewData.assetFriendlyName = %assetDef.assetName;
|
||||||
|
%previewData.assetDesc = %assetDef.description;
|
||||||
|
%previewData.tooltip = %assetDef.dirPath;
|
||||||
|
%previewData.doubleClickCommand = "AssetBrowser.navigateTo(\""@ %assetDef.dirPath @ "/" @ %assetDef.assetName @"\")";//browseTo %assetDef.dirPath / %assetDef.assetName
|
||||||
|
}
|
||||||
|
|
||||||
|
function AssetBrowser::renameFolder(%this, %folderPath, %newFolderName)
|
||||||
|
{
|
||||||
|
%fullPath = makeFullPath(%folderPath);
|
||||||
|
%newFullPath = makeFullPath(%folderPath);
|
||||||
|
|
||||||
|
%fullPath = strreplace(%fullPath, "//", "/");
|
||||||
|
|
||||||
|
%count = getTokenCount(%fullPath, "/");
|
||||||
|
%basePath = getTokens(%fullPath, "/", 0, %count-2);
|
||||||
|
%oldName = getToken(%fullPath, "/", %count-1);
|
||||||
|
|
||||||
|
//We need to ensure that no files are 'active' while we try and clean up behind ourselves with the delete action
|
||||||
|
//so, we nix any assets active for the module, do the delete action on the old folder, and then re-acquire our assets.
|
||||||
|
//This will have the added benefit of updating paths for asset items
|
||||||
|
|
||||||
|
%module = AssetBrowser.getModuleFromAddress(AssetBrowser.currentAddress);
|
||||||
|
%moduleId = %module.ModuleId;
|
||||||
|
|
||||||
|
AssetDatabase.removeDeclaredAssets(%moduleId);
|
||||||
|
|
||||||
|
%copiedSuccess = pathCopy(%fullPath, %basePath @ "/" @ %newFolderName);
|
||||||
|
%this.deleteFolder(%fullPath);
|
||||||
|
|
||||||
|
AssetDatabase.addModuleDeclaredAssets(%moduleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
function AssetBrowser::deleteFolder(%this, %folderPath)
|
||||||
|
{
|
||||||
|
doDeleteFolder(%folderPath);
|
||||||
|
|
||||||
|
%this.loadFilters();
|
||||||
|
}
|
||||||
|
|
||||||
|
function doDeleteFolder(%folderPath)
|
||||||
|
{
|
||||||
|
%fullPath = makeFullPath(%folderPath);
|
||||||
|
|
||||||
|
//First, wipe out any files inside the folder first
|
||||||
|
%file = findFirstFileMultiExpr( %fullPath @ "/*.*", true);
|
||||||
|
|
||||||
|
while( %file !$= "" )
|
||||||
|
{
|
||||||
|
%success = fileDelete( %file );
|
||||||
|
|
||||||
|
if(!%success)
|
||||||
|
{
|
||||||
|
error("doDeleteFolder - unable to delete file " @ %file);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
%file = findNextFileMultiExpr( %fullPath @ "/*.*" );
|
||||||
|
}
|
||||||
|
|
||||||
|
//next, walk through and delete any subfolders that may be remaining
|
||||||
|
while(fileDelete(%fullPath) == 0)
|
||||||
|
{
|
||||||
|
//We couldn't delete the folder, so get a directory list and recurse through it, deleteing them as we go
|
||||||
|
%paths = getDirectoryList(%fullPath);
|
||||||
|
for(%i=0; %i < getFieldCount(%paths); %i++)
|
||||||
|
{
|
||||||
|
%childPath = getField(%paths, %i);
|
||||||
|
doDeleteFolder(%fullPath @ "/" @ %childPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function AssetBrowser::moveFolder(%this, %folderPath, %newFolderPath)
|
||||||
|
{
|
||||||
|
%fullPath = makeFullPath(%folderPath);
|
||||||
|
%newFullPath = makeFullPath(%newFolderPath);
|
||||||
|
|
||||||
|
%fullPath = strreplace(%fullPath, "//", "/");
|
||||||
|
%newFullPath = strreplace(%newFullPath, "//", "/");
|
||||||
|
|
||||||
|
%count = getTokenCount(%fullPath, "/");
|
||||||
|
%basePath = getTokens(%fullPath, "/", 0, %count-2);
|
||||||
|
%oldName = getToken(%fullPath, "/", %count-1);
|
||||||
|
|
||||||
|
%copiedSuccess = pathCopy(%fullPath, %newFullPath @ "/" @ %newFolderName);
|
||||||
|
%this.deleteFolder(%fullPath);
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,38 @@
|
||||||
function AssetBrowser::createTerrainAsset(%this)
|
function AssetBrowser::createTerrainAsset(%this)
|
||||||
{
|
{
|
||||||
|
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||||
|
%modulePath = "data/" @ %moduleName;
|
||||||
|
|
||||||
|
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||||
|
|
||||||
|
%assetType = AssetBrowser.newAssetSettings.assetType;
|
||||||
|
%assetPath = AssetBrowser.currentAddress @ "/";
|
||||||
|
|
||||||
|
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
|
||||||
|
%terPath = %assetPath @ %assetName @ ".ter";
|
||||||
|
|
||||||
|
%asset = new TerrainAsset()
|
||||||
|
{
|
||||||
|
AssetName = %assetName;
|
||||||
|
versionId = 1;
|
||||||
|
terrainFile = %assetName @ ".ter";
|
||||||
|
};
|
||||||
|
|
||||||
|
TamlWrite(%asset, %tamlpath);
|
||||||
|
|
||||||
|
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||||
|
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||||
|
|
||||||
|
AssetBrowser.loadFilters();
|
||||||
|
|
||||||
|
AssetBrowserFilterTree.onSelect(%smItem);
|
||||||
|
|
||||||
|
//Save out a basic terrain block here
|
||||||
|
%terrBlock = new TerrainBlock() { terrainFile = %terPath; };
|
||||||
|
%terrBlock.save(%terPath);
|
||||||
|
%terrBlock.delete();
|
||||||
|
|
||||||
|
return %tamlpath;
|
||||||
}
|
}
|
||||||
|
|
||||||
function AssetBrowser::editTerrainAsset(%this, %assetDef)
|
function AssetBrowser::editTerrainAsset(%this, %assetDef)
|
||||||
|
|
@ -51,3 +84,44 @@ function GuiInspectorTypeTerrainAssetPtr::onControlDropped( %this, %payload, %po
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//AssetDatabase.acquireAsset("pbr:NewTerrain");
|
||||||
|
function TerrainAsset::saveAsset(%this)
|
||||||
|
{
|
||||||
|
%matDepIdx = 0;
|
||||||
|
while(%this.getFieldValue("terrainMaterialAsset", %matDepIdx) !$= "")
|
||||||
|
{
|
||||||
|
%this.setFieldValue("terrainMaterialAsset", "", %matDepIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
%filePath = AssetDatabase.getAssetFilePath(%this.getAssetId());
|
||||||
|
|
||||||
|
%mats = ETerrainEditor.getMaterials();
|
||||||
|
|
||||||
|
%assetQuery = new AssetQuery();
|
||||||
|
AssetDatabase.findAssetType(%assetQuery, "TerrainMaterialAsset");
|
||||||
|
|
||||||
|
%count = %assetQuery.getCount();
|
||||||
|
|
||||||
|
%matDepIdx = 0;
|
||||||
|
for( %i = 0; %i < getRecordCount( %mats ); %i++ )
|
||||||
|
{
|
||||||
|
%matInternalName = getRecord( %mats, %i );
|
||||||
|
|
||||||
|
for(%m=0; %m < %count; %m++)
|
||||||
|
{
|
||||||
|
%assetId = %assetQuery.getAsset(%m);
|
||||||
|
|
||||||
|
%terrMatAssetDef = AssetDatabase.acquireAsset(%assetId);
|
||||||
|
|
||||||
|
if(%terrMatAssetDef.materialDefinitionName $= %matInternalName)
|
||||||
|
{
|
||||||
|
%this.setFieldValue("terrainMaterialAsset", "@Asset=" @ %assetId, %matDepIdx);
|
||||||
|
%matDepIdx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
%assetQuery.delete();
|
||||||
|
|
||||||
|
TAMLWrite(%this, %filePath);
|
||||||
|
}
|
||||||
|
|
@ -1,9 +1,70 @@
|
||||||
function AssetBrowser::createTerrainMaterialAsset(%this)
|
function AssetBrowser::createTerrainMaterialAsset(%this)
|
||||||
{
|
{
|
||||||
|
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||||
|
%modulePath = "data/" @ %moduleName;
|
||||||
|
|
||||||
|
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||||
|
|
||||||
|
%assetType = AssetBrowser.newAssetSettings.assetType;
|
||||||
|
%assetPath = AssetBrowser.currentAddress @ "/";
|
||||||
|
|
||||||
|
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
|
||||||
|
%scriptPath = %assetPath @ %assetName @ ".cs";
|
||||||
|
|
||||||
|
%asset = new TerrainMaterialAsset()
|
||||||
|
{
|
||||||
|
AssetName = %assetName;
|
||||||
|
versionId = 1;
|
||||||
|
scriptFile = %assetName @ ".cs";
|
||||||
|
materialDefinitionName = %assetName;
|
||||||
|
};
|
||||||
|
|
||||||
|
TamlWrite(%asset, %tamlpath);
|
||||||
|
|
||||||
|
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||||
|
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||||
|
|
||||||
|
AssetBrowser.loadFilters();
|
||||||
|
|
||||||
|
AssetBrowserFilterTree.onSelect(%smItem);
|
||||||
|
|
||||||
|
%file = new FileObject();
|
||||||
|
%templateFile = new FileObject();
|
||||||
|
|
||||||
|
%templateFilePath = %this.templateFilesPath @ "terrainMaterial.cs.template";
|
||||||
|
|
||||||
|
if(%file.openForWrite(%scriptPath) && %templateFile.openForRead(%templateFilePath))
|
||||||
|
{
|
||||||
|
while( !%templateFile.isEOF() )
|
||||||
|
{
|
||||||
|
%line = %templateFile.readline();
|
||||||
|
%line = strreplace( %line, "@", %assetName );
|
||||||
|
|
||||||
|
%file.writeline(%line);
|
||||||
|
//echo(%line);
|
||||||
|
}
|
||||||
|
|
||||||
|
%file.close();
|
||||||
|
%templateFile.close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
%file.close();
|
||||||
|
%templateFile.close();
|
||||||
|
|
||||||
|
warnf("CreateNewTerrainMaterialAsset - Something went wrong and we couldn't write thescript file!");
|
||||||
|
}
|
||||||
|
|
||||||
|
//If we've got the terrain mat editor open, go ahead and update it all
|
||||||
|
TerrainMaterialDlg.onWake();
|
||||||
|
|
||||||
|
return %tamlpath;
|
||||||
}
|
}
|
||||||
|
|
||||||
function AssetBrowser::editTerrainMaterialAsset(%this, %assetDef)
|
function AssetBrowser::editTerrainMaterialAsset(%this, %assetDef)
|
||||||
{
|
{
|
||||||
|
TerrainMaterialDlg.show(0, 0, 0);
|
||||||
|
TerrainMaterialDlg.setActiveMaterial(%assetDef.assetName);
|
||||||
}
|
}
|
||||||
|
|
||||||
function AssetBrowser::duplicateTerrainMaterialAsset(%this, %assetDef, %targetModule)
|
function AssetBrowser::duplicateTerrainMaterialAsset(%this, %assetDef, %targetModule)
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ function AssetBrowser::buildPopupMenus(%this)
|
||||||
AddNewModulePopup.enableItem(1, false);
|
AddNewModulePopup.enableItem(1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if( !isObject( EditAssetPopup ) )
|
if( !isObject( EditAssetPopup ) )
|
||||||
{
|
{
|
||||||
new PopupMenu( EditAssetPopup )
|
new PopupMenu( EditAssetPopup )
|
||||||
|
|
@ -64,22 +65,6 @@ function AssetBrowser::buildPopupMenus(%this)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !isObject( EditFolderPopup ) )
|
|
||||||
{
|
|
||||||
new PopupMenu( EditFolderPopup )
|
|
||||||
{
|
|
||||||
superClass = "MenuBuilder";
|
|
||||||
class = "EditorWorldMenu";
|
|
||||||
//isPopup = true;
|
|
||||||
|
|
||||||
item[ 0 ] = "Rename Folder" TAB "" TAB "AssetBrowser.renameAsset();";
|
|
||||||
item[ 1 ] = "-";
|
|
||||||
Item[ 2 ] = "Duplicate Folder" TAB "" TAB "AssetBrowser.duplicateAsset();";
|
|
||||||
item[ 3 ] = "-";
|
|
||||||
item[ 4 ] = "Delete Folder" TAB "" TAB "AssetBrowser.deleteAsset();";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !isObject( AddNewComponentAssetPopup ) )
|
if( !isObject( AddNewComponentAssetPopup ) )
|
||||||
{
|
{
|
||||||
new PopupMenu( AddNewComponentAssetPopup )
|
new PopupMenu( AddNewComponentAssetPopup )
|
||||||
|
|
@ -121,20 +106,23 @@ function AssetBrowser::buildPopupMenus(%this)
|
||||||
//isPopup = true;
|
//isPopup = true;
|
||||||
|
|
||||||
item[ 0 ] = "Create Material" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"MaterialAsset\", AssetBrowser.selectedModule);";//"createNewMaterialAsset(\"NewMaterial\", AssetBrowser.selectedModule);";
|
item[ 0 ] = "Create Material" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"MaterialAsset\", AssetBrowser.selectedModule);";//"createNewMaterialAsset(\"NewMaterial\", AssetBrowser.selectedModule);";
|
||||||
item[ 1 ] = "Create Image" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ImageAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewImageAsset(\"NewImage\", AssetBrowser.selectedModule);";
|
item[ 1 ] = "Create Terrain Material" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainMaterialAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewImageAsset(\"NewImage\", AssetBrowser.selectedModule);";
|
||||||
item[ 2 ] = "-";
|
item[ 2 ] = "Create Image" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ImageAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewImageAsset(\"NewImage\", AssetBrowser.selectedModule);";
|
||||||
item[ 3 ] = "Create Shape" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"Shape\", AssetBrowser.selectedModule);";
|
item[ 3 ] = "-";
|
||||||
item[ 4 ] = "Create Shape Animation" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ShapeAnimationAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewShapeAnimationAsset(\"NewShapeAnimation\", AssetBrowser.selectedModule);";
|
item[ 4 ] = "Create Terrain Data" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule);";
|
||||||
item[ 5 ] = "-";
|
item[ 5 ] = "-";
|
||||||
item[ 6 ] = "Create GUI" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"GUIAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewGUIAsset(\"NewGUI\", AssetBrowser.selectedModule);";
|
item[ 6 ] = "Create Shape" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"Shape\", AssetBrowser.selectedModule);";
|
||||||
item[ 7 ] = "-";
|
item[ 7 ] = "Create Shape Animation" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ShapeAnimationAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewShapeAnimationAsset(\"NewShapeAnimation\", AssetBrowser.selectedModule);";
|
||||||
item[ 8 ] = "Create Post Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"PostEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewPostEffectAsset(\"NewPostEffect\", AssetBrowser.selectedModule);";
|
item[ 8 ] = "-";
|
||||||
item[ 9 ] = "-";
|
item[ 9 ] = "Create GUI" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"GUIAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewGUIAsset(\"NewGUI\", AssetBrowser.selectedModule);";
|
||||||
item[ 10 ] = "Create Sound" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"SoundAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewSoundAsset(\"NewSound\", AssetBrowser.selectedModule);";
|
item[ 10 ] = "-";
|
||||||
item[ 11 ] = "-";
|
item[ 11 ] = "Create Post Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"PostEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewPostEffectAsset(\"NewPostEffect\", AssetBrowser.selectedModule);";
|
||||||
item[ 12 ] = "Create Particle Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ParticleEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewParticleEffectAsset(\"NewParticleEffect\", AssetBrowser.selectedModule);";
|
item[ 12 ] = "-";
|
||||||
item[ 13 ] = "-";
|
item[ 13 ] = "Create Sound" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"SoundAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewSoundAsset(\"NewSound\", AssetBrowser.selectedModule);";
|
||||||
item[ 14 ] = "Create Cubemap" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CubemapAsset\", AssetBrowser.selectedModule);";
|
item[ 14 ] = "-";
|
||||||
|
item[ 15 ] = "Create Particle Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ParticleEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewParticleEffectAsset(\"NewParticleEffect\", AssetBrowser.selectedModule);";
|
||||||
|
item[ 16 ] = "-";
|
||||||
|
item[ 17 ] = "Create Cubemap" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CubemapAsset\", AssetBrowser.selectedModule);";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -199,10 +187,27 @@ function AssetBrowser::buildPopupMenus(%this)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Some assets are not yet ready/implemented, so disable their creation here
|
//Some assets are not yet ready/implemented, so disable their creation here
|
||||||
AddNewArtAssetPopup.enableItem(3, false); //shape
|
AddNewArtAssetPopup.enableItem(6, false); //shape
|
||||||
AddNewArtAssetPopup.enableItem(4, false); //shape animation
|
AddNewArtAssetPopup.enableItem(7, false); //shape animation
|
||||||
AddNewArtAssetPopup.enableItem(10, false); //sound asset
|
AddNewArtAssetPopup.enableItem(13, false); //sound asset
|
||||||
AddNewArtAssetPopup.enableItem(12, false); //particle effect
|
AddNewArtAssetPopup.enableItem(15, false); //particle effect
|
||||||
|
|
||||||
|
if( !isObject( EditFolderPopup ) )
|
||||||
|
{
|
||||||
|
new PopupMenu( EditFolderPopup )
|
||||||
|
{
|
||||||
|
superClass = "MenuBuilder";
|
||||||
|
class = "EditorWorldMenu";
|
||||||
|
//isPopup = true;
|
||||||
|
|
||||||
|
Item[ 0 ] = "Create in Folder" TAB AddNewAssetPopup;
|
||||||
|
item[ 1 ] = "-";
|
||||||
|
item[ 2 ] = "Rename Folder" TAB "" TAB "AssetBrowser.renameAsset();";
|
||||||
|
Item[ 3 ] = "Duplicate Folder" TAB "" TAB "AssetBrowser.duplicateAsset();";
|
||||||
|
item[ 4 ] = "-";
|
||||||
|
item[ 5 ] = "Delete Folder" TAB "" TAB "AssetBrowser.deleteAsset();";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
if( !isObject( EditAssetCategoryPopup ) )
|
if( !isObject( EditAssetCategoryPopup ) )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
singleton Material(TerrainFX_@)
|
||||||
|
{
|
||||||
|
mapTo = "@";
|
||||||
|
footstepSoundId = 0;
|
||||||
|
terrainMaterials = "1";
|
||||||
|
ShowDust = "1";
|
||||||
|
showFootprints = "1";
|
||||||
|
materialTag0 = "Terrain";
|
||||||
|
effectColor[0] = "0.42 0.42 0 1";
|
||||||
|
effectColor[1] = "0.42 0.42 0 1";
|
||||||
|
impactSoundId = "0";
|
||||||
|
};
|
||||||
|
|
||||||
|
new TerrainMaterial(@)
|
||||||
|
{
|
||||||
|
internalName = "@";
|
||||||
|
diffuseMap = "";
|
||||||
|
detailMap = "";
|
||||||
|
detailSize = "10";
|
||||||
|
isManaged = "1";
|
||||||
|
detailBrightness = "1";
|
||||||
|
Enabled = "1";
|
||||||
|
diffuseSize = "200";
|
||||||
|
};
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
minExtent = "8 2";
|
minExtent = "8 2";
|
||||||
horizSizing = "center";
|
horizSizing = "center";
|
||||||
vertSizing = "center";
|
vertSizing = "center";
|
||||||
profile = "ToolsGuiDefaultProfile";
|
profile = "ToolsGuiSolidDefaultProfile";
|
||||||
visible = "1";
|
visible = "1";
|
||||||
active = "1";
|
active = "1";
|
||||||
tooltipProfile = "ToolsGuiToolTipProfile";
|
tooltipProfile = "ToolsGuiToolTipProfile";
|
||||||
|
|
|
||||||
BIN
Templates/BaseGame/game/tools/gui/images/folderDown.png
Normal file
BIN
Templates/BaseGame/game/tools/gui/images/folderDown.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.1 KiB |
BIN
Templates/BaseGame/game/tools/gui/images/rightArrowWhite.png
Normal file
BIN
Templates/BaseGame/game/tools/gui/images/rightArrowWhite.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -37,7 +37,7 @@ new GuiControlProfile (ToolsGuiDefaultProfile)
|
||||||
mouseOverSelected = false;
|
mouseOverSelected = false;
|
||||||
|
|
||||||
// fill color
|
// fill color
|
||||||
opaque = true;
|
opaque = false;
|
||||||
fillColor = EditorSettings.value("Theme/tabsColor");
|
fillColor = EditorSettings.value("Theme/tabsColor");
|
||||||
fillColorHL = EditorSettings.value("Theme/tabsGLColor");
|
fillColorHL = EditorSettings.value("Theme/tabsGLColor");
|
||||||
fillColorSEL = EditorSettings.value("Theme/tabsSELColor");
|
fillColorSEL = EditorSettings.value("Theme/tabsSELColor");
|
||||||
|
|
@ -79,7 +79,7 @@ new GuiControlProfile (ToolsGuiDefaultProfile)
|
||||||
};
|
};
|
||||||
|
|
||||||
if( !isObject( ToolsGuiSolidDefaultProfile ) )
|
if( !isObject( ToolsGuiSolidDefaultProfile ) )
|
||||||
new GuiControlProfile (ToolsGuiSolidDefaultProfile)
|
new GuiControlProfile (ToolsGuiSolidDefaultProfile : ToolsGuiDefaultProfile)
|
||||||
{
|
{
|
||||||
opaque = true;
|
opaque = true;
|
||||||
border = true;
|
border = true;
|
||||||
|
|
@ -1123,6 +1123,8 @@ singleton GuiControlProfile( ToolsMenubarProfile : ToolsGuiDefaultProfile )
|
||||||
bitmap = "./menubar";
|
bitmap = "./menubar";
|
||||||
category = "Editor";
|
category = "Editor";
|
||||||
|
|
||||||
|
opaque = true;
|
||||||
|
|
||||||
fillColor = EditorSettings.value("Theme/headerColor");
|
fillColor = EditorSettings.value("Theme/headerColor");
|
||||||
fontColor = EditorSettings.value("Theme/headerTextColor");
|
fontColor = EditorSettings.value("Theme/headerTextColor");
|
||||||
fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
|
fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
|
||||||
|
|
|
||||||
|
|
@ -2,212 +2,202 @@
|
||||||
<EditorSettings>
|
<EditorSettings>
|
||||||
<Group name="MeshRoadEditor">
|
<Group name="MeshRoadEditor">
|
||||||
<Setting name="HoverSplineColor">255 0 0 255</Setting>
|
<Setting name="HoverSplineColor">255 0 0 255</Setting>
|
||||||
|
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
|
||||||
|
<Setting name="sideMaterialName">DefaultRoadMaterialOther</Setting>
|
||||||
<Setting name="DefaultWidth">10</Setting>
|
<Setting name="DefaultWidth">10</Setting>
|
||||||
<Setting name="topMaterialName">DefaultRoadMaterialTop</Setting>
|
<Setting name="topMaterialName">DefaultRoadMaterialTop</Setting>
|
||||||
<Setting name="DefaultNormal">0 0 1</Setting>
|
<Setting name="DefaultNormal">0 0 1</Setting>
|
||||||
<Setting name="sideMaterialName">DefaultRoadMaterialOther</Setting>
|
</Group>
|
||||||
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
|
<Group name="TerrainEditor">
|
||||||
|
<Setting name="currentAction">lowerHeight</Setting>
|
||||||
|
<Group name="ActionValues">
|
||||||
|
<Setting name="softSelectRadius">50</Setting>
|
||||||
|
<Setting name="softSelectDefaultFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
|
||||||
|
<Setting name="setHeightVal">100</Setting>
|
||||||
|
<Setting name="scaleVal">1</Setting>
|
||||||
|
<Setting name="softSelectFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
|
||||||
|
<Setting name="SlopeMaxAngle">90</Setting>
|
||||||
|
<Setting name="SlopeMinAngle">0</Setting>
|
||||||
|
<Setting name="smoothFactor">0.1</Setting>
|
||||||
|
<Setting name="noiseFactor">1</Setting>
|
||||||
|
<Setting name="adjustHeightVal">10</Setting>
|
||||||
|
</Group>
|
||||||
|
<Group name="Brush">
|
||||||
|
<Setting name="brushSize">40 40</Setting>
|
||||||
|
<Setting name="maxBrushSize">40 40</Setting>
|
||||||
|
<Setting name="brushSoftness">1</Setting>
|
||||||
|
<Setting name="brushPressure">1</Setting>
|
||||||
|
<Setting name="brushType">ellipse</Setting>
|
||||||
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="Theme">
|
<Group name="Theme">
|
||||||
<Setting name="tooltipDividerColor">72 70 68 255</Setting>
|
|
||||||
<Setting name="tabsSELColor">59 58 57 255</Setting>
|
|
||||||
<Setting name="fieldTextSELColor">255 255 255 255</Setting>
|
|
||||||
<Setting name="tooltipBGColor">43 43 43 255</Setting>
|
|
||||||
<Setting name="dividerDarkColor">17 16 15 255</Setting>
|
<Setting name="dividerDarkColor">17 16 15 255</Setting>
|
||||||
<Setting name="tabsColor">37 36 35 255</Setting>
|
<Setting name="fieldTextHLColor">234 232 230 255</Setting>
|
||||||
<Setting name="windowBackgroundColor">32 31 30 255</Setting>
|
|
||||||
<Setting name="headerColor">50 49 48 255</Setting>
|
|
||||||
<Setting name="tooltipTextColor">255 255 255 255</Setting>
|
|
||||||
<Setting name="headerTextColor">236 234 232 255</Setting>
|
|
||||||
<Setting name="fieldTextColor">178 175 172 255</Setting>
|
<Setting name="fieldTextColor">178 175 172 255</Setting>
|
||||||
|
<Setting name="fieldTextSELColor">255 255 255 255</Setting>
|
||||||
<Setting name="fieldBGHLColor">72 70 68 255</Setting>
|
<Setting name="fieldBGHLColor">72 70 68 255</Setting>
|
||||||
<Setting name="dividerMidColor">50 49 48 255</Setting>
|
<Setting name="dividerMidColor">50 49 48 255</Setting>
|
||||||
<Setting name="fieldBGSELColor">100 98 96 255</Setting>
|
<Setting name="tooltipBGColor">43 43 43 255</Setting>
|
||||||
|
<Setting name="windowBackgroundColor">32 31 30 255</Setting>
|
||||||
<Setting name="fieldBGColor">59 58 57 255</Setting>
|
<Setting name="fieldBGColor">59 58 57 255</Setting>
|
||||||
<Setting name="dividerLightColor">96 94 92 255</Setting>
|
<Setting name="fieldBGSELColor">100 98 96 255</Setting>
|
||||||
<Setting name="fieldTextHLColor">234 232 230 255</Setting>
|
<Setting name="tabsColor">37 36 35 255</Setting>
|
||||||
<Setting name="fieldTextNAColor">77 77 77 255</Setting>
|
|
||||||
<Setting name="tabsHLColor">50 49 48 255</Setting>
|
<Setting name="tabsHLColor">50 49 48 255</Setting>
|
||||||
</Group>
|
<Setting name="headerColor">50 49 48 255</Setting>
|
||||||
<Group name="ShapeEditor">
|
<Setting name="fieldTextNAColor">77 77 77 255</Setting>
|
||||||
<Setting name="showNodes">1</Setting>
|
<Setting name="tooltipTextColor">255 255 255 255</Setting>
|
||||||
<Setting name="renderMounts">1</Setting>
|
<Setting name="headerTextColor">236 234 232 255</Setting>
|
||||||
<Setting name="backgroundColor">0 0 0 100</Setting>
|
<Setting name="tooltipDividerColor">72 70 68 255</Setting>
|
||||||
<Setting name="highlightMaterial">1</Setting>
|
<Setting name="tabsSELColor">59 58 57 255</Setting>
|
||||||
<Setting name="RenderCollision">0</Setting>
|
<Setting name="dividerLightColor">96 94 92 255</Setting>
|
||||||
<Setting name="SunDiffuseColor">255 255 255 255</Setting>
|
|
||||||
<Setting name="SunAngleZ">135</Setting>
|
|
||||||
<Setting name="SunAmbientColor">180 180 180 255</Setting>
|
|
||||||
<Setting name="AdvancedWndVisible">1</Setting>
|
|
||||||
<Setting name="ShowGrid">1</Setting>
|
|
||||||
<Setting name="showObjBox">1</Setting>
|
|
||||||
<Setting name="gridDimension">40 40</Setting>
|
|
||||||
<Setting name="showBounds">0</Setting>
|
|
||||||
<Setting name="SunAngleX">45</Setting>
|
|
||||||
<Setting name="gridSize">0.1</Setting>
|
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="GuiEditor">
|
<Group name="GuiEditor">
|
||||||
<Setting name="lastPath">tools/gui</Setting>
|
<Setting name="lastPath">tools/worldEditor/gui</Setting>
|
||||||
<Setting name="previewResolution">1024 768</Setting>
|
<Setting name="previewResolution">1024 768</Setting>
|
||||||
<Group name="EngineDevelopment">
|
<Group name="Library">
|
||||||
<Setting name="toggleIntoEditor">0</Setting>
|
<Setting name="viewType">Categorized</Setting>
|
||||||
<Setting name="showEditorProfiles">0</Setting>
|
</Group>
|
||||||
<Setting name="showEditorGuis">0</Setting>
|
<Group name="Snapping">
|
||||||
|
<Setting name="snapToCanvas">1</Setting>
|
||||||
|
<Setting name="snapToCenters">1</Setting>
|
||||||
|
<Setting name="sensitivity">2</Setting>
|
||||||
|
<Setting name="snap2Grid">0</Setting>
|
||||||
|
<Setting name="snap2GridSize">8</Setting>
|
||||||
|
<Setting name="snapToControls">1</Setting>
|
||||||
|
<Setting name="snapToEdges">1</Setting>
|
||||||
|
<Setting name="snapToGuides">1</Setting>
|
||||||
|
</Group>
|
||||||
|
<Group name="Rendering">
|
||||||
|
<Setting name="drawGuides">1</Setting>
|
||||||
|
<Setting name="drawBorderLines">1</Setting>
|
||||||
|
</Group>
|
||||||
|
<Group name="Help">
|
||||||
|
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
|
||||||
|
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
|
||||||
|
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="Selection">
|
<Group name="Selection">
|
||||||
<Setting name="fullBox">0</Setting>
|
<Setting name="fullBox">0</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="Snapping">
|
<Group name="EngineDevelopment">
|
||||||
<Setting name="snapToControls">1</Setting>
|
<Setting name="showEditorProfiles">0</Setting>
|
||||||
<Setting name="sensitivity">2</Setting>
|
<Setting name="toggleIntoEditor">0</Setting>
|
||||||
<Setting name="snapToGuides">1</Setting>
|
<Setting name="showEditorGuis">0</Setting>
|
||||||
<Setting name="snap2GridSize">8</Setting>
|
|
||||||
<Setting name="snapToCenters">1</Setting>
|
|
||||||
<Setting name="snapToEdges">1</Setting>
|
|
||||||
<Setting name="snap2Grid">0</Setting>
|
|
||||||
<Setting name="snapToCanvas">1</Setting>
|
|
||||||
</Group>
|
|
||||||
<Group name="Help">
|
|
||||||
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
|
|
||||||
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
|
|
||||||
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
|
|
||||||
</Group>
|
|
||||||
<Group name="Rendering">
|
|
||||||
<Setting name="drawBorderLines">1</Setting>
|
|
||||||
<Setting name="drawGuides">1</Setting>
|
|
||||||
</Group>
|
|
||||||
<Group name="Library">
|
|
||||||
<Setting name="viewType">Categorized</Setting>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="AxisGizmo">
|
<Group name="ShapeEditor">
|
||||||
<Setting name="mouseRotateScalar">0.8</Setting>
|
<Setting name="SunAngleZ">135</Setting>
|
||||||
<Setting name="mouseScaleScalar">0.8</Setting>
|
<Setting name="gridDimension">40 40</Setting>
|
||||||
<Setting name="renderWhenUsed">0</Setting>
|
<Setting name="gridSize">0.1</Setting>
|
||||||
<Setting name="rotationSnap">15</Setting>
|
<Setting name="showObjBox">1</Setting>
|
||||||
<Setting name="snapRotations">0</Setting>
|
<Setting name="AdvancedWndVisible">1</Setting>
|
||||||
<Setting name="renderInfoText">1</Setting>
|
<Setting name="showNodes">1</Setting>
|
||||||
<Setting name="axisGizmoMaxScreenLen">100</Setting>
|
<Setting name="ShowGrid">1</Setting>
|
||||||
<Group name="Grid">
|
<Setting name="SunDiffuseColor">255 255 255 255</Setting>
|
||||||
<Setting name="renderPlane">0</Setting>
|
<Setting name="SunAngleX">45</Setting>
|
||||||
<Setting name="snapToGrid">1</Setting>
|
<Setting name="highlightMaterial">1</Setting>
|
||||||
<Setting name="renderPlaneHashes">0</Setting>
|
<Setting name="backgroundColor">0 0 0 100</Setting>
|
||||||
<Setting name="gridSize">1 1 1</Setting>
|
<Setting name="renderMounts">1</Setting>
|
||||||
<Setting name="gridColor">255 255 255 20</Setting>
|
<Setting name="RenderCollision">0</Setting>
|
||||||
<Setting name="planeDim">500</Setting>
|
<Setting name="showBounds">0</Setting>
|
||||||
</Group>
|
<Setting name="SunAmbientColor">180 180 180 255</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="WorldEditor">
|
<Group name="WorldEditor">
|
||||||
<Setting name="torsionPath">AssetWork_Debug.exe</Setting>
|
|
||||||
<Setting name="undoLimit">40</Setting>
|
|
||||||
<Setting name="dropType">screenCenter</Setting>
|
|
||||||
<Setting name="displayType">6</Setting>
|
|
||||||
<Setting name="forceLoadDAE">0</Setting>
|
<Setting name="forceLoadDAE">0</Setting>
|
||||||
|
<Setting name="torsionPath">AssetWork_Debug.exe</Setting>
|
||||||
<Setting name="orthoFOV">50</Setting>
|
<Setting name="orthoFOV">50</Setting>
|
||||||
|
<Setting name="undoLimit">40</Setting>
|
||||||
<Setting name="EditorLayoutMode">Modern</Setting>
|
<Setting name="EditorLayoutMode">Modern</Setting>
|
||||||
|
<Setting name="dropType">screenCenter</Setting>
|
||||||
<Setting name="orthoShowGrid">1</Setting>
|
<Setting name="orthoShowGrid">1</Setting>
|
||||||
<Setting name="currentEditor">WorldEditorInspectorPlugin</Setting>
|
<Setting name="displayType">6</Setting>
|
||||||
<Group name="Grid">
|
<Setting name="currentEditor">TerrainPainterPlugin</Setting>
|
||||||
<Setting name="gridMinorColor">51 51 51 100</Setting>
|
<Group name="Images">
|
||||||
<Setting name="gridColor">102 102 102 100</Setting>
|
<Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
|
||||||
<Setting name="gridSize">1</Setting>
|
<Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
|
||||||
<Setting name="gridOriginColor">255 255 255 100</Setting>
|
<Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
|
||||||
<Setting name="gridSnap">1</Setting>
|
|
||||||
</Group>
|
|
||||||
<Group name="Render">
|
|
||||||
<Setting name="renderSelectionBox">1</Setting>
|
|
||||||
<Setting name="showMousePopupInfo">1</Setting>
|
|
||||||
<Setting name="renderObjHandle">1</Setting>
|
|
||||||
<Setting name="renderPopupBackground">1</Setting>
|
|
||||||
<Setting name="renderObjText">1</Setting>
|
|
||||||
</Group>
|
|
||||||
<Group name="ObjectIcons">
|
|
||||||
<Setting name="fadeIconsStartDist">8</Setting>
|
|
||||||
<Setting name="fadeIconsStartAlpha">255</Setting>
|
|
||||||
<Setting name="fadeIconsEndDist">20</Setting>
|
|
||||||
<Setting name="fadeIconsEndAlpha">0</Setting>
|
|
||||||
<Setting name="fadeIcons">1</Setting>
|
|
||||||
</Group>
|
|
||||||
<Group name="Color">
|
|
||||||
<Setting name="selectionBoxColor">255 255 0 255</Setting>
|
|
||||||
<Setting name="dragRectColor">255 255 0 255</Setting>
|
|
||||||
<Setting name="objMouseOverSelectColor">0 0 255 255</Setting>
|
|
||||||
<Setting name="objSelectColor">255 0 0 255</Setting>
|
|
||||||
<Setting name="objectTextColor">255 255 255 255</Setting>
|
|
||||||
<Setting name="popupBackgroundColor">100 100 100 255</Setting>
|
|
||||||
<Setting name="objMouseOverColor">0 255 0 255</Setting>
|
|
||||||
</Group>
|
|
||||||
<Group name="Theme">
|
|
||||||
<Setting name="windowTitleFontHLColor">255 255 255 255</Setting>
|
|
||||||
<Setting name="windowTitleFontColor">215 215 215 255</Setting>
|
|
||||||
<Setting name="windowTitleBGHLColor">48 48 48 255</Setting>
|
|
||||||
<Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
|
|
||||||
<Setting name="windowTitleBGColor">50 50 50 255</Setting>
|
|
||||||
</Group>
|
|
||||||
<Group name="Tools">
|
|
||||||
<Setting name="snapGround">0</Setting>
|
|
||||||
<Setting name="snapSoftSize">2</Setting>
|
|
||||||
<Setting name="boundingBoxCollision">0</Setting>
|
|
||||||
<Setting name="dropAtScreenCenterScalar">1</Setting>
|
|
||||||
<Setting name="dropAtScreenCenterMax">100</Setting>
|
|
||||||
<Setting name="snapSoft">0</Setting>
|
|
||||||
<Setting name="objectsUseBoxCenter">1</Setting>
|
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="Docs">
|
<Group name="Docs">
|
||||||
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
|
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
|
||||||
<Setting name="forumURL">http://www.garagegames.com/products/torque-3d/forums</Setting>
|
<Setting name="forumURL">http://www.garagegames.com/products/torque-3d/forums</Setting>
|
||||||
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
|
|
||||||
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
|
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
|
||||||
|
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="Images">
|
<Group name="Theme">
|
||||||
<Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
|
<Setting name="windowTitleFontColor">215 215 215 255</Setting>
|
||||||
<Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
|
<Setting name="windowTitleFontHLColor">255 255 255 255</Setting>
|
||||||
<Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
|
<Setting name="windowTitleBGColor">50 50 50 255</Setting>
|
||||||
|
<Setting name="windowTitleBGHLColor">48 48 48 255</Setting>
|
||||||
|
<Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
|
||||||
|
</Group>
|
||||||
|
<Group name="Grid">
|
||||||
|
<Setting name="gridColor">102 102 102 100</Setting>
|
||||||
|
<Setting name="gridOriginColor">255 255 255 100</Setting>
|
||||||
|
<Setting name="gridMinorColor">51 51 51 100</Setting>
|
||||||
|
<Setting name="gridSize">1</Setting>
|
||||||
|
<Setting name="gridSnap">1</Setting>
|
||||||
|
</Group>
|
||||||
|
<Group name="ObjectIcons">
|
||||||
|
<Setting name="fadeIcons">1</Setting>
|
||||||
|
<Setting name="fadeIconsStartDist">8</Setting>
|
||||||
|
<Setting name="fadeIconsEndDist">20</Setting>
|
||||||
|
<Setting name="fadeIconsEndAlpha">0</Setting>
|
||||||
|
<Setting name="fadeIconsStartAlpha">255</Setting>
|
||||||
|
</Group>
|
||||||
|
<Group name="Tools">
|
||||||
|
<Setting name="dropAtScreenCenterScalar">1</Setting>
|
||||||
|
<Setting name="TerrainSnapOffsetZ">0</Setting>
|
||||||
|
<Setting name="OffsetZValue">0.01</Setting>
|
||||||
|
<Setting name="objectsUseBoxCenter">1</Setting>
|
||||||
|
<Setting name="boundingBoxCollision">0</Setting>
|
||||||
|
<Setting name="dropAtScreenCenterMax">100</Setting>
|
||||||
|
<Setting name="snapGround">0</Setting>
|
||||||
|
<Setting name="snapSoft">0</Setting>
|
||||||
|
<Setting name="snapSoftSize">2</Setting>
|
||||||
|
</Group>
|
||||||
|
<Group name="Render">
|
||||||
|
<Setting name="renderObjText">1</Setting>
|
||||||
|
<Setting name="renderPopupBackground">1</Setting>
|
||||||
|
<Setting name="showMousePopupInfo">1</Setting>
|
||||||
|
<Setting name="renderSelectionBox">1</Setting>
|
||||||
|
<Setting name="renderObjHandle">1</Setting>
|
||||||
|
</Group>
|
||||||
|
<Group name="Color">
|
||||||
|
<Setting name="objMouseOverSelectColor">0 0 255 255</Setting>
|
||||||
|
<Setting name="objSelectColor">255 0 0 255</Setting>
|
||||||
|
<Setting name="objMouseOverColor">0 255 0 255</Setting>
|
||||||
|
<Setting name="dragRectColor">255 255 0 255</Setting>
|
||||||
|
<Setting name="objectTextColor">255 255 255 255</Setting>
|
||||||
|
<Setting name="selectionBoxColor">255 255 0 255</Setting>
|
||||||
|
<Setting name="popupBackgroundColor">100 100 100 255</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="Layout">
|
<Group name="Layout">
|
||||||
<Setting name="LayoutMode">Classic</Setting>
|
<Setting name="LayoutMode">Classic</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="AssetCreation">
|
<Group name="AssetCreation">
|
||||||
<Setting name="ScriptAssetSubdirectoryFormat"><AssetType>/<SpecialAssetTag>/</Setting>
|
<Setting name="CubemapAssetSubdirectoryFormat"><AssetType>/</Setting>
|
||||||
<Setting name="AutoImport">1</Setting>
|
|
||||||
<Setting name="TerrainMatAssetSubdirectoryFormat"><AssetType>/</Setting>
|
|
||||||
<Setting name="GUIAssetSubdirectoryFormat"><AssetType>/OtherFolder/</Setting>
|
|
||||||
<Setting name="StatemachineAssetSubdirectoryFormat"><AssetType>/</Setting>
|
|
||||||
<Setting name="LevelAssetSubdirectoryFormat"><AssetType>/<AssetName>/</Setting>
|
<Setting name="LevelAssetSubdirectoryFormat"><AssetType>/<AssetName>/</Setting>
|
||||||
<Setting name="AssetImporDefaultConfig">TestConfig</Setting>
|
<Setting name="AssetImporDefaultConfig">TestConfig</Setting>
|
||||||
<Setting name="CubemapAssetSubdirectoryFormat"><AssetType>/</Setting>
|
|
||||||
<Setting name="TerrainAssetSubdirectoryFormat"><AssetType>/</Setting>
|
|
||||||
<Setting name="PostFXAssetSubdirectoryFormat"><AssetType>/</Setting>
|
<Setting name="PostFXAssetSubdirectoryFormat"><AssetType>/</Setting>
|
||||||
<Setting name="CppAssetSubdirectoryFormat"><AssetType>/<SpecialAssetTag>/</Setting>
|
<Setting name="CppAssetSubdirectoryFormat"><AssetType>/<SpecialAssetTag>/</Setting>
|
||||||
|
<Setting name="StatemachineAssetSubdirectoryFormat"><AssetType>/</Setting>
|
||||||
|
<Setting name="TerrainMatAssetSubdirectoryFormat"><AssetType>/</Setting>
|
||||||
|
<Setting name="ScriptAssetSubdirectoryFormat"><AssetType>/<SpecialAssetTag>/</Setting>
|
||||||
|
<Setting name="AutoImport">1</Setting>
|
||||||
|
<Setting name="TerrainAssetSubdirectoryFormat"><AssetType>/</Setting>
|
||||||
|
<Setting name="GUIAssetSubdirectoryFormat"><AssetType>/OtherFolder/</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="TerrainEditor">
|
<Group name="LevelInformation">
|
||||||
<Setting name="currentAction">lowerHeight</Setting>
|
<Setting name="levelsDirectory">data/FPSGameplay/levels</Setting>
|
||||||
<Group name="ActionValues">
|
<Group name="levels">
|
||||||
<Setting name="softSelectDefaultFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
|
<Group name="BlankRoom.mis">
|
||||||
<Setting name="noiseFactor">1</Setting>
|
<Setting name="cameraSpeed">25</Setting>
|
||||||
<Setting name="SlopeMaxAngle">90</Setting>
|
</Group>
|
||||||
<Setting name="softSelectRadius">50</Setting>
|
<Group name="PbrMatTest.mis">
|
||||||
<Setting name="SlopeMinAngle">0</Setting>
|
<Setting name="cameraSpeed">5</Setting>
|
||||||
<Setting name="softSelectFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
|
</Group>
|
||||||
<Setting name="smoothFactor">0.1</Setting>
|
|
||||||
<Setting name="adjustHeightVal">10</Setting>
|
|
||||||
<Setting name="setHeightVal">100</Setting>
|
|
||||||
<Setting name="scaleVal">1</Setting>
|
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="Brush">
|
|
||||||
<Setting name="brushPressure">1</Setting>
|
|
||||||
<Setting name="brushType">ellipse</Setting>
|
|
||||||
<Setting name="maxBrushSize">40 40</Setting>
|
|
||||||
<Setting name="brushSize">40 40</Setting>
|
|
||||||
<Setting name="brushSoftness">1</Setting>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
<Group name="RoadEditor">
|
|
||||||
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
|
|
||||||
<Setting name="HoverNodeColor">255 255 255 255</Setting>
|
|
||||||
<Setting name="materialName">DefaultDecalRoadMaterial</Setting>
|
|
||||||
<Setting name="DefaultWidth">10</Setting>
|
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="Assets">
|
<Group name="Assets">
|
||||||
<Setting name="AssetImporDefaultConfig">TestConfig</Setting>
|
<Setting name="AssetImporDefaultConfig">TestConfig</Setting>
|
||||||
|
|
@ -217,32 +207,44 @@
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="NavEditor">
|
<Group name="NavEditor">
|
||||||
<Setting name="spawnDatablock">DefaultPlayerData</Setting>
|
|
||||||
<Setting name="backgroundBuild">1</Setting>
|
<Setting name="backgroundBuild">1</Setting>
|
||||||
|
<Setting name="spawnDatablock">DefaultPlayerData</Setting>
|
||||||
<Setting name="SpawnClass">AIPlayer</Setting>
|
<Setting name="SpawnClass">AIPlayer</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="RiverEditor">
|
<Group name="RiverEditor">
|
||||||
|
<Setting name="DefaultNormal">0 0 1</Setting>
|
||||||
<Setting name="HoverSplineColor">255 0 0 255</Setting>
|
<Setting name="HoverSplineColor">255 0 0 255</Setting>
|
||||||
<Setting name="DefaultWidth">10</Setting>
|
<Setting name="DefaultWidth">10</Setting>
|
||||||
<Setting name="DefaultNormal">0 0 1</Setting>
|
|
||||||
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
|
|
||||||
<Setting name="HoverNodeColor">255 255 255 255</Setting>
|
|
||||||
<Setting name="DefaultDepth">5</Setting>
|
<Setting name="DefaultDepth">5</Setting>
|
||||||
|
<Setting name="HoverNodeColor">255 255 255 255</Setting>
|
||||||
|
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="LevelInformation">
|
<Group name="AxisGizmo">
|
||||||
<Setting name="levelsDirectory">data/FPSGameplay/levels</Setting>
|
<Setting name="rotationSnap">15</Setting>
|
||||||
<Group name="levels">
|
<Setting name="mouseRotateScalar">0.8</Setting>
|
||||||
<Group name="PbrMatTest.mis">
|
<Setting name="snapRotations">0</Setting>
|
||||||
<Setting name="cameraSpeed">5</Setting>
|
<Setting name="mouseScaleScalar">0.8</Setting>
|
||||||
</Group>
|
<Setting name="renderInfoText">1</Setting>
|
||||||
<Group name="BlankRoom.mis">
|
<Setting name="renderWhenUsed">0</Setting>
|
||||||
<Setting name="cameraSpeed">25</Setting>
|
<Setting name="axisGizmoMaxScreenLen">100</Setting>
|
||||||
</Group>
|
<Group name="Grid">
|
||||||
|
<Setting name="gridSize">1 1 1</Setting>
|
||||||
|
<Setting name="planeDim">500</Setting>
|
||||||
|
<Setting name="gridColor">255 255 255 20</Setting>
|
||||||
|
<Setting name="renderPlane">0</Setting>
|
||||||
|
<Setting name="snapToGrid">1</Setting>
|
||||||
|
<Setting name="renderPlaneHashes">0</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group name="AssetBrowser">
|
<Group name="AssetBrowser">
|
||||||
<Setting name="previewSize">Small</Setting>
|
<Setting name="previewSize">Small</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
|
<Group name="RoadEditor">
|
||||||
|
<Setting name="materialName">DefaultDecalRoadMaterial</Setting>
|
||||||
|
<Setting name="DefaultWidth">10</Setting>
|
||||||
|
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
|
||||||
|
<Setting name="HoverNodeColor">255 255 255 255</Setting>
|
||||||
|
</Group>
|
||||||
<Group name="ConvexEditor">
|
<Group name="ConvexEditor">
|
||||||
<Setting name="materialName">Grid_512_Orange</Setting>
|
<Setting name="materialName">Grid_512_Orange</Setting>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
|
||||||
|
|
@ -300,6 +300,20 @@ function CreateNewTerrainGui::onWake( %this )
|
||||||
{
|
{
|
||||||
%this-->theName.setText( "" );
|
%this-->theName.setText( "" );
|
||||||
|
|
||||||
|
//Run through and grab any TerrainMaterialAssets
|
||||||
|
%assetQuery = new AssetQuery();
|
||||||
|
AssetDatabase.findAssetType(%assetQuery, "TerrainMaterialAsset");
|
||||||
|
|
||||||
|
%count = %assetQuery.getCount();
|
||||||
|
|
||||||
|
for(%i=0; %i < %count; %i++)
|
||||||
|
{
|
||||||
|
%assetId = %assetQuery.getAsset(%i);
|
||||||
|
|
||||||
|
AssetDatabase.acquireAsset(%assetId);
|
||||||
|
}
|
||||||
|
%assetQuery.delete();
|
||||||
|
|
||||||
%matList = %this-->theMaterialList;
|
%matList = %this-->theMaterialList;
|
||||||
%matList.clear();
|
%matList.clear();
|
||||||
%count = TerrainMaterialSet.getCount();
|
%count = TerrainMaterialSet.getCount();
|
||||||
|
|
@ -313,8 +327,8 @@ function CreateNewTerrainGui::onWake( %this )
|
||||||
%rezList.add( "512", 512 );
|
%rezList.add( "512", 512 );
|
||||||
%rezList.add( "1024", 1024 );
|
%rezList.add( "1024", 1024 );
|
||||||
%rezList.add( "2048", 2048 );
|
%rezList.add( "2048", 2048 );
|
||||||
//%rezList.add( "4096", 4096 );
|
%rezList.add( "4096", 4096 );
|
||||||
%rezList.setSelected( 256 );
|
%rezList.setSelected( 512 );
|
||||||
|
|
||||||
%this-->flatRadio.setStateOn( true );
|
%this-->flatRadio.setStateOn( true );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -227,6 +227,77 @@ function ObjectBuilderGui::gotFileName(%this, %name)
|
||||||
//%this.controls[%this.currentControl].setValue(%name);
|
//%this.controls[%this.currentControl].setValue(%name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
function ObjectBuilderGui::createTerrainAssetType(%this, %index)
|
||||||
|
{
|
||||||
|
if(%index >= %this.numFields || %this.field[%index, name] $= "")
|
||||||
|
{
|
||||||
|
error("ObjectBuilderGui::createTerrainAssetType: invalid field");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if(%this.field[%index, text] $= "")
|
||||||
|
%name = %this.field[%index, name];
|
||||||
|
else
|
||||||
|
%name = %this.field[%index, text];
|
||||||
|
|
||||||
|
//
|
||||||
|
%this.textControls[%this.numControls] = new GuiTextCtrl() {
|
||||||
|
profile = "ToolsGuiTextRightProfile";
|
||||||
|
text = %name;
|
||||||
|
extent = %this.fieldNameExtent;
|
||||||
|
position = %this.curXPos @ " " @ %this.curYPos;
|
||||||
|
modal = "1";
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
%this.controls[%this.numControls] = new GuiButtonCtrl() {
|
||||||
|
HorizSizing = "width";
|
||||||
|
profile = "ToolsGuiButtonProfile";
|
||||||
|
extent = %this.fileButtonExtent;
|
||||||
|
position = %this.curXPos + %this.columnOffset @ " " @ %this.curYPos;
|
||||||
|
modal = "1";
|
||||||
|
command = %this @ ".getTerrainAsset(" @ %index @ ");";
|
||||||
|
};
|
||||||
|
|
||||||
|
%val = %this.field[%index, value];
|
||||||
|
%this.controls[%this.numControls].setValue(fileBase(%val) @ fileExt(%val));
|
||||||
|
|
||||||
|
%this.numControls++;
|
||||||
|
%this.curYPos += %this.defaultFieldStep;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ObjectBuilderGui::getTerrainAsset(%this, %index)
|
||||||
|
{
|
||||||
|
if(%index >= %this.numFields || %this.field[%index, name] $= "")
|
||||||
|
{
|
||||||
|
error("ObjectBuilderGui::getTerrainAsset: invalid field");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
%val = %this.field[%index, ext];
|
||||||
|
|
||||||
|
//%path = filePath(%val);
|
||||||
|
//%ext = fileExt(%val);
|
||||||
|
|
||||||
|
%this.currentControl = %index;
|
||||||
|
AssetBrowser.showDialog("TerrainAsset", %this @ ".gotTerrainAsset", "", "", "");
|
||||||
|
//getLoadFilename( %val @ "|" @ %val, %this @ ".gotFileName", %this.lastPath );
|
||||||
|
}
|
||||||
|
|
||||||
|
function ObjectBuilderGui::gotTerrainAsset(%this, %name)
|
||||||
|
{
|
||||||
|
%index = %this.currentControl;
|
||||||
|
|
||||||
|
%this.field[%index, value] = %name;
|
||||||
|
%this.controls[%this.currentControl].setText(fileBase(%name) @ fileExt(%name));
|
||||||
|
|
||||||
|
%this.lastPath = %name;
|
||||||
|
|
||||||
|
// This doesn't work for button controls as getValue returns their state!
|
||||||
|
//%this.controls[%this.currentControl].setValue(%name);
|
||||||
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
function ObjectBuilderGui::createMaterialNameType(%this, %index)
|
function ObjectBuilderGui::createMaterialNameType(%this, %index)
|
||||||
|
|
@ -490,6 +561,9 @@ function ObjectBuilderGui::process(%this)
|
||||||
case "TypeFile":
|
case "TypeFile":
|
||||||
%this.createFileType(%i);
|
%this.createFileType(%i);
|
||||||
|
|
||||||
|
case "TypeTerrainAsset":
|
||||||
|
%this.createTerrainAssetType(%i);
|
||||||
|
|
||||||
case "TypeMaterialName":
|
case "TypeMaterialName":
|
||||||
%this.createMaterialNameType(%i);
|
%this.createMaterialNameType(%i);
|
||||||
|
|
||||||
|
|
@ -830,6 +904,7 @@ function ObjectBuilderGui::buildTerrainBlock(%this)
|
||||||
%this.createCallback = "ETerrainEditor.attachTerrain();";
|
%this.createCallback = "ETerrainEditor.attachTerrain();";
|
||||||
|
|
||||||
%this.addField("terrainFile", "TypeFile", "Terrain file", "", "*.ter");
|
%this.addField("terrainFile", "TypeFile", "Terrain file", "", "*.ter");
|
||||||
|
%this.addField("terrainAsset", "TypeTerrainAsset", "Terrain Asset", "", "");
|
||||||
%this.addField("squareSize", "TypeInt", "Square size", "8");
|
%this.addField("squareSize", "TypeInt", "Square size", "8");
|
||||||
|
|
||||||
%this.process();
|
%this.process();
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,20 @@ function TerrainMaterialDlg::onWake( %this )
|
||||||
if( !isObject( TerrainMaterialDlgDeleteGroup ) )
|
if( !isObject( TerrainMaterialDlgDeleteGroup ) )
|
||||||
new SimGroup( TerrainMaterialDlgDeleteGroup );
|
new SimGroup( TerrainMaterialDlgDeleteGroup );
|
||||||
|
|
||||||
|
//Run through and grab any TerrainMaterialAssets
|
||||||
|
%assetQuery = new AssetQuery();
|
||||||
|
AssetDatabase.findAssetType(%assetQuery, "TerrainMaterialAsset");
|
||||||
|
|
||||||
|
%count = %assetQuery.getCount();
|
||||||
|
|
||||||
|
for(%i=0; %i < %count; %i++)
|
||||||
|
{
|
||||||
|
%assetId = %assetQuery.getAsset(%i);
|
||||||
|
|
||||||
|
AssetDatabase.acquireAsset(%assetId);
|
||||||
|
}
|
||||||
|
%assetQuery.delete();
|
||||||
|
|
||||||
// Snapshot the materials.
|
// Snapshot the materials.
|
||||||
%this.snapshotMaterials();
|
%this.snapshotMaterials();
|
||||||
|
|
||||||
|
|
@ -292,12 +306,33 @@ function TerrainMaterialDlg::changeNormal( %this )
|
||||||
%ctrl.setBitmap( %file );
|
%ctrl.setBitmap( %file );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
function TerrainMaterialDlg::changePBRConfig( %this )
|
||||||
|
{
|
||||||
|
%ctrl = %this-->pbrConfigTexCtrl;
|
||||||
|
%file = %ctrl.bitmap;
|
||||||
|
if( getSubStr( %file, 0 , 6 ) $= "tools/" )
|
||||||
|
%file = "";
|
||||||
|
|
||||||
|
%file = TerrainMaterialDlg._selectTextureFileDialog( %file );
|
||||||
|
if( %file $= "" )
|
||||||
|
{
|
||||||
|
if( %ctrl.bitmap !$= "" )
|
||||||
|
%file = %ctrl.bitmap;
|
||||||
|
else
|
||||||
|
%file = "tools/materialEditor/gui/unknownImage";
|
||||||
|
}
|
||||||
|
|
||||||
|
%file = makeRelativePath( %file, getMainDotCsDir() );
|
||||||
|
%ctrl.setBitmap( %file );
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
function TerrainMaterialDlg::newMat( %this )
|
function TerrainMaterialDlg::newMat( %this )
|
||||||
{
|
{
|
||||||
// Create a unique material name.
|
// Create a unique material name.
|
||||||
%matName = getUniqueInternalName( "newMaterial", TerrainMaterialSet, true );
|
/*%matName = getUniqueInternalName( "newMaterial", TerrainMaterialSet, true );
|
||||||
|
|
||||||
// Create the new material.
|
// Create the new material.
|
||||||
%newMat = new TerrainMaterial()
|
%newMat = new TerrainMaterial()
|
||||||
|
|
@ -308,12 +343,16 @@ function TerrainMaterialDlg::newMat( %this )
|
||||||
%newMat.setFileName( "art/terrains/materials.cs" );
|
%newMat.setFileName( "art/terrains/materials.cs" );
|
||||||
|
|
||||||
// Mark it as dirty and to be saved in the default location.
|
// Mark it as dirty and to be saved in the default location.
|
||||||
ETerrainMaterialPersistMan.setDirty( %newMat, "art/terrains/materials.cs" );
|
ETerrainMaterialPersistMan.setDirty( %newMat, "art/terrains/materials.cs" );*/
|
||||||
|
|
||||||
%matLibTree = %this-->matLibTree;
|
%scene = getRootScene();
|
||||||
%matLibTree.buildVisibleTree( true );
|
%path = filePath(%scene.getFilename());
|
||||||
%item = %matLibTree.findItemByObjectId( %newMat );
|
%module = AssetBrowser.getModuleFromAddress(%path);
|
||||||
%matLibTree.selectItem( %item );
|
AssetBrowser.selectedModule = %module.moduleID;
|
||||||
|
|
||||||
|
AssetBrowser.currentAddress = "data/" @ %module.moduleID;
|
||||||
|
|
||||||
|
AssetBrowser.setupCreateNewAsset("TerrainMaterialAsset", AssetBrowser.selectedModule);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
@ -380,6 +419,11 @@ function TerrainMaterialDlg::setActiveMaterial( %this, %mat )
|
||||||
}else{
|
}else{
|
||||||
%this-->baseTexCtrl.setBitmap( %mat.diffuseMap );
|
%this-->baseTexCtrl.setBitmap( %mat.diffuseMap );
|
||||||
}
|
}
|
||||||
|
if (%mat.pbrConfigMap $= ""){
|
||||||
|
%this-->pbrConfigTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" );
|
||||||
|
}else{
|
||||||
|
%this-->pbrConfigTexCtrl.setBitmap( %mat.pbrConfigMap );
|
||||||
|
}
|
||||||
if (%mat.detailMap $= ""){
|
if (%mat.detailMap $= ""){
|
||||||
%this-->detailTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" );
|
%this-->detailTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" );
|
||||||
}else{
|
}else{
|
||||||
|
|
@ -438,6 +482,11 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
|
||||||
}else{
|
}else{
|
||||||
%newNormal = %this-->normTexCtrl.bitmap;
|
%newNormal = %this-->normTexCtrl.bitmap;
|
||||||
}
|
}
|
||||||
|
if (%this-->pbrConfigTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){
|
||||||
|
%newPBRConfig = "";
|
||||||
|
}else{
|
||||||
|
%newPBRConfig = %this-->pbrConfigTexCtrl.bitmap;
|
||||||
|
}
|
||||||
if (%this-->detailTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){
|
if (%this-->detailTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){
|
||||||
%newDetail = "";
|
%newDetail = "";
|
||||||
}else{
|
}else{
|
||||||
|
|
@ -466,6 +515,7 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
|
||||||
%mat.diffuseMap $= %newDiffuse &&
|
%mat.diffuseMap $= %newDiffuse &&
|
||||||
%mat.normalMap $= %newNormal &&
|
%mat.normalMap $= %newNormal &&
|
||||||
%mat.detailMap $= %newDetail &&
|
%mat.detailMap $= %newDetail &&
|
||||||
|
%mat.pbrConfigMap $= %newPBRConfig &&
|
||||||
%mat.macroMap $= %newMacro &&
|
%mat.macroMap $= %newMacro &&
|
||||||
%mat.detailSize == %detailSize &&
|
%mat.detailSize == %detailSize &&
|
||||||
%mat.diffuseSize == %diffuseSize &&
|
%mat.diffuseSize == %diffuseSize &&
|
||||||
|
|
@ -498,6 +548,7 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
|
||||||
|
|
||||||
%mat.diffuseMap = %newDiffuse;
|
%mat.diffuseMap = %newDiffuse;
|
||||||
%mat.normalMap = %newNormal;
|
%mat.normalMap = %newNormal;
|
||||||
|
%mat.pbrConfigMap = %newPBRConfig;
|
||||||
%mat.detailMap = %newDetail;
|
%mat.detailMap = %newDetail;
|
||||||
%mat.macroMap = %newMacro;
|
%mat.macroMap = %newMacro;
|
||||||
%mat.detailSize = %detailSize;
|
%mat.detailSize = %detailSize;
|
||||||
|
|
@ -543,6 +594,7 @@ function TerrainMaterialDlg::snapshotMaterials( %this )
|
||||||
internalName = %mat.internalName;
|
internalName = %mat.internalName;
|
||||||
diffuseMap = %mat.diffuseMap;
|
diffuseMap = %mat.diffuseMap;
|
||||||
normalMap = %mat.normalMap;
|
normalMap = %mat.normalMap;
|
||||||
|
pbrConfigMap = %mat.pbrConfigMap;
|
||||||
detailMap = %mat.detailMap;
|
detailMap = %mat.detailMap;
|
||||||
macroMap = %mat.macroMap;
|
macroMap = %mat.macroMap;
|
||||||
detailSize = %mat.detailSize;
|
detailSize = %mat.detailSize;
|
||||||
|
|
@ -577,6 +629,7 @@ function TerrainMaterialDlg::restoreMaterials( %this )
|
||||||
%mat.setInternalName( %obj.internalName );
|
%mat.setInternalName( %obj.internalName );
|
||||||
%mat.diffuseMap = %obj.diffuseMap;
|
%mat.diffuseMap = %obj.diffuseMap;
|
||||||
%mat.normalMap = %obj.normalMap;
|
%mat.normalMap = %obj.normalMap;
|
||||||
|
%mat.pbrConfigMap = %obj.pbrConfigMap;
|
||||||
%mat.detailMap = %obj.detailMap;
|
%mat.detailMap = %obj.detailMap;
|
||||||
%mat.macroMap = %obj.macroMap;
|
%mat.macroMap = %obj.macroMap;
|
||||||
%mat.detailSize = %obj.detailSize;
|
%mat.detailSize = %obj.detailSize;
|
||||||
|
|
|
||||||
|
|
@ -280,7 +280,17 @@ function EditorSaveMission()
|
||||||
initContainerTypeSearch($TypeMasks::TerrainObjectType);
|
initContainerTypeSearch($TypeMasks::TerrainObjectType);
|
||||||
|
|
||||||
while ((%terrainObject = containerSearchNext()) != 0)
|
while ((%terrainObject = containerSearchNext()) != 0)
|
||||||
%terrainObject.save(%terrainObject.terrainFile);
|
{
|
||||||
|
if(%terrainObject.terrainAsset !$= "")
|
||||||
|
{
|
||||||
|
//we utilize a terrain asset, so we'll update our dependencies while we're at it
|
||||||
|
%terrainObject.saveAsset();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
%terrainObject.save(%terrainObject.terrainFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ETerrainPersistMan.saveDirty();
|
ETerrainPersistMan.saveDirty();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue