mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-13 03:33:48 +00:00
Merge branch 'Preview4_0' of https://github.com/Areloch/Torque3D into alph40_pbrConfig_BREAKINGWip
This commit is contained in:
commit
062e6f3364
95 changed files with 4237 additions and 2024 deletions
|
|
@ -87,6 +87,10 @@ LevelAsset::LevelAsset() : AssetBase(), mIsSubLevel(false)
|
|||
mLevelName = StringTable->EmptyString();
|
||||
mLevelFile = StringTable->EmptyString();
|
||||
mPreviewImage = StringTable->EmptyString();
|
||||
mPostFXPresetFile = StringTable->EmptyString();
|
||||
mDecalsFile = StringTable->EmptyString();
|
||||
mForestFile = StringTable->EmptyString();
|
||||
mNavmeshFile = StringTable->EmptyString();
|
||||
|
||||
mGamemodeName = StringTable->EmptyString();
|
||||
mMainLevelAsset = StringTable->EmptyString();
|
||||
|
|
@ -115,6 +119,15 @@ void LevelAsset::initPersistFields()
|
|||
addProtectedField("PreviewImage", TypeAssetLooseFilePath, Offset(mPreviewImage, LevelAsset),
|
||||
&setPreviewImageFile, &getPreviewImageFile, "Path to the image used for selection preview.");
|
||||
|
||||
addProtectedField("PostFXPresetFile", TypeAssetLooseFilePath, Offset(mPostFXPresetFile, LevelAsset),
|
||||
&setLevelFile, &getLevelFile, "Path to the level's postFXPreset.");
|
||||
addProtectedField("DecalsFile", TypeAssetLooseFilePath, Offset(mDecalsFile, LevelAsset),
|
||||
&setLevelFile, &getLevelFile, "Path to the decals cache file.");
|
||||
addProtectedField("ForestFile", TypeAssetLooseFilePath, Offset(mForestFile, LevelAsset),
|
||||
&setLevelFile, &getLevelFile, "Path to the Forest cache file.");
|
||||
addProtectedField("NavmeshFile", TypeAssetLooseFilePath, Offset(mNavmeshFile, LevelAsset),
|
||||
&setLevelFile, &getLevelFile, "Path to the navmesh file.");
|
||||
|
||||
addField("isSubScene", TypeBool, Offset(mIsSubLevel, LevelAsset), "Is this a sublevel to another Scene");
|
||||
addField("gameModeName", TypeString, Offset(mGamemodeName, LevelAsset), "Name of the Game Mode to be used with this level");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,10 @@ class LevelAsset : public AssetBase
|
|||
|
||||
StringTableEntry mLevelName;
|
||||
StringTableEntry mLevelFile;
|
||||
StringTableEntry mPostFXPresetFile;
|
||||
StringTableEntry mDecalsFile;
|
||||
StringTableEntry mForestFile;
|
||||
StringTableEntry mNavmeshFile;
|
||||
StringTableEntry mPreviewImage;
|
||||
|
||||
bool mIsSubLevel;
|
||||
|
|
@ -66,6 +70,14 @@ public:
|
|||
|
||||
void setLevelFile(const char* pImageFile);
|
||||
inline StringTableEntry getLevelFile(void) const { return mLevelFile; };
|
||||
void setPostFXPresetFile(const char* pPostFXPresetFile);
|
||||
inline StringTableEntry getPostFXPresetFile(void) const { return mPostFXPresetFile; };
|
||||
void setDecalsFile(const char* pDecalsFile);
|
||||
inline StringTableEntry getDecalsFile(void) const { return mDecalsFile; };
|
||||
void setForestFile(const char* pForestFile);
|
||||
inline StringTableEntry getForestFile(void) const { return mForestFile; };
|
||||
void setNavmeshFile(const char* pNavmeshFile);
|
||||
inline StringTableEntry getNavmeshFile(void) const { return mNavmeshFile; };
|
||||
void setImageFile(const char* pImageFile);
|
||||
inline StringTableEntry getImageFile(void) const { return mPreviewImage; };
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@
|
|||
#include "assets/assetPtr.h"
|
||||
#endif
|
||||
|
||||
#include "T3D/assets/TerrainMaterialAsset.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_CONOBJECT(TerrainAsset);
|
||||
|
|
@ -89,7 +91,7 @@ ConsoleSetType(TypeTerrainAssetPtr)
|
|||
|
||||
TerrainAsset::TerrainAsset()
|
||||
{
|
||||
mTerrainFile = StringTable->EmptyString();
|
||||
mTerrainFilePath = StringTable->EmptyString();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -106,8 +108,22 @@ void TerrainAsset::initPersistFields()
|
|||
Parent::initPersistFields();
|
||||
|
||||
//addField("shaderGraph", TypeRealString, Offset(mShaderGraphFile, TerrainAsset), "");
|
||||
addProtectedField("terrainFile", TypeAssetLooseFilePath, Offset(mTerrainFile, TerrainAsset),
|
||||
&setTerrainFile, &getTerrainFile, "Path to the file containing the terrain data.");
|
||||
addProtectedField("terrainFile", TypeAssetLooseFilePath, Offset(mTerrainFilePath, TerrainAsset),
|
||||
&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()
|
||||
|
|
@ -115,22 +131,20 @@ void TerrainAsset::initializeAsset()
|
|||
// Call parent.
|
||||
Parent::initializeAsset();
|
||||
|
||||
if (!Platform::isFullPath(mTerrainFile))
|
||||
mTerrainFile = getOwned() ? expandAssetFilePath(mTerrainFile) : mTerrainFile;
|
||||
if (!Platform::isFullPath(mTerrainFilePath))
|
||||
mTerrainFilePath = getOwned() ? expandAssetFilePath(mTerrainFilePath) : mTerrainFilePath;
|
||||
|
||||
//if (Platform::isFile(mTerrainFile))
|
||||
// Con::executeFile(mScriptFile, false, false);
|
||||
loadTerrain();
|
||||
}
|
||||
|
||||
void TerrainAsset::onAssetRefresh()
|
||||
{
|
||||
mTerrainFile = expandAssetFilePath(mTerrainFile);
|
||||
mTerrainFilePath = expandAssetFilePath(mTerrainFilePath);
|
||||
|
||||
//if (Platform::isFile(mScriptFile))
|
||||
// Con::executeFile(mScriptFile, false, false);
|
||||
loadTerrain();
|
||||
}
|
||||
|
||||
void TerrainAsset::setTerrainFile(const char* pScriptFile)
|
||||
void TerrainAsset::setTerrainFilePath(const char* pScriptFile)
|
||||
{
|
||||
// Sanity!
|
||||
AssertFatal(pScriptFile != NULL, "Cannot use a NULL script file.");
|
||||
|
|
@ -139,12 +153,52 @@ void TerrainAsset::setTerrainFile(const char* pScriptFile)
|
|||
pScriptFile = StringTable->insert(pScriptFile);
|
||||
|
||||
// Update.
|
||||
mTerrainFile = getOwned() ? expandAssetFilePath(pScriptFile) : pScriptFile;
|
||||
mTerrainFilePath = getOwned() ? expandAssetFilePath(pScriptFile) : pScriptFile;
|
||||
|
||||
// Refresh the asset.
|
||||
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)
|
||||
|
|
@ -190,7 +244,7 @@ GuiControl* GuiInspectorTypeTerrainAssetPtr::constructEditControl()
|
|||
|
||||
TerrainAsset* matAsset = AssetDatabase.acquireAsset< TerrainAsset>(matAssetId);
|
||||
|
||||
TerrainMaterial* materialDef = nullptr;
|
||||
//TerrainMaterial* materialDef = nullptr;
|
||||
|
||||
char bitmapName[512] = "tools/worldEditor/images/toolbar/shape-editor";
|
||||
|
||||
|
|
@ -268,23 +322,3 @@ bool GuiInspectorTypeTerrainAssetPtr::updateRects()
|
|||
|
||||
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
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
#pragma once
|
||||
#ifndef TERRAINASSET_H
|
||||
#define TERRAINASSET_H
|
||||
|
||||
|
|
@ -46,14 +47,23 @@
|
|||
#include "gui/editor/guiInspectorTypes.h"
|
||||
#endif
|
||||
|
||||
#include "terrain/terrData.h"
|
||||
//#include "terrain/terrData.h"
|
||||
#include "assets/assetPtr.h"
|
||||
#include "terrain/terrFile.h"
|
||||
|
||||
class TerrainMaterialAsset;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
class TerrainAsset : public AssetBase
|
||||
{
|
||||
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:
|
||||
TerrainAsset();
|
||||
|
|
@ -63,8 +73,14 @@ public:
|
|||
static void initPersistFields();
|
||||
virtual void copyTo(SimObject* object);
|
||||
|
||||
void setTerrainFile(const char* pTerrainFile);
|
||||
inline StringTableEntry getTerrainFile(void) const { return mTerrainFile; };
|
||||
virtual void setDataField(StringTableEntry slotName, const char* array, const char* value);
|
||||
|
||||
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_CONOBJECT(TerrainAsset);
|
||||
|
|
@ -73,8 +89,8 @@ protected:
|
|||
virtual void initializeAsset();
|
||||
virtual void onAssetRefresh(void);
|
||||
|
||||
static bool setTerrainFile(void *obj, const char *index, const char *data) { static_cast<TerrainAsset*>(obj)->setTerrainFile(data); return false; }
|
||||
static const char* getTerrainFile(void* obj, const char* data) { return static_cast<TerrainAsset*>(obj)->getTerrainFile(); }
|
||||
static bool setTerrainFilePath(void *obj, const char *index, const char *data) { static_cast<TerrainAsset*>(obj)->setTerrainFilePath(data); return false; }
|
||||
static const char* getTerrainFilePath(void* obj, const char* data) { return static_cast<TerrainAsset*>(obj)->getTerrainFilePath(); }
|
||||
};
|
||||
|
||||
DefineConsoleType(TypeTerrainAssetPtr, TerrainAsset)
|
||||
|
|
@ -96,7 +112,6 @@ public:
|
|||
|
||||
virtual GuiControl* constructEditControl();
|
||||
virtual bool updateRects();
|
||||
void setMaterialAsset(String assetId);
|
||||
};
|
||||
|
||||
#endif // _ASSET_BASE_H_
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
#pragma once
|
||||
#ifndef TERRAINMATERIALASSET_H
|
||||
#define TERRAINMATERIALASSET_H
|
||||
|
||||
|
|
|
|||
|
|
@ -240,9 +240,15 @@ LightningData::LightningData()
|
|||
{
|
||||
strikeSound = NULL;
|
||||
|
||||
dMemset( strikeTextureNames, 0, sizeof( strikeTextureNames ) );
|
||||
dMemset( strikeTextures, 0, sizeof( strikeTextures ) );
|
||||
dMemset( thunderSounds, 0, sizeof( thunderSounds ) );
|
||||
for (S32 i = 0; i < MaxThunders; i++)
|
||||
thunderSounds[i] = NULL;
|
||||
|
||||
for (S32 i = 0; i < MaxTextures; i++)
|
||||
{
|
||||
strikeTextureNames[i] = NULL;
|
||||
strikeTextures[i] = NULL;
|
||||
}
|
||||
|
||||
mNumStrikeTextures = 0;
|
||||
}
|
||||
|
||||
|
|
@ -282,9 +288,10 @@ bool LightningData::preload(bool server, String &errorStr)
|
|||
if (Parent::preload(server, errorStr) == false)
|
||||
return false;
|
||||
|
||||
dQsort(thunderSounds, MaxThunders, sizeof(SFXTrack*), cmpSounds);
|
||||
for (numThunders = 0; numThunders < MaxThunders && thunderSounds[numThunders] != NULL; numThunders++) {
|
||||
//
|
||||
//dQsort(thunderSounds, MaxThunders, sizeof(SFXTrack*), cmpSounds);
|
||||
|
||||
for (S32 i = 0; i < MaxThunders; i++) {
|
||||
if (thunderSounds[i]!= NULL) numThunders++;
|
||||
}
|
||||
|
||||
if (server == false)
|
||||
|
|
@ -321,14 +328,15 @@ void LightningData::packData(BitStream* stream)
|
|||
|
||||
U32 i;
|
||||
for (i = 0; i < MaxThunders; i++)
|
||||
sfxWrite( stream, thunderSounds[ i ] );
|
||||
{
|
||||
if (stream->writeFlag(thunderSounds[i]))
|
||||
sfxWrite(stream, thunderSounds[i]);
|
||||
}
|
||||
|
||||
stream->writeInt(mNumStrikeTextures, 4);
|
||||
|
||||
for (i = 0; i < MaxTextures; i++)
|
||||
{
|
||||
for (i = 0; i < MaxTextures; i++)
|
||||
stream->writeString(strikeTextureNames[i]);
|
||||
}
|
||||
|
||||
sfxWrite( stream, strikeSound );
|
||||
}
|
||||
|
|
@ -339,14 +347,17 @@ void LightningData::unpackData(BitStream* stream)
|
|||
|
||||
U32 i;
|
||||
for (i = 0; i < MaxThunders; i++)
|
||||
sfxRead( stream, &thunderSounds[ i ] );
|
||||
{
|
||||
if (stream->readFlag())
|
||||
sfxRead(stream, &thunderSounds[i]);
|
||||
else
|
||||
thunderSounds[i] = NULL;
|
||||
}
|
||||
|
||||
mNumStrikeTextures = stream->readInt(4);
|
||||
|
||||
for (i = 0; i < MaxTextures; i++)
|
||||
{
|
||||
for (i = 0; i < MaxTextures; i++)
|
||||
strikeTextureNames[i] = stream->readSTString();
|
||||
}
|
||||
|
||||
sfxRead( stream, &strikeSound );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -963,7 +963,8 @@ void ReflectionProbe::_onRenderViz(ObjectRenderInst *ri,
|
|||
desc.setZReadWrite(true, false);
|
||||
desc.setCullMode(GFXCullNone);
|
||||
desc.setBlend(true);
|
||||
desc.fillMode = GFXFillWireframe;
|
||||
//desc.fillMode = GFXFillWireframe;
|
||||
|
||||
// Base the sphere color on the light color.
|
||||
ColorI color = ColorI(255, 0, 255, 63);
|
||||
|
||||
|
|
|
|||
|
|
@ -284,6 +284,78 @@ void AssetBase::refreshAsset(void)
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
S32 AssetBase::getAssetDependencyFieldCount(const char* pFieldName)
|
||||
{
|
||||
S32 matchedFieldCount = 0;
|
||||
SimFieldDictionary* fieldDictionary = getFieldDictionary();
|
||||
for (SimFieldDictionaryIterator itr(fieldDictionary); *itr; ++itr)
|
||||
{
|
||||
SimFieldDictionary::Entry* entry = *itr;
|
||||
|
||||
if (String(entry->slotName).startsWith(pFieldName))
|
||||
{
|
||||
matchedFieldCount++;
|
||||
}
|
||||
}
|
||||
|
||||
return matchedFieldCount;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void AssetBase::clearAssetDependencyFields(const char* pFieldName)
|
||||
{
|
||||
SimFieldDictionary* fieldDictionary = getFieldDictionary();
|
||||
for (SimFieldDictionaryIterator itr(fieldDictionary); *itr; ++itr)
|
||||
{
|
||||
SimFieldDictionary::Entry* entry = *itr;
|
||||
|
||||
if (String(entry->slotName).startsWith(pFieldName))
|
||||
{
|
||||
setDataField(entry->slotName, NULL, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void AssetBase::addAssetDependencyField(const char* pFieldName, const char* pAssetId)
|
||||
{
|
||||
U32 existingFieldCount = getAssetDependencyFieldCount(pFieldName);
|
||||
|
||||
//we have a match!
|
||||
char depSlotName[50];
|
||||
dSprintf(depSlotName, sizeof(depSlotName), "%s%d", pFieldName, existingFieldCount);
|
||||
|
||||
char depValue[255];
|
||||
dSprintf(depValue, sizeof(depValue), "@Asset=%s", pAssetId);
|
||||
|
||||
setDataField(StringTable->insert(depSlotName), NULL, StringTable->insert(depValue));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool AssetBase::saveAsset()
|
||||
{
|
||||
// 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(this, AssetDatabase.getAssetFilePath(getAssetId()));
|
||||
|
||||
if (!success)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void AssetBase::acquireAssetReference(void)
|
||||
{
|
||||
// Acquired the acquired reference count.
|
||||
|
|
|
|||
|
|
@ -104,6 +104,12 @@ public:
|
|||
|
||||
void refreshAsset(void);
|
||||
|
||||
S32 getAssetDependencyFieldCount(const char* pFieldName);
|
||||
void clearAssetDependencyFields(const char* pFieldName);
|
||||
void addAssetDependencyField(const char* pFieldName, const char* pAssetId);
|
||||
|
||||
bool saveAsset();
|
||||
|
||||
/// Declare Console Object.
|
||||
DECLARE_CONOBJECT(AssetBase);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2013 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
|
@ -39,3 +39,31 @@ DefineEngineMethod(AssetBase, getAssetId, String, (), ,
|
|||
{
|
||||
return object->getAssetId();
|
||||
}
|
||||
|
||||
DefineEngineMethod(AssetBase, getAssetDependencyFieldCount, S32, (const char* pFieldName), (""),
|
||||
"Gets the assets' Asset Id. This is only available if the asset was acquired from the asset manager.\n"
|
||||
"@return The assets' Asset Id.\n")
|
||||
{
|
||||
return object->getAssetDependencyFieldCount(pFieldName);
|
||||
}
|
||||
|
||||
DefineEngineMethod(AssetBase, clearAssetDependencyFields, void, (const char* pFieldName), (""),
|
||||
"Gets the assets' Asset Id. This is only available if the asset was acquired from the asset manager.\n"
|
||||
"@return The assets' Asset Id.\n")
|
||||
{
|
||||
object->clearAssetDependencyFields(pFieldName);
|
||||
}
|
||||
|
||||
DefineEngineMethod(AssetBase, addAssetDependencyField, void, (const char* pFieldName, const char* pAssetId), ("", ""),
|
||||
"Gets the assets' Asset Id. This is only available if the asset was acquired from the asset manager.\n"
|
||||
"@return The assets' Asset Id.\n")
|
||||
{
|
||||
object->addAssetDependencyField(pFieldName, pAssetId);
|
||||
}
|
||||
|
||||
DefineEngineMethod(AssetBase, saveAsset, bool, (), ,
|
||||
"Gets the assets' Asset Id. This is only available if the asset was acquired from the asset manager.\n"
|
||||
"@return The assets' Asset Id.\n")
|
||||
{
|
||||
return object->saveAsset();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ private:
|
|||
std::tie(std::get<I + (sizeof...(ArgTs) - sizeof...(TailTs))>(args)...) = defaultArgs;
|
||||
}
|
||||
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1910)
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1910) && (_MSC_VER < 1920)
|
||||
template<typename ...TailTs>
|
||||
struct DodgyVCHelper
|
||||
{
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ VolumetricFogRTManager::~VolumetricFogRTManager()
|
|||
void VolumetricFogRTManager::onSceneRemove()
|
||||
{
|
||||
if (mIsInitialized)
|
||||
mPlatformWindow->getScreenResChangeSignal().remove(this, &VolumetricFogRTManager::ResizeRT);
|
||||
mPlatformWindow->resizeEvent.remove(this, &VolumetricFogRTManager::ResizeRT);
|
||||
}
|
||||
|
||||
void VolumetricFogRTManager::onRemove()
|
||||
|
|
@ -148,7 +148,7 @@ bool VolumetricFogRTManager::Init()
|
|||
}
|
||||
|
||||
mPlatformWindow = cv->getPlatformWindow();
|
||||
mPlatformWindow->getScreenResChangeSignal().notify(this,&VolumetricFogRTManager::ResizeRT);
|
||||
mPlatformWindow->resizeEvent.notify(this,&VolumetricFogRTManager::ResizeRT);
|
||||
|
||||
if (mTargetScale < 1 || GFX->getAdapterType() == Direct3D11)
|
||||
mTargetScale = 1;
|
||||
|
|
@ -205,22 +205,17 @@ U32 VolumetricFogRTManager::DecFogObjects()
|
|||
return mNumFogObjects;
|
||||
}
|
||||
|
||||
void VolumetricFogRTManager::ResizeRT(PlatformWindow* win,bool resize)
|
||||
void VolumetricFogRTManager::ResizeRT( WindowId did, S32 width, S32 height )
|
||||
{
|
||||
mFogHasAnswered = 0;
|
||||
smVolumetricFogRTMResizeSignal.trigger(this, true);
|
||||
}
|
||||
|
||||
void VolumetricFogRTManager::FogAnswered()
|
||||
{
|
||||
mFogHasAnswered++;
|
||||
if (mFogHasAnswered == mNumFogObjects)
|
||||
{
|
||||
if (Resize())
|
||||
smVolumetricFogRTMResizeSignal.trigger(this, false);
|
||||
else
|
||||
Con::errorf("VolumetricFogRTManager::FogAnswered - Error resizing rendertargets!");
|
||||
}
|
||||
if (Resize())
|
||||
smVolumetricFogRTMResizeSignal.trigger(this, false);
|
||||
else
|
||||
Con::errorf("VolumetricFogRTManager::FogAnswered - Error resizing rendertargets!");
|
||||
}
|
||||
|
||||
bool VolumetricFogRTManager::Resize()
|
||||
|
|
@ -279,7 +274,6 @@ S32 VolumetricFogRTManager::setQuality(U32 Quality)
|
|||
|
||||
mTargetScale = Quality;
|
||||
|
||||
mFogHasAnswered = 0;
|
||||
smVolumetricFogRTMResizeSignal.trigger(this, true);
|
||||
|
||||
return mTargetScale;
|
||||
|
|
|
|||
|
|
@ -59,13 +59,12 @@ class VolumetricFogRTManager : public SceneObject
|
|||
static S32 mTargetScale;
|
||||
bool mIsInitialized;
|
||||
U32 mNumFogObjects;
|
||||
U32 mFogHasAnswered;
|
||||
U32 mWidth;
|
||||
U32 mHeight;
|
||||
|
||||
void onRemove();
|
||||
void onSceneRemove();
|
||||
void ResizeRT(PlatformWindow *win, bool resize);
|
||||
void ResizeRT(WindowId did, S32 width, S32 height);
|
||||
|
||||
static VolumetricFogRTMResizeSignal smVolumetricFogRTMResizeSignal;
|
||||
|
||||
|
|
|
|||
|
|
@ -862,7 +862,10 @@ U8 GBitmap::getChanelValueAt(U32 x, U32 y, U32 chan)
|
|||
{
|
||||
ColorI pixelColor = ColorI(255,255,255,255);
|
||||
getColor(x, y, pixelColor);
|
||||
|
||||
if (mInternalFormat == GFXFormatL16)
|
||||
{
|
||||
chan = 0;
|
||||
}
|
||||
switch (chan) {
|
||||
case 0: return pixelColor.red;
|
||||
case 1: return pixelColor.green;
|
||||
|
|
@ -1323,7 +1326,7 @@ U32 GBitmap::getSurfaceSize(const U32 mipLevel) const
|
|||
if (mInternalFormat >= GFXFormatBC1 && mInternalFormat <= GFXFormatBC3)
|
||||
{
|
||||
// From the directX docs:
|
||||
// max(1, width ÷ 4) x max(1, height ÷ 4) x 8(DXT1) or 16(DXT2-5)
|
||||
// max(1, width ÷ 4) x max(1, height ÷ 4) x 8(DXT1) or 16(DXT2-5)
|
||||
|
||||
U32 sizeMultiple = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -1176,6 +1176,10 @@ void GuiTreeViewCtrl::_buildItem( Item* item, U32 tabLevel, bool bForceFullUpdat
|
|||
else
|
||||
item->mState.clear( Item::Filtered );
|
||||
|
||||
//If the item should be hidden from view, check now
|
||||
if (mHiddenItemsList.contains(item->mId))
|
||||
item->mState.set(Item::Filtered);
|
||||
|
||||
// Is this the root item?
|
||||
const bool isRoot = item == mRoot;
|
||||
|
||||
|
|
@ -4477,6 +4481,18 @@ void GuiTreeViewCtrl::setItemFilterException(U32 item, bool isExempted)
|
|||
}
|
||||
}
|
||||
|
||||
void GuiTreeViewCtrl::setItemHidden(U32 item, bool isHidden)
|
||||
{
|
||||
if (isHidden)
|
||||
{
|
||||
mHiddenItemsList.push_back(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
mHiddenItemsList.remove(item);
|
||||
}
|
||||
}
|
||||
|
||||
void GuiTreeViewCtrl::reparentItems(Vector<Item*> selectedItems, Item* newParent)
|
||||
{
|
||||
for (S32 i = 0; i < selectedItems.size(); i++)
|
||||
|
|
@ -5651,6 +5667,26 @@ DefineEngineMethod(GuiTreeViewCtrl, setItemFilterException, void, (U32 item, boo
|
|||
{
|
||||
object->setItemFilterException(item, isExempt);
|
||||
}
|
||||
|
||||
DefineEngineMethod(GuiTreeViewCtrl, setItemHidden, void, (U32 item, bool hidden), (0, true),
|
||||
"Set the pattern by which to filter items in the tree. Only items in the tree whose text "
|
||||
"matches this pattern are displayed.\n\n"
|
||||
"@param pattern New pattern based on which visible items in the tree should be filtered. If empty, all items become visible.\n\n"
|
||||
"@see getFilterText\n"
|
||||
"@see clearFilterText")
|
||||
{
|
||||
object->setItemHidden(item, hidden);
|
||||
}
|
||||
|
||||
DefineEngineMethod(GuiTreeViewCtrl, clearHiddenItems, void, (),,
|
||||
"Set the pattern by which to filter items in the tree. Only items in the tree whose text "
|
||||
"matches this pattern are displayed.\n\n"
|
||||
"@param pattern New pattern based on which visible items in the tree should be filtered. If empty, all items become visible.\n\n"
|
||||
"@see getFilterText\n"
|
||||
"@see clearFilterText")
|
||||
{
|
||||
object->clearHiddenItems();
|
||||
}
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
DefineEngineMethod( GuiTreeViewCtrl, clearFilterText, void, (),,
|
||||
|
|
|
|||
|
|
@ -360,6 +360,7 @@ class GuiTreeViewCtrl : public GuiArrayCtrl
|
|||
bool mDoFilterChildren;
|
||||
|
||||
Vector<U32> mItemFilterExceptionList;
|
||||
Vector<U32> mHiddenItemsList;
|
||||
|
||||
/// If true, a trace of actions taken by the control is logged to the console. Can
|
||||
/// be turned on with the setDebug() script method.
|
||||
|
|
@ -578,6 +579,8 @@ class GuiTreeViewCtrl : public GuiArrayCtrl
|
|||
|
||||
void setFilterChildren(bool doFilter) { mDoFilterChildren = doFilter; }
|
||||
void setItemFilterException(U32 item, bool isExempt);
|
||||
void setItemHidden(U32 item, bool isHidden);
|
||||
void clearHiddenItems() { mHiddenItemsList.clear(); }
|
||||
|
||||
/// Clear the current item filtering pattern.
|
||||
void clearFilterText() { setFilterText( String::EmptyString ); }
|
||||
|
|
|
|||
|
|
@ -447,10 +447,6 @@ AdvancedLightBinManager::LightMaterialInfo* AdvancedLightBinManager::_getLightMa
|
|||
if ( smPSSMDebugRender )
|
||||
shadowMacros.push_back( GFXShaderMacro( "PSSM_DEBUG_RENDER" ) );
|
||||
|
||||
// If its a vector light see if we can enable SSAO.
|
||||
if ( lightType == LightInfo::Vector && smUseSSAOMask )
|
||||
shadowMacros.push_back( GFXShaderMacro( "USE_SSAO_MASK" ) );
|
||||
|
||||
// Now create the material info object.
|
||||
info = new LightMaterialInfo( lightMatName, smLightMatVertex[ lightType ], shadowMacros );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ Material::Material()
|
|||
dMemset(mCellLayout, 0, sizeof(mCellLayout));
|
||||
dMemset(mCellSize, 0, sizeof(mCellSize));
|
||||
dMemset(mNormalMapAtlas, 0, sizeof(mNormalMapAtlas));
|
||||
dMemset(mUseAnisotropic, 0, sizeof(mUseAnisotropic));
|
||||
dMemset(mUseAnisotropic, 1, sizeof(mUseAnisotropic));
|
||||
|
||||
mImposterLimits = Point4F::Zero;
|
||||
|
||||
|
|
|
|||
|
|
@ -38,9 +38,16 @@
|
|||
#include "console/consoleTypes.h"
|
||||
#endif
|
||||
|
||||
#ifndef _MODULE_DEFINITION_H
|
||||
#include "module/moduleDefinition.h"
|
||||
#endif
|
||||
|
||||
#ifndef _STRINGFUNCTIONS_H_
|
||||
#include "core/strings/stringFunctions.h"
|
||||
#endif
|
||||
|
||||
// Script bindings.
|
||||
#include "moduleManager_ScriptBinding.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_CONOBJECT( ModuleManager );
|
||||
|
|
@ -65,6 +72,25 @@ S32 QSORT_CALLBACK moduleDefinitionVersionIdSort( const void* a, const void* b )
|
|||
return versionId1 > versionId2 ? -1 : versionId1 < versionId2 ? 1 : 0;
|
||||
}
|
||||
|
||||
S32 QSORT_CALLBACK moduleDependencySort(const void* a, const void* b)
|
||||
{
|
||||
// Fetch module definitions.
|
||||
ModuleDefinition* pDefinition1 = *(ModuleDefinition * *)a;
|
||||
ModuleDefinition* pDefinition2 = *(ModuleDefinition * *)b;
|
||||
|
||||
// Fetch version Ids.
|
||||
ModuleDefinition::typeModuleDependencyVector moduleDependencies = pDefinition1->getDependencies();
|
||||
bool foundDependant = false;
|
||||
for (ModuleDefinition::typeModuleDependencyVector::const_iterator dependencyItr = moduleDependencies.begin(); dependencyItr != moduleDependencies.end(); ++dependencyItr)
|
||||
{
|
||||
if (dStrcmp(dependencyItr->mModuleId, pDefinition2->getModuleId())
|
||||
&& (dependencyItr->mVersionId == pDefinition2->getVersionId()))
|
||||
foundDependant = true;
|
||||
}
|
||||
|
||||
return foundDependant ? 1 : -1;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
ModuleManager::ModuleManager() :
|
||||
|
|
@ -1087,6 +1113,7 @@ void ModuleManager::findModules( const bool loadedOnly, typeConstModuleDefinitio
|
|||
moduleDefinitions.push_back( pModuleDefinition );
|
||||
}
|
||||
}
|
||||
dQsort(moduleDefinitions.address(), moduleDefinitions.size(), sizeof(ModuleDefinition*), moduleDependencySort);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -314,3 +314,76 @@ S32 PostEffectManager::_effectPrioritySort( PostEffect* const *e1, PostEffect* c
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void PostEffectManager::dumpActivePostFX()
|
||||
{
|
||||
EffectVector effects;
|
||||
|
||||
for (U32 i = 0; i < mEndOfFrameList.size(); i++)
|
||||
{
|
||||
PostEffect* effect = mEndOfFrameList[i];
|
||||
|
||||
if(effect->isEnabled())
|
||||
effects.push_back(effect);
|
||||
}
|
||||
|
||||
for (U32 i = 0; i < mAfterDiffuseList.size(); i++)
|
||||
{
|
||||
PostEffect* effect = mAfterDiffuseList[i];
|
||||
|
||||
if (effect->isEnabled())
|
||||
effects.push_back(effect);
|
||||
}
|
||||
|
||||
|
||||
// Now check the bin maps.
|
||||
EffectMap::Iterator mapIter = mAfterBinMap.begin();
|
||||
for (; mapIter != mAfterBinMap.end(); mapIter++)
|
||||
{
|
||||
EffectVector& ef = mapIter->value;
|
||||
|
||||
for (U32 i = 0; i < ef.size(); i++)
|
||||
{
|
||||
PostEffect* effect = ef[i];
|
||||
|
||||
if (effect->isEnabled())
|
||||
effects.push_back(effect);
|
||||
}
|
||||
}
|
||||
|
||||
mapIter = mBeforeBinMap.begin();
|
||||
for (; mapIter != mBeforeBinMap.end(); mapIter++)
|
||||
{
|
||||
EffectVector& ef = mapIter->value;
|
||||
|
||||
for (U32 i = 0; i < ef.size(); i++)
|
||||
{
|
||||
PostEffect* effect = ef[i];
|
||||
|
||||
if (effect->isEnabled())
|
||||
effects.push_back(effect);
|
||||
}
|
||||
}
|
||||
|
||||
// Resort the effects by priority.
|
||||
effects.sort(&_effectPrioritySort);
|
||||
|
||||
Con::printf("PostEffectManager::dumpActivePostFX() - Beginning Dump");
|
||||
|
||||
for (U32 i = 0; i < effects.size(); i++)
|
||||
{
|
||||
PostEffect* effect = effects[i];
|
||||
|
||||
if (effect->isEnabled())
|
||||
{
|
||||
Con::printf("%s", effect->getName());
|
||||
}
|
||||
}
|
||||
|
||||
Con::printf("PostEffectManager::dumpActivePostFX() - Ending Dump");
|
||||
}
|
||||
|
||||
DefineEngineFunction(dumpActivePostFX, void, (),, "")
|
||||
{
|
||||
PFXMGR->dumpActivePostFX();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,9 +132,11 @@ public:
|
|||
|
||||
// For ManagedSingleton.
|
||||
static const char* getSingletonName() { return "PostEffectManager"; }
|
||||
|
||||
void dumpActivePostFX();
|
||||
};
|
||||
|
||||
/// Returns the PostEffectManager singleton.
|
||||
#define PFXMGR ManagedSingleton<PostEffectManager>::instance()
|
||||
|
||||
#endif // _POSTEFFECTMANAGER_H_
|
||||
#endif // _POSTEFFECTMANAGER_H_
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
#include "renderInstance/renderDeferredMgr.h"
|
||||
#include "math/mPolyhedron.impl.h"
|
||||
#include "gfx/gfxTransformSaver.h"
|
||||
|
||||
#include "lighting/advanced/advancedLightBinManager.h" //for ssao
|
||||
#include "gfx/gfxDebugEvent.h"
|
||||
#include "shaderGen/shaderGenVars.h"
|
||||
#include "materials/shaderData.h"
|
||||
|
|
@ -752,6 +752,24 @@ void RenderProbeMgr::render( SceneRenderState *state )
|
|||
mProbeArrayEffect->setShaderMacro("SKYLIGHT_ONLY", "1");
|
||||
else
|
||||
mProbeArrayEffect->setShaderMacro("SKYLIGHT_ONLY", "0");
|
||||
|
||||
//ssao mask
|
||||
if (AdvancedLightBinManager::smUseSSAOMask)
|
||||
{
|
||||
//find ssaoMask
|
||||
NamedTexTargetRef ssaoTarget = NamedTexTarget::find("ssaoMask");
|
||||
GFXTextureObject* pTexObj = ssaoTarget->getTexture();
|
||||
if (pTexObj)
|
||||
{
|
||||
mProbeArrayEffect->setShaderMacro("USE_SSAO_MASK");
|
||||
mProbeArrayEffect->setTexture(6, pTexObj);
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mProbeArrayEffect->setTexture(6, NULL);
|
||||
}
|
||||
|
||||
mProbeArrayEffect->setTexture(3, mBRDFTexture);
|
||||
mProbeArrayEffect->setCubemapArrayTexture(4, mPrefilterArray);
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@
|
|||
#include "T3D/physics/physicsCollision.h"
|
||||
#include "console/engineAPI.h"
|
||||
|
||||
#include "console/engineAPI.h"
|
||||
#include "T3D/assets/TerrainMaterialAsset.h"
|
||||
using namespace Torque;
|
||||
|
||||
IMPLEMENT_CO_NETOBJECT_V1(TerrainBlock);
|
||||
|
|
@ -207,6 +207,9 @@ TerrainBlock::TerrainBlock()
|
|||
mNetFlags.set(Ghostable | ScopeAlways);
|
||||
mIgnoreZodiacs = false;
|
||||
zode_primBuffer = 0;
|
||||
|
||||
mTerrainAsset = StringTable->EmptyString();
|
||||
mTerrainAssetId = StringTable->EmptyString();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -352,17 +355,90 @@ void TerrainBlock::setFile(const Resource<TerrainFile>& terr)
|
|||
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;
|
||||
|
||||
setFile(file);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TerrainBlock::save(const char *filename)
|
||||
{
|
||||
return mFile->save(filename);
|
||||
}
|
||||
|
||||
bool TerrainBlock::saveAsset()
|
||||
{
|
||||
if (!mTerrainAsset.isNull() && mTerrainAsset->isAssetValid())
|
||||
{
|
||||
mTerrainAsset->clearAssetDependencyFields("terrainMaterailAsset");
|
||||
|
||||
AssetQuery* pAssetQuery = new AssetQuery();
|
||||
AssetDatabase.findAssetType(pAssetQuery, "TerrainMaterialAsset");
|
||||
|
||||
TerrainBlock* clientTerr = static_cast<TerrainBlock*>(getClientObject());
|
||||
|
||||
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)
|
||||
{
|
||||
mTerrainAsset->addAssetDependencyField("terrainMaterailAsset", terrMatAsset.getAssetId());
|
||||
}
|
||||
}
|
||||
|
||||
terrMatAsset.clear();
|
||||
}
|
||||
|
||||
pAssetQuery->destroySelf();
|
||||
|
||||
bool saveAssetSuccess = mTerrainAsset->saveAsset();
|
||||
|
||||
if (!saveAssetSuccess)
|
||||
return false;
|
||||
|
||||
return mFile->save(mTerrainAsset->getTerrainFilePath());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TerrainBlock::_setTerrainFile( void *obj, const char *index, const char *data )
|
||||
{
|
||||
static_cast<TerrainBlock*>( obj )->setFile( FileName( data ) );
|
||||
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()
|
||||
{
|
||||
if ( !mFile )
|
||||
|
|
@ -901,31 +977,50 @@ bool TerrainBlock::onAdd()
|
|||
if(!Parent::onAdd())
|
||||
return false;
|
||||
|
||||
if ( mTerrFileName.isEmpty() )
|
||||
Resource<TerrainFile> terr;
|
||||
|
||||
if (!mTerrainAsset.isNull())
|
||||
{
|
||||
mTerrFileName = Con::getVariable( "$Client::MissionFile" );
|
||||
String terrainDirectory( Con::getVariable( "$pref::Directories::Terrain" ) );
|
||||
if ( terrainDirectory.isEmpty() )
|
||||
terr = mTerrainAsset->getTerrainResource();
|
||||
|
||||
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;
|
||||
materials.push_back( "warning_material" );
|
||||
TerrainFile::create( &mTerrFileName, 256, materials );
|
||||
mFile = terr;
|
||||
}
|
||||
|
||||
Resource<TerrainFile> terr = ResourceManager::get().load( mTerrFileName );
|
||||
if(terr == NULL)
|
||||
else
|
||||
{
|
||||
if(isClientObject())
|
||||
NetConnection::setLastError("You are missing a file needed to play this mission: %s", mTerrFileName.c_str());
|
||||
return false;
|
||||
}
|
||||
if (mTerrFileName.isEmpty())
|
||||
{
|
||||
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 )
|
||||
{
|
||||
|
|
@ -1125,7 +1220,11 @@ void TerrainBlock::setScale( const VectorF &scale )
|
|||
void TerrainBlock::initPersistFields()
|
||||
{
|
||||
addGroup( "Media" );
|
||||
|
||||
|
||||
addProtectedField("terrainAsset", TypeTerrainAssetPtr, Offset(mTerrainAsset, TerrainBlock),
|
||||
&TerrainBlock::_setTerrainAsset, &defaultProtectedGetFn,
|
||||
"The source terrain data asset.");
|
||||
|
||||
addProtectedField( "terrainFile", TypeStringFilename, Offset( mTerrFileName, TerrainBlock ),
|
||||
&TerrainBlock::_setTerrainFile, &defaultProtectedGetFn,
|
||||
"The source terrain data file." );
|
||||
|
|
@ -1310,6 +1409,16 @@ DefineEngineMethod( TerrainBlock, save, bool, ( const char* 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.")
|
||||
//{
|
||||
// char filename[256];
|
||||
|
|
|
|||
|
|
@ -50,7 +50,12 @@
|
|||
#include "gfx/gfxPrimitiveBuffer.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef _ASSET_PTR_H_
|
||||
#include "assets/assetPtr.h"
|
||||
#endif
|
||||
#ifndef TERRAINASSET_H
|
||||
#include "T3D/assets/TerrainAsset.h"
|
||||
#endif
|
||||
|
||||
class GBitmap;
|
||||
class TerrainBlock;
|
||||
|
|
@ -120,6 +125,9 @@ protected:
|
|||
|
||||
///
|
||||
FileName mTerrFileName;
|
||||
|
||||
AssetPtr<TerrainAsset> mTerrainAsset;
|
||||
StringTableEntry mTerrainAssetId;
|
||||
|
||||
/// The maximum detail distance found in the material list.
|
||||
F32 mMaxDetailDistance;
|
||||
|
|
@ -241,6 +249,7 @@ protected:
|
|||
|
||||
// Protected fields
|
||||
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 _setBaseTexSize(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);
|
||||
|
||||
bool setTerrainAsset(const StringTableEntry terrainAssetId);
|
||||
|
||||
bool save(const char* filename);
|
||||
bool saveAsset();
|
||||
|
||||
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 "
|
||||
"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();
|
||||
|
||||
// Gotta call this at least once or it won't get created!
|
||||
|
|
|
|||
|
|
@ -353,7 +353,7 @@ void PlatformWindowManagerSDL::_process()
|
|||
|
||||
char* fileName = evt.drop.file;
|
||||
|
||||
if (!Platform::isFile(fileName))
|
||||
if (!Platform::isDirectory(fileName) && !Platform::isFile(fileName))
|
||||
break;
|
||||
|
||||
Con::executef("onDropFile", StringTable->insert(fileName));
|
||||
|
|
|
|||
|
|
@ -277,7 +277,7 @@ void Win32Window::setVideoMode( const GFXVideoMode &mode )
|
|||
mOwningManager->raiseCurtain();
|
||||
|
||||
SetForegroundWindow( getHWND() );
|
||||
getScreenResChangeSignal().trigger( this, true );
|
||||
resizeEvent.trigger( this, true );
|
||||
}
|
||||
|
||||
bool Win32Window::clearFullscreen()
|
||||
|
|
@ -806,7 +806,7 @@ LRESULT PASCAL Win32Window::WindowProc( HWND hWnd, UINT message, WPARAM wParam,
|
|||
window->getGFXTarget()->resetMode();
|
||||
}
|
||||
|
||||
window->getScreenResChangeSignal().trigger(window, true);
|
||||
window->resizeEvent.trigger(window, true);
|
||||
}
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,73 @@
|
|||
//----------------------------------------------------------------------------
|
||||
// Phase 1
|
||||
//----------------------------------------------------------------------------
|
||||
function clientCmdMissionStartPhase1(%seq, %missionName)
|
||||
$pref::Client::EnableDatablockCache = true;
|
||||
$pref::Client::DatablockCacheFilename = "data/cache/client/datablock_cache_c.dbc";
|
||||
|
||||
function clientCmdMissionStartPhase1_LoadCache(%seq, %missionName)
|
||||
{
|
||||
if ($pref::Client::EnableDatablockCache && $loadFromDatablockCache)
|
||||
{
|
||||
if (!$pref::Video::disableVerticalSync)
|
||||
{
|
||||
warn("Disabling Vertical Sync during datablock cache load to avoid significant slowdown.");
|
||||
$AFX_tempDisableVSync = true;
|
||||
|
||||
$pref::Video::disableVerticalSync = true;
|
||||
Canvas.resetVideoMode();
|
||||
}
|
||||
|
||||
echo("<<<< Loading Datablocks From Cache >>>>");
|
||||
if (ServerConnection.loadDatablockCache_Begin())
|
||||
{
|
||||
schedule(10, 0, "updateLoadDatablockCacheProgress", %seq, %missionName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateLoadDatablockCacheProgress(%seq, %missionName)
|
||||
{
|
||||
if (ServerConnection.loadDatablockCache_Continue())
|
||||
{
|
||||
$loadDatablockCacheProgressThread = schedule(10, 0, "updateLoadDatablockCacheProgress", %seq, %missionName);
|
||||
return;
|
||||
}
|
||||
|
||||
if ($AFX_tempDisableVSync)
|
||||
{
|
||||
warn("Restoring Vertical Sync setting.");
|
||||
$AFX_tempDisableVSync = false;
|
||||
|
||||
$pref::Video::disableVerticalSync = false;
|
||||
Canvas.resetVideoMode();
|
||||
}
|
||||
|
||||
echo("<<<< Finished Loading Datablocks From Cache >>>>");
|
||||
clientCmdMissionStartPhase2(%seq,%missionName);
|
||||
}
|
||||
|
||||
function updateLoadDatablockCacheProgress(%seq, %missionName)
|
||||
{
|
||||
if (ServerConnection.loadDatablockCache_Continue())
|
||||
{
|
||||
$loadDatablockCacheProgressThread = schedule(10, 0, "updateLoadDatablockCacheProgress", %seq, %missionName);
|
||||
return;
|
||||
}
|
||||
|
||||
if ($AFX_tempDisableVSync)
|
||||
{
|
||||
warn("Restoring Vertical Sync setting.");
|
||||
$AFX_tempDisableVSync = false;
|
||||
|
||||
$pref::Video::disableVerticalSync = false;
|
||||
Canvas.resetVideoMode();
|
||||
}
|
||||
|
||||
echo("<<<< Finished Loading Datablocks From Cache >>>>");
|
||||
clientCmdMissionStartPhase2(%seq,%missionName);
|
||||
}
|
||||
|
||||
function clientCmdMissionStartPhase1(%seq, %missionName, %cache_crc)
|
||||
{
|
||||
// These need to come after the cls.
|
||||
echo ("*** New Mission: " @ %missionName);
|
||||
|
|
@ -61,6 +127,56 @@ function clientCmdMissionStartPhase1(%seq, %missionName)
|
|||
PostFXManager::settingsApplyDefaultPreset();
|
||||
}
|
||||
|
||||
$loadFromDatablockCache = false;
|
||||
if ($pref::Client::EnableDatablockCache)
|
||||
{
|
||||
%cache_filename = $pref::Client::DatablockCacheFilename;
|
||||
|
||||
// if cache CRC is provided, check for validity
|
||||
if (%cache_crc !$= "")
|
||||
{
|
||||
// check for existence of cache file
|
||||
if (isFile(%cache_filename))
|
||||
{
|
||||
// here we are not comparing the CRC of the cache itself, but the CRC of
|
||||
// the server cache (stored in the header) when these datablocks were
|
||||
// transmitted.
|
||||
%my_cache_crc = extractDatablockCacheCRC(%cache_filename);
|
||||
echo("<<<< client cache CRC:" SPC %my_cache_crc SPC ">>>>");
|
||||
echo("<<<< comparing CRC codes:" SPC "s:" @ %cache_crc SPC "c:" @ %my_cache_crc SPC ">>>>");
|
||||
if (%my_cache_crc == %cache_crc)
|
||||
{
|
||||
echo("<<<< cache CRC codes match, datablocks will be loaded from local cache. >>>>");
|
||||
$loadFromDatablockCache = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("<<<< cache CRC codes differ, datablocks will be transmitted and cached. >>>>" SPC %cache_crc);
|
||||
setDatablockCacheCRC(%cache_crc);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("<<<< client datablock cache does not exist, datablocks will be transmitted and cached. >>>>");
|
||||
setDatablockCacheCRC(%cache_crc);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("<<<< server datablock caching is disabled, datablocks will be transmitted. >>>>");
|
||||
}
|
||||
if ($loadFromDatablockCache)
|
||||
{
|
||||
// skip datablock transmission and initiate a cache load
|
||||
commandToServer('MissionStartPhase1Ack_UseCache', %seq);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (%cache_crc !$= "")
|
||||
{
|
||||
echo("<<<< client datablock caching is disabled, datablocks will be transmitted. >>>>");
|
||||
}
|
||||
|
||||
onMissionDownloadPhase("LOADING DATABLOCKS");
|
||||
|
||||
commandToServer('MissionStartPhase1Ack', %seq);
|
||||
|
|
@ -164,7 +280,7 @@ function connect(%server)
|
|||
{
|
||||
%conn = new GameConnection(ServerConnection);
|
||||
RootGroup.add(ServerConnection);
|
||||
%conn.setConnectArgs($pref::Player::Name);
|
||||
%conn.setConnectArgs($pref::Player::Name, $ConncetInfoKey);
|
||||
%conn.setJoinPassword($Client::Password);
|
||||
%conn.connect(%server);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,8 +46,6 @@ $Pref::Server::ConnectionError =
|
|||
// overrides pref::net::port for dedicated servers
|
||||
$Pref::Server::Port = 28000;
|
||||
|
||||
$Pref::Server::EnableDatablockCache = true;
|
||||
$Pref::Server::DatablockCacheFilename = "core/clientServer/scripts/server/afx/cache/afx_datablock_cache.dbc";
|
||||
|
||||
// If the password is set, clients must provide it in order
|
||||
// to connect to the server
|
||||
|
|
|
|||
|
|
@ -38,8 +38,26 @@
|
|||
//----------------------------------------------------------------------------
|
||||
// Phase 1
|
||||
//----------------------------------------------------------------------------
|
||||
$Pref::Server::EnableDatablockCache = true;
|
||||
$pref::Server::DatablockCacheFilename = "data/cache/server/datablock_cache_c.dbc";
|
||||
function GameConnection::loadMission(%this)
|
||||
{
|
||||
%cache_crc = "";
|
||||
|
||||
if ($Pref::Server::EnableDatablockCache)
|
||||
{
|
||||
if (!isDatablockCacheSaved())
|
||||
{
|
||||
echo("<<<< saving server datablock cache >>>>");
|
||||
%this.saveDatablockCache();
|
||||
}
|
||||
|
||||
if (isFile($Pref::Server::DatablockCacheFilename))
|
||||
{
|
||||
%cache_crc = getDatablockCacheCRC();
|
||||
echo(" <<<< sending CRC to client:" SPC %cache_crc SPC ">>>>");
|
||||
}
|
||||
}
|
||||
// Send over the information that will display the server info
|
||||
// when we learn it got there, we'll send the data blocks
|
||||
%this.currentPhase = 0;
|
||||
|
|
@ -50,12 +68,41 @@ function GameConnection::loadMission(%this)
|
|||
}
|
||||
else
|
||||
{
|
||||
commandToClient(%this, 'MissionStartPhase1', $missionSequence, $Server::MissionFile);
|
||||
commandToClient(%this, 'MissionStartPhase1', $missionSequence, $Server::MissionFile, %cache_crc);
|
||||
|
||||
echo("*** Sending mission load to client: " @ $Server::MissionFile);
|
||||
}
|
||||
}
|
||||
|
||||
function serverCmdMissionStartPhase1Ack_UseCache(%client, %seq)
|
||||
{
|
||||
echo("<<<< client will load datablocks from a cache >>>>");
|
||||
echo(" <<<< skipping datablock transmission >>>>");
|
||||
|
||||
// Make sure to ignore calls from a previous mission load
|
||||
if (%seq != $missionSequence || !$MissionRunning)
|
||||
return;
|
||||
if (%client.currentPhase != 0)
|
||||
return;
|
||||
%client.currentPhase = 1;
|
||||
|
||||
// Start with the CRC
|
||||
%client.setMissionCRC( $missionCRC );
|
||||
|
||||
%client.onBeginDatablockCacheLoad($missionSequence);
|
||||
}
|
||||
|
||||
function GameConnection::onBeginDatablockCacheLoad( %this, %missionSequence )
|
||||
{
|
||||
// Make sure to ignore calls from a previous mission load
|
||||
if (%missionSequence != $missionSequence)
|
||||
return;
|
||||
if (%this.currentPhase != 1)
|
||||
return;
|
||||
%this.currentPhase = 1.5;
|
||||
commandToClient(%this, 'MissionStartPhase1_LoadCache', $missionSequence, $Server::MissionFile);
|
||||
}
|
||||
|
||||
function serverCmdMissionStartPhase1Ack(%client, %seq)
|
||||
{
|
||||
// Make sure to ignore calls from a previous mission load
|
||||
|
|
@ -157,14 +204,6 @@ function serverCmdMissionStartPhase3Ack(%client, %seq)
|
|||
// Set the control object to the default camera
|
||||
if (!isObject(%client.camera))
|
||||
{
|
||||
if(!isObject(Observer))
|
||||
{
|
||||
datablock CameraData(Observer)
|
||||
{
|
||||
mode = "Observer";
|
||||
};
|
||||
}
|
||||
|
||||
//if (isDefined("$Game::DefaultCameraClass"))
|
||||
%client.camera = spawnObject("Camera", Observer);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -204,10 +204,11 @@ function onServerCreated()
|
|||
|
||||
loadDatablockFiles( DatablockFilesList, true );
|
||||
|
||||
callOnModules("onServerScriptExec", "Core");
|
||||
callOnModules("onServerScriptExec", "Game");
|
||||
|
||||
// Keep track of when the game started
|
||||
$Game::StartTime = $Sim::Time;
|
||||
|
||||
onServerCreatedAFX();
|
||||
}
|
||||
|
||||
/// Shut down the server
|
||||
|
|
@ -283,6 +284,9 @@ function onServerDestroyed()
|
|||
MissionCleanup.delete();
|
||||
|
||||
clearServerPaths();
|
||||
|
||||
if ($Pref::Server::EnableDatablockCache)
|
||||
resetDatablockCache();
|
||||
}
|
||||
|
||||
/// Guid list maintenance functions
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
new ShaderData( BasicRibbonShader )
|
||||
singleton ShaderData( BasicRibbonShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/ribbons/basicRibbonShaderV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/ribbons/basicRibbonShaderP.hlsl";
|
||||
|
|
@ -26,7 +26,7 @@ singleton CustomMaterial( BasicRibbonMat )
|
|||
preload = true;
|
||||
};
|
||||
|
||||
new ShaderData( TexturedRibbonShader )
|
||||
singleton ShaderData( TexturedRibbonShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/ribbons/texRibbonShaderV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/ribbons/texRibbonShaderP.hlsl";
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
// Vector Light State
|
||||
new GFXStateBlockData( AL_VectorLightState )
|
||||
singleton GFXStateBlockData( AL_VectorLightState )
|
||||
{
|
||||
blendDefined = true;
|
||||
blendEnable = true;
|
||||
|
|
@ -48,9 +48,7 @@ new GFXStateBlockData( AL_VectorLightState )
|
|||
mSamplerNames[1] = "shadowMap";
|
||||
samplerStates[2] = SamplerClampPoint; // Shadow Map (Do not change this to linear, as all cards can not filter equally.)
|
||||
mSamplerNames[2] = "dynamicShadowMap";
|
||||
samplerStates[3] = SamplerClampLinear; // SSAO Mask
|
||||
mSamplerNames[3] = "ssaoMask";
|
||||
samplerStates[4] = SamplerWrapPoint; // Random Direction Map
|
||||
samplerStates[3] = SamplerWrapPoint; // Random Direction Map
|
||||
|
||||
cullDefined = true;
|
||||
cullMode = GFXCullNone;
|
||||
|
|
@ -61,7 +59,7 @@ new GFXStateBlockData( AL_VectorLightState )
|
|||
};
|
||||
|
||||
// Vector Light Material
|
||||
new ShaderData( AL_VectorLightShader )
|
||||
singleton shaderData( AL_VectorLightShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/farFrustumQuadV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/vectorLightP.hlsl";
|
||||
|
|
@ -72,11 +70,10 @@ new ShaderData( AL_VectorLightShader )
|
|||
samplerNames[0] = "$deferredBuffer";
|
||||
samplerNames[1] = "$shadowMap";
|
||||
samplerNames[2] = "$dynamicShadowMap";
|
||||
samplerNames[3] = "$ssaoMask";
|
||||
samplerNames[4] = "$gTapRotationTex";
|
||||
samplerNames[5] = "$lightBuffer";
|
||||
samplerNames[6] = "$colorBuffer";
|
||||
samplerNames[7] = "$matInfoBuffer";
|
||||
samplerNames[3] = "$gTapRotationTex";
|
||||
samplerNames[4] = "$lightBuffer";
|
||||
samplerNames[5] = "$colorBuffer";
|
||||
samplerNames[6] = "$matInfoBuffer";
|
||||
|
||||
pixVersion = 3.0;
|
||||
};
|
||||
|
|
@ -89,7 +86,6 @@ new CustomMaterial( AL_VectorLightMaterial )
|
|||
sampler["deferredBuffer"] = "#deferred";
|
||||
sampler["shadowMap"] = "$dynamiclight";
|
||||
sampler["dynamicShadowMap"] = "$dynamicShadowMap";
|
||||
sampler["ssaoMask"] = "#ssaoMask";
|
||||
sampler["lightBuffer"] = "#specularLighting";
|
||||
sampler["colorBuffer"] = "#color";
|
||||
sampler["matInfoBuffer"] = "#matinfo";
|
||||
|
|
@ -102,7 +98,7 @@ new CustomMaterial( AL_VectorLightMaterial )
|
|||
//------------------------------------------------------------------------------
|
||||
|
||||
// Convex-geometry light states
|
||||
new GFXStateBlockData( AL_ConvexLightState )
|
||||
singleton GFXStateBlockData( AL_ConvexLightState )
|
||||
{
|
||||
blendDefined = true;
|
||||
blendEnable = true;
|
||||
|
|
@ -140,7 +136,7 @@ new GFXStateBlockData( AL_ConvexLightState )
|
|||
};
|
||||
|
||||
// Point Light Material
|
||||
new ShaderData( AL_PointLightShader )
|
||||
singleton shaderData( AL_PointLightShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/convexGeometryV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/pointLightP.hlsl";
|
||||
|
|
@ -179,7 +175,7 @@ new CustomMaterial( AL_PointLightMaterial )
|
|||
};
|
||||
|
||||
// Spot Light Material
|
||||
new ShaderData( AL_SpotLightShader )
|
||||
singleton shaderData( AL_SpotLightShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/convexGeometryV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/spotLightP.hlsl";
|
||||
|
|
@ -256,7 +252,7 @@ new Material( AL_DefaultShadowMaterial )
|
|||
};
|
||||
|
||||
// Particle System Point Light Material
|
||||
new ShaderData( AL_ParticlePointLightShader )
|
||||
singleton shaderData( AL_ParticlePointLightShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/particlePointLightV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/particlePointLightP.hlsl";
|
||||
|
|
@ -281,7 +277,7 @@ new CustomMaterial( AL_ParticlePointLightMaterial )
|
|||
};
|
||||
|
||||
//Probe Processing
|
||||
new ShaderData( IrradianceShader )
|
||||
singleton shaderData( IrradianceShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/cubemapV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/irradianceP.hlsl";
|
||||
|
|
@ -294,7 +290,7 @@ new ShaderData( IrradianceShader )
|
|||
pixVersion = 3.0;
|
||||
};
|
||||
|
||||
new ShaderData( PrefiterCubemapShader )
|
||||
singleton shaderData( PrefiterCubemapShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/cubemapV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/prefilterP.hlsl";
|
||||
|
|
@ -322,6 +318,7 @@ singleton ShaderData( PFX_ReflectionProbeArray )
|
|||
samplerNames[3] = "$BRDFTexture";
|
||||
samplerNames[4] = "$specularCubemapAR";
|
||||
samplerNames[5] = "$irradianceCubemapAR";
|
||||
samplerNames[6] = "$ssaoMask";
|
||||
|
||||
pixVersion = 2.0;
|
||||
};
|
||||
|
|
@ -350,4 +347,5 @@ singleton GFXStateBlockData( PFX_ReflectionProbeArrayStateBlock )
|
|||
samplerStates[3] = SamplerClampPoint;
|
||||
samplerStates[4] = SamplerClampLinear;
|
||||
samplerStates[5] = SamplerClampLinear;
|
||||
samplerStates[6] = SamplerClampPoint;
|
||||
};
|
||||
|
|
@ -9,7 +9,7 @@ singleton ShaderData( DeferredColorShader )
|
|||
pixVersion = 2.0;
|
||||
};
|
||||
|
||||
new GFXStateBlockData( AL_DeferredCaptureState : PFX_DefaultStateBlock )
|
||||
singleton GFXStateBlockData( AL_DeferredCaptureState : PFX_DefaultStateBlock )
|
||||
{
|
||||
blendEnable = false;
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ new GFXStateBlockData( AL_DeferredCaptureState : PFX_DefaultStateBlock )
|
|||
samplerStates[4] = SamplerWrapLinear;
|
||||
};
|
||||
|
||||
new ShaderData( AL_ProbeShader )
|
||||
singleton shaderData( AL_ProbeShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/advanced/probeShadingP.hlsl";
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
new ShaderData(BlurDepthShader)
|
||||
singleton shaderData(BlurDepthShader)
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/lighting/shadowMap/boxFilterV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/lighting/shadowMap/boxFilterP.hlsl";
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ singleton PostEffect( VolFogGlowPostFx )
|
|||
texture[0] = "$backbuffer";
|
||||
target = "$outTex";
|
||||
targetScale = "0.5 0.5";
|
||||
isEnabled = true;
|
||||
isEnabled = false;
|
||||
// Blur vertically
|
||||
new PostEffect()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -328,7 +328,7 @@ function HDRPostFX::onAdd( %this )
|
|||
PostFXManager.registerPostEffect(%this);
|
||||
|
||||
//HDR should really be on at all times
|
||||
%this.enable();
|
||||
//%this.enable();
|
||||
|
||||
$HDRPostFX::enableToneMapping = 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,8 +35,6 @@ singleton ShaderData( PFX_PassthruShader )
|
|||
|
||||
function postFXInit()
|
||||
{
|
||||
exec("core/postFX/guis/postFxManager.gui");
|
||||
|
||||
//Load the core postFX files themselves
|
||||
if (!$Server::Dedicated)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ $sequence = 16;
|
|||
|
||||
|
||||
// Common stateblock definitions
|
||||
new GFXSamplerStateData(SamplerClampLinear)
|
||||
singleton GFXSamplerStateData(SamplerClampLinear)
|
||||
{
|
||||
textureColorOp = GFXTOPModulate;
|
||||
addressModeU = GFXAddressClamp;
|
||||
|
|
@ -45,7 +45,7 @@ new GFXSamplerStateData(SamplerClampLinear)
|
|||
mipFilter = GFXTextureFilterLinear;
|
||||
};
|
||||
|
||||
new GFXSamplerStateData(SamplerClampPoint)
|
||||
singleton GFXSamplerStateData(SamplerClampPoint)
|
||||
{
|
||||
textureColorOp = GFXTOPModulate;
|
||||
addressModeU = GFXAddressClamp;
|
||||
|
|
@ -56,7 +56,7 @@ new GFXSamplerStateData(SamplerClampPoint)
|
|||
mipFilter = GFXTextureFilterPoint;
|
||||
};
|
||||
|
||||
new GFXSamplerStateData(SamplerWrapLinear)
|
||||
singleton GFXSamplerStateData(SamplerWrapLinear)
|
||||
{
|
||||
textureColorOp = GFXTOPModulate;
|
||||
addressModeU = GFXTextureAddressWrap;
|
||||
|
|
@ -67,7 +67,7 @@ new GFXSamplerStateData(SamplerWrapLinear)
|
|||
mipFilter = GFXTextureFilterLinear;
|
||||
};
|
||||
|
||||
new GFXSamplerStateData(SamplerWrapPoint)
|
||||
singleton GFXSamplerStateData(SamplerWrapPoint)
|
||||
{
|
||||
textureColorOp = GFXTOPModulate;
|
||||
addressModeU = GFXTextureAddressWrap;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
new GFXStateBlockData( ScatterSkySBData )
|
||||
singleton GFXStateBlockData( ScatterSkySBData )
|
||||
{
|
||||
cullMode = "GFXCullNone";
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ singleton ShaderData( OffscreenParticleCompositeShaderData )
|
|||
//-----------------------------------------------------------------------------
|
||||
// Planar Reflection
|
||||
//-----------------------------------------------------------------------------
|
||||
new ShaderData( ReflectBump )
|
||||
singleton shaderData( ReflectBump )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/planarReflectBumpV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/planarReflectBumpP.hlsl";
|
||||
|
|
@ -72,7 +72,7 @@ new ShaderData( ReflectBump )
|
|||
pixVersion = 2.0;
|
||||
};
|
||||
|
||||
new ShaderData( Reflect )
|
||||
singleton shaderData( Reflect )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/planarReflectV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/planarReflectP.hlsl";
|
||||
|
|
@ -89,7 +89,7 @@ new ShaderData( Reflect )
|
|||
//-----------------------------------------------------------------------------
|
||||
// fxFoliageReplicator
|
||||
//-----------------------------------------------------------------------------
|
||||
new ShaderData( fxFoliageReplicatorShader )
|
||||
singleton shaderData( fxFoliageReplicatorShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/fxFoliageReplicatorV.hlsl";
|
||||
DXPixelShaderFile = $Core::CommonShaderPath @ "/fxFoliageReplicatorP.hlsl";
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ singleton ShaderData( WaterShader )
|
|||
pixVersion = 3.0;
|
||||
};
|
||||
|
||||
new GFXSamplerStateData(WaterSampler)
|
||||
singleton GFXSamplerStateData(WaterSampler)
|
||||
{
|
||||
textureColorOp = GFXTOPModulate;
|
||||
addressModeU = GFXAddressWrap;
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ struct Surface
|
|||
|
||||
float NdotV; // cos(angle between normal and view vector)
|
||||
vec3 f0; // fresnel value (rgb)
|
||||
float f90;
|
||||
vec3 albedo; // diffuse light absorbtion value (rgb)
|
||||
vec3 R; // reflection vector
|
||||
vec3 F; // fresnel term computed from f0, N and V
|
||||
|
|
@ -93,8 +94,8 @@ void updateSurface(inout Surface surface)
|
|||
surface.albedo = surface.baseColor.rgb * (1.0 - surface.metalness);
|
||||
surface.f0 = lerp(vec3(0.04f), surface.baseColor.rgb, surface.metalness);
|
||||
surface.R = -reflect(surface.V, surface.N);
|
||||
float f90 = saturate(50.0 * dot(surface.f0, vec3(0.33,0.33,0.33)));
|
||||
surface.F = F_Schlick(surface.f0, f90, surface.NdotV);
|
||||
surface.f90 = saturate(50.0 * dot(surface.f0, vec3(0.33,0.33,0.33)));
|
||||
surface.F = F_Schlick(surface.f0, surface.f90, surface.NdotV);
|
||||
}
|
||||
|
||||
Surface createSurface(vec4 normDepth, sampler2D colorBuffer, sampler2D matInfoBuffer, in vec2 uv, in vec3 wsEyePos, in vec3 wsEyeRay, in mat4 invView)
|
||||
|
|
@ -229,6 +230,11 @@ vec3 getPunctualLight(in Surface surface, in SurfaceToLight surfaceToLight, vec3
|
|||
return final;
|
||||
}
|
||||
|
||||
float computeSpecOcclusion( float NdotV , float AO , float roughness )
|
||||
{
|
||||
return saturate (pow( abs(NdotV + AO) , exp2 ( -16.0f * roughness - 1.0f )) - 1.0f + AO );
|
||||
}
|
||||
|
||||
vec4 compute4Lights( Surface surface,
|
||||
vec4 shadowMask,
|
||||
vec4 inLightPos[4],
|
||||
|
|
@ -421,20 +427,18 @@ vec4 computeForwardProbes(Surface surface,
|
|||
specular = mix(specular,textureLod(specularCubemapAR, vec4(surface.R, skylightCubemapIdx), lod).xyz, alpha);
|
||||
}
|
||||
|
||||
vec3 F = FresnelSchlickRoughness(surface.NdotV, surface.f0, surface.roughness);
|
||||
|
||||
//energy conservation
|
||||
vec3 kD = vec3(1.0,1.0,1.0) - F;
|
||||
kD *= 1.0 - surface.metalness;
|
||||
vec3 kD = 1.0f - surface.F;
|
||||
kD *= 1.0f - surface.metalness;
|
||||
|
||||
//apply brdf
|
||||
//Do it once to save on texture samples
|
||||
vec2 brdf = textureLod(BRDFTexture, vec2(surface.roughness, 1.0-surface.NdotV),0).xy;
|
||||
specular *= brdf.x * F + brdf.y;
|
||||
float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex)
|
||||
vec2 envBRDF = textureLod(BRDFTexture, vec2(dfgNdotV, surface.roughness),0).rg;
|
||||
specular *= surface.F * envBRDF.x + surface.f90 * envBRDF.y;
|
||||
irradiance *= kD * surface.baseColor.rgb;
|
||||
|
||||
//final diffuse color
|
||||
vec3 diffuse = kD * irradiance * surface.baseColor.rgb;
|
||||
vec4 finalColor = vec4(diffuse + specular * surface.ao, 1.0);
|
||||
//AO
|
||||
irradiance *= surface.ao;
|
||||
specular *= computeSpecOcclusion(surface.NdotV, surface.ao, surface.roughness);
|
||||
|
||||
return finalColor;
|
||||
return vec4(irradiance + specular, 0);//alpha writes disabled
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ struct Surface
|
|||
float3 albedo; // diffuse light absorbtion value (rgb)
|
||||
float3 R; // reflection vector
|
||||
float3 F; // fresnel term computed from f0, N and V
|
||||
float f90;
|
||||
|
||||
inline void Update()
|
||||
{
|
||||
|
|
@ -94,7 +95,7 @@ struct Surface
|
|||
f0 = lerp(0.04.xxx, baseColor.rgb, metalness);
|
||||
|
||||
R = -reflect(V, N);
|
||||
float f90 = saturate(50.0 * dot(f0, 0.33));
|
||||
f90 = saturate(50.0 * dot(f0, 0.33));
|
||||
F = F_Schlick(f0, f90, NdotV);
|
||||
}
|
||||
};
|
||||
|
|
@ -235,6 +236,11 @@ inline float3 getPunctualLight(in Surface surface, in SurfaceToLight surfaceToLi
|
|||
return final;
|
||||
}
|
||||
|
||||
float computeSpecOcclusion( float NdotV , float AO , float roughness )
|
||||
{
|
||||
return saturate (pow( abs(NdotV + AO) , exp2 ( -16.0f * roughness - 1.0f )) - 1.0f + AO );
|
||||
}
|
||||
|
||||
float4 compute4Lights( Surface surface,
|
||||
float4 shadowMask,
|
||||
float4 inLightPos[4],
|
||||
|
|
@ -462,19 +468,18 @@ float4 computeForwardProbes(Surface surface,
|
|||
specular = lerp(specular,TORQUE_TEXCUBEARRAYLOD(specularCubemapAR, surface.R, skylightCubemapIdx, lod).xyz,alpha);
|
||||
}
|
||||
|
||||
float3 F = FresnelSchlickRoughness(surface.NdotV, surface.f0, surface.roughness);
|
||||
|
||||
//energy conservation
|
||||
float3 kD = 1.0.xxx - F;
|
||||
kD *= 1.0 - surface.metalness;
|
||||
float3 kD = 1.0f - surface.F;
|
||||
kD *= 1.0f - surface.metalness;
|
||||
|
||||
//apply brdf
|
||||
//Do it once to save on texture samples
|
||||
float2 brdf = TORQUE_TEX2DLOD(BRDFTexture,float4(surface.roughness, 1.0-surface.NdotV, 0.0, 0.0)).xy;
|
||||
specular *= brdf.x * F + brdf.y;
|
||||
float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex)
|
||||
float2 envBRDF = TORQUE_TEX2DLOD(BRDFTexture, float4(dfgNdotV, surface.roughness,0,0)).rg;
|
||||
specular *= surface.F * envBRDF.x + surface.f90 * envBRDF.y;
|
||||
irradiance *= kD * surface.baseColor.rgb;
|
||||
|
||||
//final diffuse color
|
||||
float3 diffuse = kD * irradiance * surface.baseColor.rgb;
|
||||
float4 finalColor = float4(diffuse* surface.ao + specular * surface.ao, 1.0);
|
||||
return finalColor;
|
||||
//AO
|
||||
irradiance *= surface.ao;
|
||||
specular *= computeSpecOcclusion(surface.NdotV, surface.ao, surface.roughness);
|
||||
|
||||
return float4(irradiance + specular, 0);//alpha writes disabled
|
||||
}
|
||||
|
|
@ -24,6 +24,11 @@ uniform int numProbes;
|
|||
uniform samplerCubeArray specularCubemapAR;
|
||||
uniform samplerCubeArray irradianceCubemapAR;
|
||||
|
||||
#ifdef USE_SSAO_MASK
|
||||
uniform sampler2D ssaoMask;
|
||||
uniform vec4 rtParams6;
|
||||
#endif
|
||||
|
||||
uniform vec4 inProbePosArray[MAX_PROBES];
|
||||
uniform vec4 inRefPosArray[MAX_PROBES];
|
||||
uniform mat4 worldToObjArray[MAX_PROBES];
|
||||
|
|
@ -52,6 +57,12 @@ void main()
|
|||
{
|
||||
discard;
|
||||
}
|
||||
|
||||
#ifdef USE_SSAO_MASK
|
||||
float ssao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams6 ) ).r;
|
||||
surface.ao = min(surface.ao, ssao);
|
||||
#endif
|
||||
|
||||
|
||||
float alpha = 1;
|
||||
|
||||
|
|
@ -190,20 +201,19 @@ void main()
|
|||
return;
|
||||
#endif
|
||||
|
||||
vec3 F = FresnelSchlickRoughness(surface.NdotV, surface.f0, surface.roughness);
|
||||
|
||||
//energy conservation
|
||||
vec3 kD = vec3(1,1,1) - F;
|
||||
kD *= 1.0 - surface.metalness;
|
||||
vec3 kD = 1.0f - surface.F;
|
||||
kD *= 1.0f - surface.metalness;
|
||||
|
||||
//apply brdf
|
||||
//Do it once to save on texture samples
|
||||
vec2 brdf = textureLod(BRDFTexture, vec2(surface.roughness, surface.NdotV),0).xy;
|
||||
specular *= brdf.x * F + brdf.y;
|
||||
float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex)
|
||||
vec2 envBRDF = textureLod(BRDFTexture, vec2(dfgNdotV, surface.roughness),0).rg;
|
||||
specular *= surface.F * envBRDF.x + surface.f90 * envBRDF.y;
|
||||
irradiance *= kD * surface.baseColor.rgb;
|
||||
|
||||
//final diffuse color
|
||||
vec3 diffuse = kD * irradiance * surface.baseColor.rgb;
|
||||
vec4 finalColor = vec4(diffuse + specular * surface.ao, 1.0);
|
||||
//AO
|
||||
irradiance *= surface.ao;
|
||||
specular *= computeSpecOcclusion(surface.NdotV, surface.ao, surface.roughness);
|
||||
|
||||
OUT_col = finalColor;
|
||||
OUT_col = vec4(irradiance + specular, 0);//alpha writes disabled
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,11 +37,6 @@ uniform sampler2D deferredBuffer;
|
|||
uniform sampler2D shadowMap;
|
||||
uniform sampler2D dynamicShadowMap;
|
||||
|
||||
#ifdef USE_SSAO_MASK
|
||||
uniform sampler2D ssaoMask ;
|
||||
uniform vec4 rtParams3;
|
||||
#endif
|
||||
|
||||
uniform sampler2D colorBuffer;
|
||||
uniform sampler2D matInfoBuffer;
|
||||
uniform float lightBrightness;
|
||||
|
|
@ -245,10 +240,6 @@ void main()
|
|||
#endif
|
||||
|
||||
#endif //NO_SHADOW
|
||||
// Sample the AO texture.
|
||||
#ifdef USE_SSAO_MASK
|
||||
surface.ao *= 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams3 ) ).r;
|
||||
#endif
|
||||
|
||||
//get directional light contribution
|
||||
vec3 lighting = getDirectionalLight(surface, surfaceToLight, lightingColor.rgb, lightBrightness, shadow);
|
||||
|
|
|
|||
|
|
@ -21,6 +21,11 @@ uniform int numProbes;
|
|||
TORQUE_UNIFORM_SAMPLERCUBEARRAY(specularCubemapAR, 4);
|
||||
TORQUE_UNIFORM_SAMPLERCUBEARRAY(irradianceCubemapAR, 5);
|
||||
|
||||
#ifdef USE_SSAO_MASK
|
||||
TORQUE_UNIFORM_SAMPLER2D(ssaoMask, 6);
|
||||
uniform float4 rtParams6;
|
||||
#endif
|
||||
|
||||
uniform float4 inProbePosArray[MAX_PROBES];
|
||||
uniform float4 inRefPosArray[MAX_PROBES];
|
||||
uniform float4x4 worldToObjArray[MAX_PROBES];
|
||||
|
|
@ -49,6 +54,11 @@ float4 main(PFXVertToPix IN) : SV_TARGET
|
|||
return TORQUE_TEX2D(colorBuffer, IN.uv0.xy);
|
||||
}
|
||||
|
||||
#ifdef USE_SSAO_MASK
|
||||
float ssao = 1.0 - TORQUE_TEX2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams6 ) ).r;
|
||||
surface.ao = min(surface.ao, ssao);
|
||||
#endif
|
||||
|
||||
float alpha = 1;
|
||||
|
||||
#if SKYLIGHT_ONLY == 0
|
||||
|
|
@ -182,19 +192,18 @@ float4 main(PFXVertToPix IN) : SV_TARGET
|
|||
return float4(irradiance, 1);
|
||||
#endif
|
||||
|
||||
float3 F = FresnelSchlickRoughness(surface.NdotV, surface.f0, surface.roughness);
|
||||
|
||||
//energy conservation
|
||||
float3 kD = 1.0.xxx - F;
|
||||
kD *= 1.0 - surface.metalness;
|
||||
float3 kD = 1.0f - surface.F;
|
||||
kD *= 1.0f - surface.metalness;
|
||||
|
||||
//apply brdf
|
||||
//Do it once to save on texture samples
|
||||
float2 brdf = TORQUE_TEX2DLOD(BRDFTexture, float4(surface.roughness, 1.0-surface.NdotV, 0.0, 0.0)).xy;
|
||||
specular *= brdf.x * F + brdf.y;
|
||||
float dfgNdotV = max( surface.NdotV , 0.0009765625f ); //0.5f/512.0f (512 is size of dfg/brdf lookup tex)
|
||||
float2 envBRDF = TORQUE_TEX2DLOD(BRDFTexture, float4(dfgNdotV, surface.roughness,0,0)).rg;
|
||||
specular *= surface.F * envBRDF.x + surface.f90 * envBRDF.y;
|
||||
irradiance *= kD * surface.baseColor.rgb;
|
||||
|
||||
//final diffuse color
|
||||
float3 diffuse = kD * irradiance * surface.baseColor.rgb;
|
||||
float4 finalColor = float4(diffuse* surface.ao + specular * surface.ao, 1.0);
|
||||
return finalColor;
|
||||
//AO
|
||||
irradiance *= surface.ao;
|
||||
specular *= computeSpecOcclusion(surface.NdotV, surface.ao, surface.roughness);
|
||||
|
||||
return float4(irradiance + specular, 0);//alpha writes disabled
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ static float2 sNonUniformTaps[NUM_PRE_TAPS] =
|
|||
|
||||
/// The texture used to do per-pixel pseudorandom
|
||||
/// rotations of the filter taps.
|
||||
TORQUE_UNIFORM_SAMPLER2D(gTapRotationTex, 4);
|
||||
TORQUE_UNIFORM_SAMPLER2D(gTapRotationTex, 3);
|
||||
|
||||
float softShadow_sampleTaps( TORQUE_SAMPLER2D(shadowMap1),
|
||||
float2 sinCos,
|
||||
|
|
|
|||
|
|
@ -33,13 +33,8 @@ TORQUE_UNIFORM_SAMPLER2D(deferredBuffer, 0);
|
|||
TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1);
|
||||
TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap, 2);
|
||||
|
||||
#ifdef USE_SSAO_MASK
|
||||
TORQUE_UNIFORM_SAMPLER2D(ssaoMask, 3);
|
||||
uniform float4 rtParams3;
|
||||
#endif
|
||||
|
||||
TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6);
|
||||
TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7);
|
||||
TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 5);
|
||||
TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 6);
|
||||
|
||||
uniform float lightBrightness;
|
||||
uniform float3 lightDirection;
|
||||
|
|
@ -234,10 +229,6 @@ float4 main(FarFrustumQuadConnectP IN) : SV_TARGET
|
|||
#endif
|
||||
|
||||
#endif //NO_SHADOW
|
||||
// Sample the AO texture.
|
||||
#ifdef USE_SSAO_MASK
|
||||
surface.ao *= 1.0 - TORQUE_TEX2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams3 ) ).r;
|
||||
#endif
|
||||
|
||||
//get directional light contribution
|
||||
float3 lighting = getDirectionalLight(surface, surfaceToLight, lightingColor.rgb, lightBrightness, shadow);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,12 @@
|
|||
$traceModuleCalls=false;
|
||||
$reportModuleFileConflicts=true;
|
||||
if (!isObject(ExecFilesList))
|
||||
new ArrayObject(ExecFilesList);
|
||||
|
||||
function callOnModules(%functionName, %moduleGroup)
|
||||
{
|
||||
//clear per module group file execution chain
|
||||
ExecFilesList.empty();
|
||||
//Get our modules so we can exec any specific client-side loading/handling
|
||||
%modulesList = ModuleDatabase.findModules(false);
|
||||
for(%i=0; %i < getWordCount(%modulesList); %i++)
|
||||
|
|
@ -16,7 +23,14 @@ function callOnModules(%functionName, %moduleGroup)
|
|||
{
|
||||
eval(%module.scopeSet @ "." @ %functionName @ "();");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
%execFilecount = ExecFilesList.count();
|
||||
for (%i=0;%i<%execFilecount;%i++)
|
||||
{
|
||||
%filename = ExecFilesList.getKey(%i);
|
||||
exec(%filename);
|
||||
}
|
||||
}
|
||||
|
||||
function loadModuleMaterials(%moduleGroup)
|
||||
|
|
@ -69,10 +83,12 @@ function SimSet::getModulePath(%scopeSet)
|
|||
return "";
|
||||
}
|
||||
|
||||
function SimSet::registerDatablock(%scopeSet, %datablockFilePath)
|
||||
function SimSet::registerDatablock(%scopeSet, %datablockFilePath, %isExclusive)
|
||||
{
|
||||
if ($traceModuleCalls)
|
||||
warn("SimSet::registerDatablock");
|
||||
%name = %scopeSet.getName();
|
||||
%moduleDef = ModuleDatabase.findModule(%name);
|
||||
%moduleDef = ModuleDatabase.findModule(%name, 1);
|
||||
|
||||
if(!isObject(%moduleDef))
|
||||
{
|
||||
|
|
@ -89,6 +105,176 @@ function SimSet::registerDatablock(%scopeSet, %datablockFilePath)
|
|||
%relativePath = makeRelativePath(%datablockFilePath);
|
||||
|
||||
%fullPath = pathConcat(%moduleDef.ModulePath, %relativePath);
|
||||
///go through all entries
|
||||
%locked = false;
|
||||
%dbFilecount = DatablockFilesList.count();
|
||||
for (%i=0;%i<%dbFilecount;%i++)
|
||||
{
|
||||
%check = DatablockFilesList.getKey(%i);
|
||||
//look for a substring match
|
||||
%isMatch = strIsMatchExpr("*"@ %datablockFilePath,%check );
|
||||
if (%isMatch)
|
||||
{
|
||||
//check if we're already locked in
|
||||
//and kill off any duplicates
|
||||
//do note that doing it in this order means setting exclusive twice
|
||||
//allows one to override exclusive with exclusive
|
||||
%locked = DatablockFilesList.getValue(%i);
|
||||
|
||||
if ((!%locked && !%isExclusive)&&($reportModuleFileConflicts))
|
||||
error("found" SPC %datablockFilePath SPC "duplicate file!");
|
||||
if (!%locked || (%locked && %isExclusive))
|
||||
{
|
||||
DatablockFilesList.erase(%i);
|
||||
}
|
||||
}
|
||||
}
|
||||
//if we're not locked, or we are exclusive, go ahead and add it to the pile
|
||||
//(ensures exclusives get re-added after that erasure)
|
||||
if (!%locked || %isExclusive)
|
||||
DatablockFilesList.add(%fullPath,%isExclusive);
|
||||
if ($traceModuleCalls)
|
||||
DatablockFilesList.echo();
|
||||
}
|
||||
|
||||
function SimSet::unRegisterDatablock(%scopeSet, %datablockFilePath)
|
||||
{
|
||||
if ($traceModuleCalls)
|
||||
warn("SimSet::unRegisterDatablock");
|
||||
%name = %scopeSet.getName();
|
||||
%moduleDef = ModuleDatabase.findModule(%name, 1);
|
||||
|
||||
if(!isObject(%moduleDef))
|
||||
{
|
||||
error("Module::unRegisterDatablock() - unable to find a module with the moduleID of " @ %name);
|
||||
return;
|
||||
}
|
||||
|
||||
DatablockFilesList.add(%fullPath);
|
||||
if(!isObject(DatablockFilesList))
|
||||
{
|
||||
error("Module::unRegisterDatablock() - DatablockFilesList array object doesn't exist!");
|
||||
return;
|
||||
}
|
||||
|
||||
%relativePath = makeRelativePath(%datablockFilePath);
|
||||
|
||||
%fullPath = pathConcat(%moduleDef.ModulePath, %relativePath);
|
||||
///go through all entries
|
||||
%locked = false;
|
||||
%dbFilecount = DatablockFilesList.count();
|
||||
for (%i=0;%i<%dbFilecount;%i++)
|
||||
{
|
||||
%check = DatablockFilesList.getKey(%i);
|
||||
//look for a substring match
|
||||
%isMatch = strIsMatchExpr("*"@ %datablockFilePath,%check );
|
||||
if (%isMatch)
|
||||
{
|
||||
//check if we're already locked in. if not, kill it.
|
||||
%locked = DatablockFilesList.getValue(%i);
|
||||
if (!%locked)
|
||||
{
|
||||
DatablockFilesList.erase(%i);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($traceModuleCalls)
|
||||
DatablockFilesList.echo();
|
||||
}
|
||||
|
||||
function SimSet::queueExec(%scopeSet, %execFilePath, %isExclusive)
|
||||
{
|
||||
if ($traceModuleCalls)
|
||||
warn("SimSet::queueExec");
|
||||
%name = %scopeSet.getName();
|
||||
%moduleDef = ModuleDatabase.findModule(%name, 1);
|
||||
|
||||
if(!isObject(%moduleDef))
|
||||
{
|
||||
error("Module::queueExec() - unable to find a module with the moduleID of " @ %name);
|
||||
return;
|
||||
}
|
||||
|
||||
if(!isObject(ExecFilesList))
|
||||
{
|
||||
error("Module::queueExec() - ExecFilesList array object doesn't exist!");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($traceModuleCalls)
|
||||
warn("module root path="@ makeRelativePath(%moduleDef.ModulePath));
|
||||
|
||||
%fullPath = makeRelativePath(%moduleDef.ModulePath) @ %execFilePath;
|
||||
///go through all entries
|
||||
%locked = false;
|
||||
%execFilecount = ExecFilesList.count();
|
||||
for (%i=0;%i<%execFilecount;%i++)
|
||||
{
|
||||
%check = ExecFilesList.getKey(%i);
|
||||
//look for a substring match
|
||||
%isMatch = strIsMatchExpr("*"@ %execFilePath,%check );
|
||||
if (%isMatch)
|
||||
{
|
||||
//check if we're already locked in
|
||||
//and kill off any duplicates
|
||||
//do note that doing it in this order means setting exclusive twice
|
||||
//allows one to override exclusive with exclusive
|
||||
%locked = ExecFilesList.getValue(%i);
|
||||
if ((!%locked && !%isExclusive)&&($reportModuleFileConflicts))
|
||||
error("found" SPC %execFilePath SPC "duplicate file!");
|
||||
if (!%locked || (%locked && %isExclusive))
|
||||
{
|
||||
ExecFilesList.erase(%i);
|
||||
}
|
||||
}
|
||||
}
|
||||
//if we're not locked, or we are exclusive, go ahead and add it to the pile
|
||||
//(ensures exclusives get re-added after that erasure)
|
||||
if (!%locked || %isExclusive)
|
||||
ExecFilesList.add(%fullPath,%isExclusive);
|
||||
if ($traceModuleCalls)
|
||||
ExecFilesList.echo();
|
||||
}
|
||||
|
||||
function SimSet::unQueueExec(%scopeSet, %execFilePath)
|
||||
{
|
||||
if ($traceModuleCalls)
|
||||
warn("SimSet::unRegisterDatablock");
|
||||
%name = %scopeSet.getName();
|
||||
%moduleDef = ModuleDatabase.findModule(%name, 1);
|
||||
|
||||
if(!isObject(%moduleDef))
|
||||
{
|
||||
error("Module::unRegisterDatablock() - unable to find a module with the moduleID of " @ %name);
|
||||
return;
|
||||
}
|
||||
|
||||
if(!isObject(ExecFilesList))
|
||||
{
|
||||
error("Module::unRegisterDatablock() - ExecFilesList array object doesn't exist!");
|
||||
return;
|
||||
}
|
||||
|
||||
%relativePath = makeRelativePath(%execFilePath);
|
||||
|
||||
%fullPath = pathConcat(%moduleDef.ModulePath, %relativePath);
|
||||
///go through all entries
|
||||
%locked = false;
|
||||
%execFilecount = ExecFilesList.count();
|
||||
for (%i=0;%i<%execFilecount;%i++)
|
||||
{
|
||||
%check = ExecFilesList.getKey(%i);
|
||||
//look for a substring match
|
||||
%isMatch = strIsMatchExpr("*"@ %execFilePath,%check );
|
||||
if (%isMatch)
|
||||
{
|
||||
//check if we're already locked in. if not, kill it.
|
||||
%locked = ExecFilesList.getValue(%i);
|
||||
if (!%locked)
|
||||
{
|
||||
ExecFilesList.erase(%i);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($traceModuleCalls)
|
||||
ExecFilesList.echo();
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@ function ExampleComponent::onAdd(%this)
|
|||
{
|
||||
|
||||
}
|
||||
//onAdd is called when the component is removed and deleted from it's owner entity.
|
||||
//onRemove is called when the component is removed and deleted from it's owner entity.
|
||||
function ExampleComponent::onRemove(%this)
|
||||
{
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ function ExampleComponent::onClientConnect(%this, %client)
|
|||
|
||||
}
|
||||
//onClientDisconnect is called any time a client disconnects from the server.
|
||||
function ExampleComponent::onClientDisonnect(%this, %client)
|
||||
function ExampleComponent::onClientDisconnect(%this, %client)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -367,7 +367,7 @@ function OptionsMenuBackSetting::onClick(%this)
|
|||
|
||||
//advance by one
|
||||
%newSetting = getToken(%settingsList, ",", %currentSettingIdx);
|
||||
eval(%settingCtrl.qualitySettingGroup@"::set("@%newSetting@");");
|
||||
eval(%settingCtrl.qualitySettingGroup@"::set(\""@%newSetting@"\");");
|
||||
%settingCtrl-->SettingText.setText( %newSetting );
|
||||
|
||||
if(%currentSettingIdx == %settingsListCount)
|
||||
|
|
|
|||
|
|
@ -38,7 +38,14 @@ function DisplayMenu::apply(%this)
|
|||
}
|
||||
|
||||
//Update the display settings now
|
||||
$pref::Video::Resolution = getWord( $pref::Video::Resolution, 0 ) SPC getWord( $pref::Video::Resolution, 2 );
|
||||
if (getWord( $pref::Video::Resolution, 2) == "")
|
||||
{
|
||||
$pref::Video::Resolution = getWord( $pref::Video::Resolution, 0 ) SPC getWord( $pref::Video::Resolution, 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
$pref::Video::Resolution = getWord( $pref::Video::Resolution, 0 ) SPC getWord( $pref::Video::Resolution, 2 );
|
||||
}
|
||||
|
||||
/*if ( %newFullScreen $= "false" )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,56 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<AssetImportSettings>
|
||||
<Group name="TestConfig">
|
||||
<Group name="Meshes">
|
||||
<Setting name="DoUpAxisOverride">0</Setting>
|
||||
<Setting name="IgnoreNodeScale">0</Setting>
|
||||
<Setting name="ScaleOverride">1</Setting>
|
||||
<Setting name="CollapseSubmeshes">0</Setting>
|
||||
<Setting name="AdjustCenter">0</Setting>
|
||||
<Setting name="AdjustFloor">0</Setting>
|
||||
<Setting name="UpAxisOverride">Z_AXIS</Setting>
|
||||
<Setting name="LODType">TrailingNumber</Setting>
|
||||
<Group name="Animations">
|
||||
<Setting name="SeparateAnimations">1</Setting>
|
||||
<Setting name="ImportAnimations">1</Setting>
|
||||
</Group>
|
||||
<Group name="Materials">
|
||||
<Setting name="ImportMaterials">1</Setting>
|
||||
<Setting name="CreateComposites">1</Setting>
|
||||
<Setting name="UseDiffuseSuffixOnOriginImage">1</Setting>
|
||||
<Setting name="UseExistingMaterials">1</Setting>
|
||||
<Setting name="IgnoreMaterials">ColorEffect*,</Setting>
|
||||
<Setting name="UseExistingMaterials">1</Setting>
|
||||
<Setting name="UseDiffuseSuffixOnOriginImage">1</Setting>
|
||||
<Setting name="CreateComposites">1</Setting>
|
||||
<Setting name="ImportMaterials">1</Setting>
|
||||
</Group>
|
||||
<Group name="Meshes">
|
||||
<Setting name="AdjustFloor">0</Setting>
|
||||
<Setting name="CollapseSubmeshes">0</Setting>
|
||||
<Setting name="IgnoreNodeScale">0</Setting>
|
||||
<Setting name="UpAxisOverride">Z_AXIS</Setting>
|
||||
<Setting name="ScaleOverride">1</Setting>
|
||||
<Setting name="LODType">TrailingNumber</Setting>
|
||||
<Setting name="AdjustCenter">0</Setting>
|
||||
<Setting name="DoUpAxisOverride">0</Setting>
|
||||
</Group>
|
||||
<Group name="Images">
|
||||
<Setting name="AOTypeSuffixes">_AO,_AMBIENT,_AMBIENTOCCLUSION</Setting>
|
||||
<Setting name="MetalnessTypeSuffixes">_METAL,_MET,_METALNESS,_METALLIC</Setting>
|
||||
<Setting name="PopulateMaterialMaps">1</Setting>
|
||||
<Setting name="UseMips">1</Setting>
|
||||
<Setting name="Compressed">1</Setting>
|
||||
<Setting name="TextureFilteringMode">Bilinear</Setting>
|
||||
<Setting name="GenerateMaterialOnImport">1</Setting>
|
||||
<Setting name="RoughnessTypeSuffixes">_ROUGH,_ROUGHNESS</Setting>
|
||||
<Setting name="IsHDR">0</Setting>
|
||||
<Setting name="Scaling">1.0</Setting>
|
||||
<Setting name="DiffuseTypeSuffixes">_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL,_baseColor,</Setting>
|
||||
<Setting name="CompositeTypeSuffixes">_COMP,_COMPOSITE</Setting>
|
||||
<Setting name="ImageType">N/A</Setting>
|
||||
<Setting name="SmoothnessTypeSuffixes">_SMOOTH,_SMOOTHNESS</Setting>
|
||||
<Setting name="UseMips">1</Setting>
|
||||
<Setting name="TextureFilteringMode">Bilinear</Setting>
|
||||
<Setting name="IsHDR">0</Setting>
|
||||
<Setting name="MetalnessTypeSuffixes">_METAL,_MET,_METALNESS,_METALLIC</Setting>
|
||||
<Setting name="NormalTypeSuffixes">_NORMAL,_NORM</Setting>
|
||||
<Setting name="AOTypeSuffixes">_AO,_AMBIENT,_AMBIENTOCCLUSION</Setting>
|
||||
<Setting name="ImageType">N/A</Setting>
|
||||
<Setting name="Compressed">1</Setting>
|
||||
<Setting name="RoughnessTypeSuffixes">_ROUGH,_ROUGHNESS</Setting>
|
||||
<Setting name="SmoothnessTypeSuffixes">_SMOOTH,_SMOOTHNESS</Setting>
|
||||
<Setting name="DiffuseTypeSuffixes">_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL,_baseColor,_a,</Setting>
|
||||
<Setting name="PopulateMaterialMaps">1</Setting>
|
||||
<Setting name="GenerateMaterialOnImport">1</Setting>
|
||||
<Setting name="CompositeTypeSuffixes">_COMP,_COMPOSITE</Setting>
|
||||
</Group>
|
||||
<Group name="Collision">
|
||||
<Setting name="GenerateLOSCollisions">1</Setting>
|
||||
<Setting name="GenerateCollisions">1</Setting>
|
||||
<Setting name="LOSCollisionMeshPrefix">LOS</Setting>
|
||||
<Setting name="CollisionMeshPrefix">Col</Setting>
|
||||
<Setting name="GenCollisionType">CollisionMesh</Setting>
|
||||
<Setting name="GenerateCollisions">1</Setting>
|
||||
<Setting name="LOSCollisionMeshPrefix">LOS</Setting>
|
||||
<Setting name="GenLOSCollisionType">CollisionMesh</Setting>
|
||||
</Group>
|
||||
<Group name="Animations">
|
||||
<Setting name="ImportAnimations">1</Setting>
|
||||
<Setting name="SeparateAnimations">1</Setting>
|
||||
</Group>
|
||||
<Group name="Sounds">
|
||||
<Setting name="PitchAdjust">1.0</Setting>
|
||||
<Setting name="Compressed">0</Setting>
|
||||
<Setting name="VolumeAdjust">1.0</Setting>
|
||||
<Setting name="Compressed">0</Setting>
|
||||
</Group>
|
||||
<Group name="General">
|
||||
<Setting name="DuplicatAutoResolution">AutoPrune</Setting>
|
||||
|
|
|
|||
|
|
@ -13,13 +13,23 @@
|
|||
isContainer = "1";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "1";
|
||||
AddNewArtAssetPopup = "18222";
|
||||
AddNewAssetPopup = "18223";
|
||||
AddNewScriptAssetPopup = "18221";
|
||||
AddNewArtAssetPopup = "18110";
|
||||
AddNewAssetPopup = "18112";
|
||||
AddNewCppAssetPopup = "18111";
|
||||
AddNewScriptAssetPopup = "18109";
|
||||
coreModulesFilter = "0";
|
||||
currentPreviewPage = "0";
|
||||
enabled = "1";
|
||||
Enabled = "1";
|
||||
importAssetFinalListArray = "20689";
|
||||
ImportAssetResolutionsPopup = "18119";
|
||||
importAssetUnprocessedListArray = "20688";
|
||||
importingFilesArray = "20687";
|
||||
isReImportingAsset = "0";
|
||||
navigationHistoryIdx = "0";
|
||||
onlyShowModulesWithAssets = "0";
|
||||
previewData = "19953";
|
||||
previewSize = "80";
|
||||
templateFilesPath = "tools/assetBrowser/scripts/templateFiles/";
|
||||
totalPages = "1";
|
||||
treeFilterMode = "list";
|
||||
|
||||
|
|
@ -201,7 +211,7 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "50 22";
|
||||
position = "52 22";
|
||||
extent = "45 19";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
|
|
@ -215,97 +225,107 @@
|
|||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiWindowCtrl(TagFilterWindow) {
|
||||
text = "New Window";
|
||||
resizeWidth = "1";
|
||||
resizeHeight = "1";
|
||||
canMove = "1";
|
||||
canClose = "0";
|
||||
canMinimize = "0";
|
||||
canMaximize = "0";
|
||||
canCollapse = "0";
|
||||
edgeSnap = "1";
|
||||
docking = "None";
|
||||
margin = "4 4 4 4";
|
||||
padding = "0 0 0 0";
|
||||
anchorTop = "0";
|
||||
anchorBottom = "0";
|
||||
anchorLeft = "0";
|
||||
anchorRight = "0";
|
||||
position = "129 62";
|
||||
extent = "161 250";
|
||||
minExtent = "161 86";
|
||||
horizSizing = "windowRelative";
|
||||
vertSizing = "windowRelative";
|
||||
profile = "ToolsGuiToolbarWindowProfile";
|
||||
visible = "0";
|
||||
new GuiBitmapButtonCtrl(AssetBrowser_NavigateBackBtn) {
|
||||
bitmap = "tools/gui/images/folderUp.png";
|
||||
bitmapMode = "Centered";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
useStates = "1";
|
||||
masked = "0";
|
||||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "98 21";
|
||||
extent = "22 22";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "GuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.navigateHistoryBack();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiBitmapButtonCtrl(AssetBrowser_NavigateForwardBtn) {
|
||||
bitmap = "tools/gui/images/folderDown.png";
|
||||
bitmapMode = "Centered";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
useStates = "1";
|
||||
masked = "0";
|
||||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "120 21";
|
||||
extent = "22 22";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "GuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.navigateHistoryForward();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiStackControl(AssetBrowser_BreadcrumbBar) {
|
||||
stackingType = "Horizontal";
|
||||
horizStacking = "Left to Right";
|
||||
vertStacking = "Top to Bottom";
|
||||
padding = "0";
|
||||
dynamicSize = "0";
|
||||
dynamicNonStackExtent = "0";
|
||||
dynamicPos = "0";
|
||||
changeChildSizeToFit = "0";
|
||||
changeChildPosition = "1";
|
||||
position = "156 21";
|
||||
extent = "326 23";
|
||||
minExtent = "16 16";
|
||||
horizSizing = "width";
|
||||
vertSizing = "bottom";
|
||||
profile = "GuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
internalName = "VisibilityLayerWindow";
|
||||
hidden = "1";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
|
||||
new GuiScrollCtrl() {
|
||||
willFirstRespond = "1";
|
||||
hScrollBar = "alwaysOff";
|
||||
vScrollBar = "dynamic";
|
||||
lockHorizScroll = "1";
|
||||
lockVertScroll = "0";
|
||||
constantThumbHeight = "0";
|
||||
childMargin = "2 0";
|
||||
mouseWheelScrollSpeed = "-1";
|
||||
docking = "Client";
|
||||
margin = "0 0 0 0";
|
||||
padding = "0 0 0 0";
|
||||
anchorTop = "1";
|
||||
anchorBottom = "0";
|
||||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "1 9";
|
||||
extent = "159 238";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "width";
|
||||
vertSizing = "height";
|
||||
profile = "ToolsGuiScrollProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "ToolsGuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
|
||||
new GuiStackControl(TagFilterList) {
|
||||
stackingType = "Vertical";
|
||||
horizStacking = "Left to Right";
|
||||
vertStacking = "Top to Bottom";
|
||||
padding = "-2";
|
||||
dynamicSize = "1";
|
||||
dynamicNonStackExtent = "0";
|
||||
dynamicPos = "0";
|
||||
changeChildSizeToFit = "1";
|
||||
changeChildPosition = "1";
|
||||
position = "3 1";
|
||||
extent = "153 16";
|
||||
minExtent = "16 16";
|
||||
horizSizing = "width";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "ToolsGuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
internalName = "theVisOptionsList";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
};
|
||||
};
|
||||
new GuiSplitContainer() {
|
||||
new GuiBitmapButtonCtrl(AssetBrowser_VisibilityOptions) {
|
||||
bitmap = "tools/gui/images/visible";
|
||||
bitmapMode = "Centered";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
useStates = "1";
|
||||
masked = "0";
|
||||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "487 21";
|
||||
extent = "23 23";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "left";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.showVisibiltyOptions();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
tooltip = "Visibility Options";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiSplitContainer(AssetBrowser_MainSplit) {
|
||||
orientation = "Vertical";
|
||||
splitterSize = "2";
|
||||
splitPoint = "149 100";
|
||||
|
|
@ -323,7 +343,7 @@
|
|||
minExtent = "64 64";
|
||||
horizSizing = "relative";
|
||||
vertSizing = "height";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
|
|
@ -332,7 +352,7 @@
|
|||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
|
||||
new GuiPanel() {
|
||||
new GuiPanel(AssetBrowser_FoldersPanel) {
|
||||
docking = "Client";
|
||||
margin = "0 0 0 0";
|
||||
padding = "0 0 0 0";
|
||||
|
|
@ -342,10 +362,10 @@
|
|||
anchorRight = "0";
|
||||
position = "0 0";
|
||||
extent = "147 509";
|
||||
minExtent = "16 16";
|
||||
minExtent = "0 0";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
|
|
@ -376,8 +396,13 @@
|
|||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
|
||||
new GuiTextCtrl() {
|
||||
text = "Filters";
|
||||
new GuiTextEditCtrl(AssetBrowserFolderSearchFilter) {
|
||||
historySize = "0";
|
||||
tabComplete = "0";
|
||||
sinkAllKeyEvents = "0";
|
||||
password = "0";
|
||||
passwordMask = "*";
|
||||
text = "Search Folders...";
|
||||
maxLength = "1024";
|
||||
margin = "0 0 0 0";
|
||||
padding = "0 0 0 0";
|
||||
|
|
@ -385,23 +410,24 @@
|
|||
anchorBottom = "0";
|
||||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "5 0";
|
||||
extent = "30 16";
|
||||
position = "0 0";
|
||||
extent = "148 18";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
horizSizing = "width";
|
||||
vertSizing = "height";
|
||||
profile = "ToolsGuiTextEditProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
class = "AssetBrowserSearchFilterTxt";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiBitmapButtonCtrl() {
|
||||
bitmap = "tools/gui/images/visible";
|
||||
bitmapMode = "Stretched";
|
||||
new GuiBitmapButtonCtrl(AssetBrowser_ClearFolderFilterBtn) {
|
||||
bitmap = "tools/gui/images/clear-icon";
|
||||
bitmapMode = "Centered";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
useStates = "1";
|
||||
|
|
@ -409,17 +435,15 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "128 -1";
|
||||
extent = "18 19";
|
||||
position = "132 0";
|
||||
extent = "15 15";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
horizSizing = "left";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "GuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.showFilterPopup();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
tooltip = "Views assets via module-oriented list tree.";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
|
|
@ -438,7 +462,7 @@
|
|||
minExtent = "8 2";
|
||||
horizSizing = "width";
|
||||
vertSizing = "height";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
|
|
@ -471,7 +495,7 @@
|
|||
profile = "GuiEditorScrollProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "ToolsGuiDefaultProfile";
|
||||
tooltipProfile = "ToolsGuiSolidDefaultProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
canSave = "1";
|
||||
|
|
@ -500,7 +524,7 @@
|
|||
canRenameObjects = "1";
|
||||
renameInternal = "0";
|
||||
position = "1 1";
|
||||
extent = "145 252";
|
||||
extent = "145 147";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
|
|
@ -517,7 +541,7 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
new GuiPanel() {
|
||||
new GuiPanel(AssetBrowser_AssetsPanel) {
|
||||
docking = "Client";
|
||||
margin = "0 0 0 0";
|
||||
padding = "0 0 0 0";
|
||||
|
|
@ -530,7 +554,7 @@
|
|||
minExtent = "16 16";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
|
|
@ -548,7 +572,7 @@
|
|||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "1 0";
|
||||
extent = "354 41";
|
||||
extent = "354 19";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "width";
|
||||
vertSizing = "bottom";
|
||||
|
|
@ -561,65 +585,13 @@
|
|||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
|
||||
new GuiBitmapButtonCtrl() {
|
||||
bitmap = "tools/gui/images/new";
|
||||
bitmapMode = "Stretched";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
useStates = "1";
|
||||
masked = "0";
|
||||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "42 22";
|
||||
extent = "15 15";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.createNewAsset();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
tooltip = "Create New Asset";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiBitmapButtonCtrl() {
|
||||
bitmap = "tools/gui/images/delete";
|
||||
bitmapMode = "Stretched";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
useStates = "1";
|
||||
masked = "0";
|
||||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "23 22";
|
||||
extent = "15 15";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.showDeleteDialog();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
tooltip = "Delete Asset";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiTextEditCtrl(AssetBrowserSearchFilter) {
|
||||
historySize = "0";
|
||||
tabComplete = "0";
|
||||
sinkAllKeyEvents = "0";
|
||||
password = "0";
|
||||
passwordMask = "*";
|
||||
text = "\c2Filter...";
|
||||
text = "Search Assets...";
|
||||
maxLength = "1024";
|
||||
margin = "0 0 0 0";
|
||||
padding = "0 0 0 0";
|
||||
|
|
@ -627,8 +599,8 @@
|
|||
anchorBottom = "0";
|
||||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "62 19";
|
||||
extent = "273 18";
|
||||
position = "21 1";
|
||||
extent = "314 18";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "width";
|
||||
vertSizing = "bottom";
|
||||
|
|
@ -638,12 +610,12 @@
|
|||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
class = "AssetBrowserSearchFilterText";
|
||||
class = "AssetBrowserSearchFilterTxt";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiBitmapButtonCtrl(TagFilterButton) {
|
||||
bitmap = "tools/gui/images/visible";
|
||||
new GuiBitmapButtonCtrl(AssetBrowser_ClearAssetFilterBtn) {
|
||||
bitmap = "tools/gui/images/clear-icon";
|
||||
bitmapMode = "Stretched";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
|
|
@ -652,46 +624,49 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "4 19";
|
||||
extent = "20 20";
|
||||
position = "321 1";
|
||||
extent = "15 15";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
horizSizing = "left";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.toggleTagFilterPopup();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
tooltip = "Create New Asset";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiTextCtrl() {
|
||||
text = "Assets";
|
||||
maxLength = "1024";
|
||||
margin = "0 0 0 0";
|
||||
padding = "0 0 0 0";
|
||||
anchorTop = "1";
|
||||
anchorBottom = "0";
|
||||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "5 0";
|
||||
extent = "53 16";
|
||||
new GuiBitmapButtonCtrl(AssetBrowser_ToggleFolderPanel) {
|
||||
bitmap = "tools/gui/images/iconList.png";
|
||||
bitmapMode = "Centered";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
useStates = "1";
|
||||
masked = "0";
|
||||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "1 1";
|
||||
extent = "15 15";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.toggleFolderCollapseButton();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
tooltip = "Toggles the display of the folders panel";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiBitmapButtonCtrl() {
|
||||
bitmap = "tools/gui/images/delete";
|
||||
new GuiBitmapButtonCtrl(AssetBrowser_FilterOptionsBtn) {
|
||||
bitmap = "tools/gui/images/filter.png";
|
||||
bitmapMode = "Stretched";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
|
|
@ -700,17 +675,17 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "337 22";
|
||||
position = "337 1";
|
||||
extent = "15 15";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "left";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.showDeleteDialog();";
|
||||
command = "AssetBrowser.showFilterOptions();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
tooltip = "Delete Asset";
|
||||
tooltip = "Filter Options";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
|
|
@ -724,12 +699,12 @@
|
|||
anchorBottom = "0";
|
||||
anchorLeft = "1";
|
||||
anchorRight = "1";
|
||||
position = "1 40";
|
||||
extent = "354 468";
|
||||
position = "1 17";
|
||||
extent = "354 487";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "width";
|
||||
vertSizing = "height";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
|
|
@ -755,19 +730,35 @@
|
|||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "0 0";
|
||||
extent = "354 448";
|
||||
extent = "354 467";
|
||||
minExtent = "8 8";
|
||||
horizSizing = "width";
|
||||
vertSizing = "height";
|
||||
profile = "GuiEditorScrollProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "ToolsGuiDefaultProfile";
|
||||
tooltipProfile = "ToolsGuiSolidDefaultProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
|
||||
new GuiMouseEventCtrl(AssetListPanelInputs) {
|
||||
lockMouse = "0";
|
||||
position = "1 0";
|
||||
extent = "339 467";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "width";
|
||||
vertSizing = "height";
|
||||
profile = "GuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiStackControl() {
|
||||
stackingType = "Vertical";
|
||||
horizStacking = "Left to Right";
|
||||
|
|
@ -778,8 +769,8 @@
|
|||
dynamicPos = "0";
|
||||
changeChildSizeToFit = "1";
|
||||
changeChildPosition = "0";
|
||||
position = "1 1";
|
||||
extent = "352 254";
|
||||
position = "2 1";
|
||||
extent = "339 124";
|
||||
minExtent = "16 16";
|
||||
horizSizing = "width";
|
||||
vertSizing = "bottom";
|
||||
|
|
@ -792,25 +783,10 @@
|
|||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
|
||||
new GuiControl() {
|
||||
position = "0 0";
|
||||
extent = "352 4";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiDynamicCtrlArrayControl() {
|
||||
colCount = "3";
|
||||
colSize = "100";
|
||||
rowCount = "2";
|
||||
rowCount = "1";
|
||||
rowSize = "124";
|
||||
rowSpacing = "2";
|
||||
colSpacing = "2";
|
||||
|
|
@ -819,8 +795,8 @@
|
|||
fillRowFirst = "1";
|
||||
dynamicSize = "1";
|
||||
padding = "0 0 0 0";
|
||||
position = "3 4";
|
||||
extent = "352 250";
|
||||
position = "3 0";
|
||||
extent = "339 124";
|
||||
minExtent = "8 8";
|
||||
horizSizing = "width";
|
||||
vertSizing = "bottom";
|
||||
|
|
@ -830,7 +806,7 @@
|
|||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
internalName = "materialSelection";
|
||||
internalName = "assetList";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
|
|
@ -844,12 +820,12 @@
|
|||
anchorBottom = "0";
|
||||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "0 448";
|
||||
position = "0 467";
|
||||
extent = "354 20";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "width";
|
||||
vertSizing = "height";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
|
|
@ -859,13 +835,35 @@
|
|||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiTextCtrl(AssetBrowser_FooterText) {
|
||||
maxLength = "1024";
|
||||
margin = "0 0 0 0";
|
||||
padding = "0 0 0 0";
|
||||
anchorTop = "1";
|
||||
anchorBottom = "0";
|
||||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "0 470";
|
||||
extent = "269 23";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "top";
|
||||
profile = "ToolsGuiTextProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "1";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
};
|
||||
new GuiButtonCtrl() {
|
||||
text = "Select";
|
||||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "242 491";
|
||||
position = "301 488";
|
||||
extent = "53 19";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "left";
|
||||
|
|
@ -882,26 +880,6 @@
|
|||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiButtonCtrl() {
|
||||
text = "Cancel";
|
||||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "300 491";
|
||||
extent = "52 19";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "left";
|
||||
vertSizing = "top";
|
||||
profile = "ToolsGuiButtonProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.hideDialog();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@
|
|||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiScrollCtrl() {
|
||||
new GuiScrollCtrl(ImportAssetConfigEditorScroll) {
|
||||
willFirstRespond = "1";
|
||||
hScrollBar = "dynamic";
|
||||
vScrollBar = "dynamic";
|
||||
|
|
|
|||
|
|
@ -30,6 +30,32 @@ function initializeAssetBrowser()
|
|||
{
|
||||
echo(" % - Initializing Asset Browser");
|
||||
|
||||
$AssetBrowser::importConfigsFile = "tools/assetBrowser/assetImportConfigs.xml";
|
||||
$AssetBrowser::currentImportConfig = "";
|
||||
|
||||
if(!isObject(AssetFilterTypeList))
|
||||
{
|
||||
new ArrayObject(AssetFilterTypeList);
|
||||
|
||||
AssetFilterTypeList.add("Component");
|
||||
AssetFilterTypeList.add("Cpp");
|
||||
AssetFilterTypeList.add("Cubemap");
|
||||
AssetFilterTypeList.add("GameObjects");
|
||||
AssetFilterTypeList.add("GUIs");
|
||||
AssetFilterTypeList.add("Images");
|
||||
AssetFilterTypeList.add("Levels");
|
||||
AssetFilterTypeList.add("Materials");
|
||||
AssetFilterTypeList.add("Particles");
|
||||
AssetFilterTypeList.add("PostFXs");
|
||||
AssetFilterTypeList.add("Scripts");
|
||||
AssetFilterTypeList.add("Shapes");
|
||||
AssetFilterTypeList.add("ShapeAnimations");
|
||||
AssetFilterTypeList.add("Sounds");
|
||||
AssetFilterTypeList.add("StateMachines");
|
||||
AssetFilterTypeList.add("Terrain");
|
||||
AssetFilterTypeList.add("TerrainMaterials");
|
||||
}
|
||||
|
||||
exec("./guis/assetBrowser.gui");
|
||||
exec("./guis/addModuleWindow.gui");
|
||||
exec("./guis/gameObjectCreator.gui");
|
||||
|
|
@ -67,6 +93,9 @@ function initializeAssetBrowser()
|
|||
exec("./scripts/assetTypes/sound.cs");
|
||||
exec("./scripts/assetTypes/stateMachine.cs");
|
||||
exec("./scripts/assetTypes/cubemap.cs");
|
||||
exec("./scripts/assetTypes/folder.cs");
|
||||
exec("./scripts/assetTypes/terrain.cs");
|
||||
exec("./scripts/assetTypes/terrainMaterial.cs");
|
||||
|
||||
exec("./scripts/fieldTypes/fieldTypes.cs");
|
||||
exec("./scripts/fieldTypes/listField.cs");
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -85,6 +85,7 @@ function AssetBrowser::onBeginDropFiles( %this )
|
|||
//prep the import control
|
||||
Canvas.pushDialog(AssetImportCtrl);
|
||||
AssetImportCtrl.setHidden(true);
|
||||
|
||||
ImportAssetTree.clear();
|
||||
ImportAssetTree.insertItem(0, "Importing Assets");
|
||||
AssetBrowser.unprocessedAssetsCount = 0;
|
||||
|
|
@ -161,136 +162,39 @@ function AssetBrowser::onDropZipFile(%this, %filePath)
|
|||
}
|
||||
}
|
||||
|
||||
function AssetBrowser::onDropImageFile(%this, %filePath)
|
||||
{
|
||||
if(!%this.isVisible())
|
||||
return;
|
||||
|
||||
// File Information madness
|
||||
%fileName = %filePath;
|
||||
%fileOnlyName = fileName( %fileName );
|
||||
%fileBase = validateDatablockName(fileBase( %fileName ) @ "ImageMap");
|
||||
|
||||
// [neo, 5/17/2007 - #3117]
|
||||
// Check if the file being dropped is already in data/images or a sub dir by checking if
|
||||
// the file path up to length of check path is the same as check path.
|
||||
%defaultPath = EditorSettings.value( "WorldEditor/defaultMaterialsPath" );
|
||||
|
||||
%checkPath = expandFilename( "^"@%defaultPath );
|
||||
%fileOnlyPath = expandFileName( %filePath ); //filePath( expandFileName( %filePath ) );
|
||||
%fileBasePath = getSubStr( %fileOnlyPath, 0, strlen( %checkPath ) );
|
||||
|
||||
if( %checkPath !$= %fileBasePath )
|
||||
{
|
||||
// No match so file is from outside images directory and we need to copy it in
|
||||
%fileNewLocation = expandFilename("^"@%defaultPath) @ "/" @ fileBase( %fileName ) @ fileExt( %fileName );
|
||||
|
||||
// Move to final location
|
||||
if( !pathCopy( %filePath, %fileNewLocation ) )
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Already in images path somewhere so just link to it
|
||||
%fileNewLocation = %filePath;
|
||||
}
|
||||
|
||||
addResPath( filePath( %fileNewLocation ) );
|
||||
|
||||
%matName = fileBase( %fileName );
|
||||
|
||||
// Create Material
|
||||
%imap = new Material(%matName)
|
||||
{
|
||||
mapTo = fileBase( %matName );
|
||||
diffuseMap[0] = %defaultPath @ "/" @ fileBase( %fileName ) @ fileExt( %fileName );
|
||||
};
|
||||
//%imap.setName( %fileBase );
|
||||
//%imap.imageName = %fileNewLocation;
|
||||
//%imap.imageMode = "FULL";
|
||||
//%imap.filterPad = false;
|
||||
//%imap.compile();
|
||||
|
||||
%diffusecheck = %imap.diffuseMap[0];
|
||||
|
||||
// Bad Creation!
|
||||
if( !isObject( %imap ) )
|
||||
return;
|
||||
|
||||
%this.addDatablock( %fileBase, false );
|
||||
}
|
||||
|
||||
function AssetBrowser::onDropSoundFile(%this, %filePath)
|
||||
{
|
||||
if(!%this.isVisible())
|
||||
return;
|
||||
|
||||
// File Information madness
|
||||
%fileName = %filePath;
|
||||
%fileOnlyName = fileName( %fileName );
|
||||
%fileBase = validateDatablockName(fileBase( %fileName ) @ "ImageMap");
|
||||
|
||||
// [neo, 5/17/2007 - #3117]
|
||||
// Check if the file being dropped is already in data/images or a sub dir by checking if
|
||||
// the file path up to length of check path is the same as check path.
|
||||
%defaultPath = EditorSettings.value( "WorldEditor/defaultMaterialsPath" );
|
||||
|
||||
%checkPath = expandFilename( "^"@%defaultPath );
|
||||
%fileOnlyPath = expandFileName( %filePath ); //filePath( expandFileName( %filePath ) );
|
||||
%fileBasePath = getSubStr( %fileOnlyPath, 0, strlen( %checkPath ) );
|
||||
|
||||
if( %checkPath !$= %fileBasePath )
|
||||
{
|
||||
// No match so file is from outside images directory and we need to copy it in
|
||||
%fileNewLocation = expandFilename("^"@%defaultPath) @ "/" @ fileBase( %fileName ) @ fileExt( %fileName );
|
||||
|
||||
// Move to final location
|
||||
if( !pathCopy( %filePath, %fileNewLocation ) )
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Already in images path somewhere so just link to it
|
||||
%fileNewLocation = %filePath;
|
||||
}
|
||||
|
||||
addResPath( filePath( %fileNewLocation ) );
|
||||
|
||||
%matName = fileBase( %fileName );
|
||||
|
||||
// Create Material
|
||||
%imap = new Material(%matName)
|
||||
{
|
||||
mapTo = fileBase( %matName );
|
||||
diffuseMap[0] = %defaultPath @ "/" @ fileBase( %fileName ) @ fileExt( %fileName );
|
||||
};
|
||||
//%imap.setName( %fileBase );
|
||||
//%imap.imageName = %fileNewLocation;
|
||||
//%imap.imageMode = "FULL";
|
||||
//%imap.filterPad = false;
|
||||
//%imap.compile();
|
||||
|
||||
%diffusecheck = %imap.diffuseMap[0];
|
||||
|
||||
// Bad Creation!
|
||||
if( !isObject( %imap ) )
|
||||
return;
|
||||
|
||||
%this.addDatablock( %fileBase, false );
|
||||
}
|
||||
|
||||
function AssetBrowser::onEndDropFiles( %this )
|
||||
{
|
||||
if(!%this.isVisible())
|
||||
return;
|
||||
|
||||
//we have assets to import, so go ahead and display the window for that now
|
||||
AssetImportCtrl.setHidden(false);
|
||||
ImportAssetWindow.visible = true;
|
||||
//ImportAssetWindow.validateAssets();
|
||||
|
||||
ImportAssetWindow.refresh();
|
||||
ImportAssetWindow.selectWindow();
|
||||
|
||||
%hasIssues = ImportAssetWindow.validateAssets();
|
||||
|
||||
//If we have a valid config file set and we've set to auto-import, and we have no
|
||||
//issues for importing, then go ahead and run the import immediately, don't
|
||||
//bother showing the window.
|
||||
//If any of these conditions fail, we'll display the import window so it can be handled
|
||||
//by the user
|
||||
if(ImportAssetWindow.importConfigsList.count() != 0 &&
|
||||
EditorSettings.value("Assets/AssetImporDefaultConfig") !$= "" &&
|
||||
EditorSettings.value("Assets/AutoImport", false) == true
|
||||
&& %hasIssues == false)
|
||||
{
|
||||
AssetImportCtrl.setHidden(true);
|
||||
ImportAssetWindow.visible = false;
|
||||
|
||||
//Go ahead and check if we have any issues, and if not, run the import!
|
||||
ImportAssetWindow.ImportAssets();
|
||||
}
|
||||
else
|
||||
{
|
||||
//we have assets to import, so go ahead and display the window for that now
|
||||
AssetImportCtrl.setHidden(false);
|
||||
ImportAssetWindow.visible = true;
|
||||
ImportAssetWindow.selectWindow();
|
||||
}
|
||||
|
||||
// Update object library
|
||||
GuiFormManager::SendContentMessage($LBCreateSiderBar, %this, "refreshAll 1");
|
||||
|
||||
|
|
@ -503,9 +407,6 @@ function ImportAssetWindow::onWake(%this)
|
|||
//Lets refresh our list
|
||||
if(!ImportAssetWindow.isVisible())
|
||||
return;
|
||||
|
||||
$AssetBrowser::importConfigsFile = "tools/assetBrowser/assetImportConfigs.xml";
|
||||
$AssetBrowser::currentImportConfig = "";
|
||||
|
||||
if(!isObject(AssetImportSettings))
|
||||
{
|
||||
|
|
@ -526,7 +427,11 @@ function ImportAssetWindow::onWake(%this)
|
|||
|
||||
function ImportAssetWindow::reloadImportOptionConfigs(%this)
|
||||
{
|
||||
ImportAssetWindow.importConfigsList = new ArrayObject();
|
||||
if(!isObject(ImportAssetWindow.importConfigsList))
|
||||
ImportAssetWindow.importConfigsList = new ArrayObject();
|
||||
else
|
||||
ImportAssetWindow.importConfigsList.empty();
|
||||
|
||||
ImportAssetConfigList.clear();
|
||||
|
||||
%xmlDoc = new SimXMLDocument();
|
||||
|
|
@ -1168,10 +1073,12 @@ function ImportAssetWindow::validateAssets(%this)
|
|||
//Clear any status
|
||||
%this.resetAssetsValidationStatus();
|
||||
|
||||
ImportAssetWindow.importIssues = false;
|
||||
|
||||
%id = ImportAssetTree.getChild(1);
|
||||
%hasIssues = %this.validateAsset(%id);
|
||||
|
||||
if(%hasIssues)
|
||||
if(ImportAssetWindow.importIssues == false)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
|
|
@ -1179,6 +1086,7 @@ function ImportAssetWindow::validateAssets(%this)
|
|||
|
||||
function ImportAssetWindow::validateAsset(%this, %id)
|
||||
{
|
||||
|
||||
%moduleName = ImportAssetModuleList.getText();
|
||||
|
||||
while (%id > 0)
|
||||
|
|
@ -1229,21 +1137,17 @@ function ImportAssetWindow::validateAsset(%this, %id)
|
|||
{
|
||||
%foundCollision = true;
|
||||
|
||||
%assetItem.status = "Warning";
|
||||
%assetItem.status = "error";
|
||||
%assetItem.statusType = "DuplicateAsset";
|
||||
%assetItem.statusInfo = "Duplicate asset names found with the target module!\nAsset \"" @
|
||||
%assetItem.assetName @ "\" of type \"" @ %assetItem.assetType @ "\" has a matching name.\nPlease rename it and try again!";
|
||||
|
||||
//Clean up our queries
|
||||
%assetQuery.delete();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(%foundCollision == true)
|
||||
{
|
||||
%hasIssues = true;
|
||||
|
||||
//yup, a collision, prompt for the change and bail out
|
||||
/*MessageBoxOK( "Error!", "Duplicate asset names found with the target module!\nAsset \"" @
|
||||
%assetItemA.assetName @ "\" of type \"" @ %assetItemA.assetType @ "\" has a matching name.\nPlease rename it and try again!");*/
|
||||
|
|
@ -1259,7 +1163,6 @@ function ImportAssetWindow::validateAsset(%this, %id)
|
|||
//Check if we were given a file path(so not generated) but somehow isn't a valid file
|
||||
if(%assetItem.filePath !$= "" && !%assetItem.generatedAsset && !isFile(%assetItem.filePath))
|
||||
{
|
||||
%hasIssues = true;
|
||||
%assetItem.status = "error";
|
||||
%assetItem.statusType = "MissingFile";
|
||||
%assetItem.statusInfo = "Unable to find file to be imported. Please select asset file.";
|
||||
|
|
@ -1273,6 +1176,9 @@ function ImportAssetWindow::validateAsset(%this, %id)
|
|||
}
|
||||
}
|
||||
|
||||
if(%assetItem.status $= "error")
|
||||
ImportAssetWindow.importIssues = true;
|
||||
|
||||
if(ImportAssetTree.isParentItem(%id))
|
||||
{
|
||||
%childItem = ImportAssetTree.getChild(%id);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,9 @@ function ImportAssetConfigList::onSelect( %this, %id, %text )
|
|||
ImportAssetWindow.activeImportConfigIndex = %id;
|
||||
ImportAssetWindow.activeImportConfig = ImportAssetWindow.importConfigsList.getKey(%id);
|
||||
|
||||
AssetBrowser.reloadImportingFiles();
|
||||
//If we were trying to import anything, refresh it with the new config
|
||||
if( AssetBrowser.importingFilesArray.count() != 0)
|
||||
AssetBrowser.reloadImportingFiles();
|
||||
}
|
||||
|
||||
function setupImportConfigSettingsList()
|
||||
|
|
@ -428,8 +430,9 @@ function ImportOptionsConfigList::changeEditorSetting(%this, %varName, %value)
|
|||
|
||||
if(%oldValue !$= %value)
|
||||
{
|
||||
%id = %this.getSelectedRow();
|
||||
%this.setSelectedRow(%id);
|
||||
%scollPos = ImportAssetConfigEditorScroll.getScrollPosition();
|
||||
ImportAssetConfigEditorWindow.populateConfigList(ImportAssetWindow.activeImportConfig);
|
||||
ImportAssetConfigEditorScroll.setScrollPosition(%scollPos.x, %scollPos.y);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ function AssetBrowser::duplicateComponentAsset(%this, %assetId)
|
|||
|
||||
}
|
||||
|
||||
function AssetBrowser::renameGameObjectAsset(%this, %assetDef, %newAssetId, %originalName, %newName)
|
||||
function AssetBrowser::renameComponentAsset(%this, %assetDef, %newAssetId, %originalName, %newName)
|
||||
{
|
||||
%assetPath = AssetDatabase.getAssetFilePath(%newAssetId);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -5,9 +5,11 @@ function AssetBrowser::createGUIAsset(%this)
|
|||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/GUIs/" @ %assetName @ ".asset.taml";
|
||||
%guipath = %modulePath @ "/GUIs/" @ %assetName @ ".gui";
|
||||
%scriptPath = %modulePath @ "/GUIs/" @ %assetName @ ".cs";
|
||||
%assetPath = AssetBrowser.currentAddress @ "/";
|
||||
|
||||
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
|
||||
%guipath = %assetPath @ %assetName @ ".gui";
|
||||
%scriptPath = %assetPath @ %assetName @ ".cs";
|
||||
|
||||
%asset = new GUIAsset()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ function AssetBrowser::importImageAsset(%this, %assetItem)
|
|||
%assetImportSuccessful = false;
|
||||
%assetId = %moduleName@":"@%assetName;
|
||||
|
||||
%assetPath = "data/" @ %moduleName @ "/Images";
|
||||
%assetPath = AssetBrowser.currentAddress @ "/";
|
||||
%assetFullPath = %assetPath @ "/" @ fileName(%filePath);
|
||||
|
||||
%newAsset = new ImageAsset()
|
||||
|
|
|
|||
|
|
@ -5,14 +5,20 @@ function AssetBrowser::createLevelAsset(%this)
|
|||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/levels/" @ %assetName @ ".asset.taml";
|
||||
%levelPath = %modulePath @ "/levels/" @ %assetName @ ".mis";
|
||||
%assetPath = AssetBrowser.currentAddress @ "/";
|
||||
|
||||
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
|
||||
%levelPath = %assetPath @ %assetName @ ".mis";
|
||||
|
||||
%asset = new LevelAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
LevelFile = %assetName @ ".mis";
|
||||
DecalsFile = %assetName @ ".mis.decals";
|
||||
PostFXPresetFile = %assetName @ ".postfxpreset.cs";
|
||||
ForestFile = %assetName @ ".forest";
|
||||
NavmeshFile = %assetName @ ".nav";
|
||||
LevelName = AssetBrowser.newAssetSettings.levelName;
|
||||
AssetDescription = AssetBrowser.newAssetSettings.description;
|
||||
PreviewImage = AssetBrowser.newAssetSettings.levelPreviewImage;
|
||||
|
|
@ -24,6 +30,10 @@ function AssetBrowser::createLevelAsset(%this)
|
|||
{
|
||||
echo("Unable to copy template level file!");
|
||||
}
|
||||
|
||||
//Generate the associated files
|
||||
DecalManagerSave( %assetPath @ %asset.DecalsFile );
|
||||
PostFXManager::savePresetHandler( %assetPath @ %asset.PostFXPresetFile );
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
|
|
|||
|
|
@ -278,10 +278,10 @@ function AssetBrowser::importMaterialAsset(%this, %assetItem)
|
|||
%assetImportSuccessful = false;
|
||||
%assetId = %moduleName@":"@%assetName;
|
||||
|
||||
%assetPath = "data/" @ %moduleName @ "/materials";
|
||||
%tamlpath = %assetPath @ "/" @ %assetName @ ".asset.taml";
|
||||
%sgfPath = %assetPath @ "/" @ %assetName @ ".sgf";
|
||||
%scriptPath = %assetPath @ "/" @ %assetName @ ".cs";
|
||||
%assetPath = AssetBrowser.currentAddress @ "/";
|
||||
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
|
||||
%sgfPath = %assetPath @ %assetName @ ".sgf";
|
||||
%scriptPath = %assetPath @ %assetName @ ".cs";
|
||||
|
||||
%newAsset = new MaterialAsset()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,10 +3,12 @@ function AssetBrowser::createScriptAsset(%this)
|
|||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/scripts/" @ %assetName @ ".asset.taml";
|
||||
%scriptPath = %modulePath @ "/scripts/" @ %assetName @ ".cs";
|
||||
%assetPath = AssetBrowser.currentAddress @ "/";
|
||||
|
||||
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
|
||||
%scriptPath = %assetPath @ %assetName @ ".cs";
|
||||
|
||||
%asset = new ScriptAsset()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,8 +5,10 @@ function AssetBrowser::createShapeAsset(%this)
|
|||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/shapes/" @ %assetName @ ".asset.taml";
|
||||
%shapeFilePath = %modulePath @ "/shapes/" @ %assetName @ ".dae";
|
||||
%assetPath = AssetBrowser.currentAddress @ "/";
|
||||
|
||||
%tamlpath = %assetPath @ %assetName @ ".asset.taml";
|
||||
%shapeFilePath = %assetPath @ %assetName @ ".dae";
|
||||
|
||||
%asset = new ShapeAsset()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,5 +1,38 @@
|
|||
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)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,70 @@
|
|||
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)
|
||||
{
|
||||
TerrainMaterialDlg.show(0, 0, 0);
|
||||
TerrainMaterialDlg.setActiveMaterial(%assetDef.assetName);
|
||||
}
|
||||
|
||||
function AssetBrowser::duplicateTerrainMaterialAsset(%this, %assetDef, %targetModule)
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ function AssetBrowser::refreshAsset(%this, %assetId)
|
|||
function AssetBrowser::renameAsset(%this)
|
||||
{
|
||||
//Find out what type it is
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
//%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
|
||||
%curFirstResponder = AssetBrowser.getFirstResponder();
|
||||
|
||||
|
|
@ -92,36 +92,56 @@ function AssetBrowser::performRenameAsset(%this, %originalAssetName, %newName)
|
|||
//if the name is different to the asset's original name, rename it!
|
||||
if(%originalAssetName !$= %newName)
|
||||
{
|
||||
%moduleName = AssetBrowser.selectedModule;
|
||||
|
||||
//do a rename!
|
||||
%success = AssetDatabase.renameDeclaredAsset(%moduleName @ ":" @ %originalAssetName, %moduleName @ ":" @ %newName);
|
||||
|
||||
if(%success)
|
||||
echo("AssetBrowser - renaming of asset " @ %moduleName @ ":" @ %originalAssetName @ " to " @ %moduleName @ ":" @ %newName @ " was a success.");
|
||||
else
|
||||
echo("AssetBrowser - renaming of asset " @ %moduleName @ ":" @ %originalAssetName @ " to " @ %moduleName @ ":" @ %newName @ " was a failure.");
|
||||
|
||||
if(%success)
|
||||
if(EditAssetPopup.assetType !$= "Folder")
|
||||
{
|
||||
%newAssetId = %moduleName @ ":" @ %newName;
|
||||
%assetPath = AssetDatabase.getAssetFilePath(%newAssetId);
|
||||
%moduleName = AssetBrowser.selectedModule;
|
||||
|
||||
//Rename any associated files as well
|
||||
%assetDef = AssetDatabase.acquireAsset(%newAssetId);
|
||||
%assetType = %assetDef.getClassName();
|
||||
//do a rename!
|
||||
%success = AssetDatabase.renameDeclaredAsset(%moduleName @ ":" @ %originalAssetName, %moduleName @ ":" @ %newName);
|
||||
|
||||
//rename the file to match
|
||||
%path = filePath(%assetPath);
|
||||
if(%success)
|
||||
echo("AssetBrowser - renaming of asset " @ %moduleName @ ":" @ %originalAssetName @ " to " @ %moduleName @ ":" @ %newName @ " was a success.");
|
||||
else
|
||||
echo("AssetBrowser - renaming of asset " @ %moduleName @ ":" @ %originalAssetName @ " to " @ %moduleName @ ":" @ %newName @ " was a failure.");
|
||||
|
||||
//Do the rename command
|
||||
%buildCommand = %this @ ".rename" @ %assetType @ "(" @ %assetDef @ "," @ %newAssetId @ ");";
|
||||
eval(%buildCommand);
|
||||
if(%success)
|
||||
{
|
||||
%newAssetId = %moduleName @ ":" @ %newName;
|
||||
%assetPath = AssetDatabase.getAssetFilePath(%newAssetId);
|
||||
|
||||
//Rename any associated files as well
|
||||
%assetDef = AssetDatabase.acquireAsset(%newAssetId);
|
||||
%assetType = %assetDef.getClassName();
|
||||
|
||||
//rename the file to match
|
||||
%path = filePath(%assetPath);
|
||||
|
||||
//Do the rename command
|
||||
%buildCommand = %this @ ".rename" @ %assetType @ "(" @ %assetDef @ "," @ %newAssetId @ ");";
|
||||
eval(%buildCommand);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
%buildCommand = %this @ ".renameFolder(\"" @ EditAssetPopup.assetId @ "\",\"" @ %newName @ "\");";
|
||||
eval(%buildCommand);
|
||||
}
|
||||
}
|
||||
|
||||
//Make sure everything is refreshed
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
//Update the selection to immediately jump to the new asset
|
||||
AssetBrowser-->filterTree.clearSelection();
|
||||
%ModuleItem = AssetBrowser-->filterTree.findItemByName(%moduleName);
|
||||
%assetTypeId = AssetBrowser-->filterTree.findChildItemByName(%ModuleItem, %assetType);
|
||||
|
||||
AssetBrowser-->filterTree.selectItem(%assetTypeId);
|
||||
|
||||
%selectedItem = AssetBrowser-->filterTree.getSelectedItem();
|
||||
AssetBrowser-->filterTree.scrollVisibleByObjectId(%selectedItem);
|
||||
|
||||
AssetBrowser-->filterTree.buildVisibleTree();
|
||||
}
|
||||
|
||||
function AssetNameField::onReturn(%this)
|
||||
|
|
@ -132,6 +152,26 @@ function AssetNameField::onReturn(%this)
|
|||
AssetBrowser.performRenameAsset(%this.originalAssetName, %this.getText());
|
||||
}
|
||||
|
||||
//------------------------------------------------------------
|
||||
function AssetBrowser::moveAsset(%this, %destination)
|
||||
{
|
||||
if(EditAssetPopup.assetType $= "Folder")
|
||||
{
|
||||
//Do any cleanup required given the type
|
||||
if(%this.isMethod("moveFolder"))
|
||||
eval(%this @ ".moveFolder("@EditAssetPopup.assetId@",\""@%destination@"\");");
|
||||
}
|
||||
else
|
||||
{
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
%assetType = AssetDatabase.getAssetType(EditAssetPopup.assetType);
|
||||
|
||||
//Do any cleanup required given the type
|
||||
if(%this.isMethod("move"@%assetType))
|
||||
eval(%this @ ".move"@%assetType@"("@%assetDef@");");
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------
|
||||
|
||||
function AssetBrowser::duplicateAsset(%this, %targetModule)
|
||||
|
|
@ -157,10 +197,10 @@ function AssetBrowser::duplicateAsset(%this, %targetModule)
|
|||
function AssetBrowser::deleteAsset(%this)
|
||||
{
|
||||
//Find out what type it is
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
%assetType = %assetDef.getClassName();
|
||||
//%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
//%assetType = %assetDef.getClassName();
|
||||
|
||||
MessageBoxOKCancel("Warning!", "This will delete the selected asset and the files associated to it, do you wish to continue?",
|
||||
MessageBoxOKCancel("Warning!", "This will delete the selected content and the files associated to it, do you wish to continue?",
|
||||
"AssetBrowser.confirmDeleteAsset();", "");
|
||||
}
|
||||
|
||||
|
|
@ -169,14 +209,23 @@ function AssetBrowser::confirmDeleteAsset(%this)
|
|||
%currentSelectedItem = AssetBrowserFilterTree.getSelectedItem();
|
||||
%currentItemParent = AssetBrowserFilterTree.getParentItem(%currentSelectedItem);
|
||||
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
%assetType = AssetDatabase.getAssetType(EditAssetPopup.assetId);
|
||||
|
||||
//Do any cleanup required given the type
|
||||
if(%this.isMethod("delete"@%assetType))
|
||||
eval(%this @ ".delete"@%assetType@"("@%assetDef@");");
|
||||
|
||||
AssetDatabase.deleteAsset(EditAssetPopup.assetId, false);
|
||||
if(EditAssetPopup.assetType $= "Folder")
|
||||
{
|
||||
//Do any cleanup required given the type
|
||||
if(%this.isMethod("deleteFolder"))
|
||||
eval(%this @ ".deleteFolder(\""@EditAssetPopup.assetId@"\");");
|
||||
}
|
||||
else
|
||||
{
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
%assetType = AssetDatabase.getAssetType(EditAssetPopup.assetType);
|
||||
|
||||
//Do any cleanup required given the type
|
||||
if(%this.isMethod("delete"@%assetType))
|
||||
eval(%this @ ".delete"@%assetType@"("@%assetDef@");");
|
||||
|
||||
AssetDatabase.deleteAsset(EditAssetPopup.assetId, false);
|
||||
}
|
||||
|
||||
%this.loadFilters();
|
||||
|
||||
|
|
|
|||
|
|
@ -191,6 +191,18 @@ function CreateNewAsset()
|
|||
%callbackCommand = "" @ AssetBrowser_newAsset.callbackFunc @ "(\"" @ %moduleName @ ":" @ %assetName @ "\");";
|
||||
eval(%callbackCommand);
|
||||
}
|
||||
|
||||
//Update the selection to immediately jump to the new asset
|
||||
AssetBrowser-->filterTree.clearSelection();
|
||||
%ModuleItem = AssetBrowser-->filterTree.findItemByName(%moduleName);
|
||||
%assetTypeId = AssetBrowser-->filterTree.findChildItemByName(%ModuleItem, %assetType);
|
||||
|
||||
AssetBrowser-->filterTree.selectItem(%assetTypeId);
|
||||
|
||||
%selectedItem = AssetBrowser-->filterTree.getSelectedItem();
|
||||
AssetBrowser-->filterTree.scrollVisibleByObjectId(%selectedItem);
|
||||
|
||||
AssetBrowser-->filterTree.buildVisibleTree();
|
||||
}
|
||||
|
||||
function ParentComponentList::onWake(%this)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,8 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
|
||||
AddNewModulePopup.enableItem(1, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if( !isObject( EditAssetPopup ) )
|
||||
{
|
||||
new PopupMenu( EditAssetPopup )
|
||||
|
|
@ -55,9 +56,9 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
item[ 5 ] = "-";
|
||||
Item[ 6 ] = "Duplicate Asset" TAB "" TAB "AssetBrowser.duplicateAsset();";
|
||||
item[ 7 ] = "-";
|
||||
item[ 8 ] = "Re-Import Asset" TAB "" TAB "AssetBrowser.reImportAsset();";
|
||||
item[ 9 ] = "-";
|
||||
item[ 10 ] = "Delete Asset" TAB "" TAB "AssetBrowser.deleteAsset();";
|
||||
//item[ 8 ] = "Re-Import Asset" TAB "" TAB "AssetBrowser.reImportAsset();";
|
||||
//item[ 9 ] = "-";
|
||||
item[ 8 ] = "Delete Asset" TAB "" TAB "AssetBrowser.deleteAsset();";
|
||||
|
||||
jumpFileName = "";
|
||||
jumpLineNumber = "";
|
||||
|
|
@ -105,20 +106,23 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
//isPopup = true;
|
||||
|
||||
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[ 2 ] = "-";
|
||||
item[ 3 ] = "Create Shape" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"Shape\", AssetBrowser.selectedModule);";
|
||||
item[ 4 ] = "Create Shape Animation" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ShapeAnimationAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewShapeAnimationAsset(\"NewShapeAnimation\", AssetBrowser.selectedModule);";
|
||||
item[ 5 ] = "-";
|
||||
item[ 6 ] = "Create GUI" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"GUIAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewGUIAsset(\"NewGUI\", AssetBrowser.selectedModule);";
|
||||
item[ 7 ] = "-";
|
||||
item[ 8 ] = "Create Post Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"PostEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewPostEffectAsset(\"NewPostEffect\", AssetBrowser.selectedModule);";
|
||||
item[ 9 ] = "-";
|
||||
item[ 10 ] = "Create Sound" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"SoundAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewSoundAsset(\"NewSound\", AssetBrowser.selectedModule);";
|
||||
item[ 11 ] = "-";
|
||||
item[ 12 ] = "Create Particle Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ParticleEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewParticleEffectAsset(\"NewParticleEffect\", AssetBrowser.selectedModule);";
|
||||
item[ 13 ] = "-";
|
||||
item[ 14 ] = "Create Cubemap" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CubemapAsset\", AssetBrowser.selectedModule);";
|
||||
item[ 1 ] = "Create Terrain Material" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainMaterialAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewImageAsset(\"NewImage\", AssetBrowser.selectedModule);";
|
||||
item[ 2 ] = "Create Image" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ImageAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewImageAsset(\"NewImage\", AssetBrowser.selectedModule);";
|
||||
item[ 3 ] = "-";
|
||||
item[ 4 ] = "Create Terrain Data" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"TerrainAsset\", AssetBrowser.selectedModule);";
|
||||
item[ 5 ] = "-";
|
||||
item[ 6 ] = "Create Shape" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"Shape\", AssetBrowser.selectedModule);";
|
||||
item[ 7 ] = "Create Shape Animation" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ShapeAnimationAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewShapeAnimationAsset(\"NewShapeAnimation\", AssetBrowser.selectedModule);";
|
||||
item[ 8 ] = "-";
|
||||
item[ 9 ] = "Create GUI" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"GUIAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewGUIAsset(\"NewGUI\", AssetBrowser.selectedModule);";
|
||||
item[ 10 ] = "-";
|
||||
item[ 11 ] = "Create Post Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"PostEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewPostEffectAsset(\"NewPostEffect\", AssetBrowser.selectedModule);";
|
||||
item[ 12 ] = "-";
|
||||
item[ 13 ] = "Create Sound" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"SoundAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewSoundAsset(\"NewSound\", 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);";
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -148,15 +152,17 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
|
||||
item[0] = "Create Code Asset" TAB AddNewScriptAssetPopup;
|
||||
item[0] = "Create Folder" TAB "" TAB "AssetBrowser.CreateNewFolder();";
|
||||
item[1] = "-";
|
||||
item[2] = "Create Art Asset" TAB AddNewArtAssetPopup;
|
||||
item[2] = "Create Code Asset" TAB AddNewScriptAssetPopup;
|
||||
item[3] = "-";
|
||||
item[4] = "Create Level" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"LevelAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewLevelAsset(\"NewLevel\", AssetBrowser.selectedModule);";
|
||||
item[4] = "Create Art Asset" TAB AddNewArtAssetPopup;
|
||||
item[5] = "-";
|
||||
item[6] = "Create C++ Asset" TAB AddNewCppAssetPopup;
|
||||
item[6] = "Create Level" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"LevelAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewLevelAsset(\"NewLevel\", AssetBrowser.selectedModule);";
|
||||
item[7] = "-";
|
||||
item[8] = "Create New Module" TAB "" TAB "AssetBrowser.CreateNewModule();";
|
||||
item[8] = "Create C++ Asset" TAB AddNewCppAssetPopup;
|
||||
item[9] = "-";
|
||||
item[10] = "Create New Module" TAB "" TAB "AssetBrowser.CreateNewModule();";
|
||||
|
||||
};
|
||||
}
|
||||
|
|
@ -181,10 +187,27 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
}
|
||||
|
||||
//Some assets are not yet ready/implemented, so disable their creation here
|
||||
AddNewArtAssetPopup.enableItem(3, false); //shape
|
||||
AddNewArtAssetPopup.enableItem(4, false); //shape animation
|
||||
AddNewArtAssetPopup.enableItem(10, false); //sound asset
|
||||
AddNewArtAssetPopup.enableItem(12, false); //particle effect
|
||||
AddNewArtAssetPopup.enableItem(6, false); //shape
|
||||
AddNewArtAssetPopup.enableItem(7, false); //shape animation
|
||||
AddNewArtAssetPopup.enableItem(13, false); //sound asset
|
||||
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 ) )
|
||||
{
|
||||
|
|
@ -198,6 +221,38 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
};
|
||||
}
|
||||
|
||||
//Asset Preview size presets
|
||||
if( !isObject( AssetPreviewSizePopup ) )
|
||||
{
|
||||
new PopupMenu( AssetPreviewSizePopup )
|
||||
{
|
||||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
|
||||
item[ 0 ] = "Small" TAB "" TAB "AssetBrowser.setPreviewSize(\"Small\");";
|
||||
item[ 1 ] = "Medium" TAB "" TAB "AssetBrowser.setPreviewSize(\"Medium\");";
|
||||
Item[ 2 ] = "Large" TAB "" TAB "AssetBrowser.setPreviewSize(\"Large\");";
|
||||
};
|
||||
|
||||
AssetPreviewSizePopup.checkItem(0, true);
|
||||
}
|
||||
|
||||
if( !isObject( AssetTypeListPopup ) )
|
||||
{
|
||||
new PopupMenu( AssetTypeListPopup )
|
||||
{
|
||||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
//isPopup = true;
|
||||
};
|
||||
|
||||
/*for(%i=0; %i < AssetFilterTypeList.Count(); %i++)
|
||||
{
|
||||
%assetTypeName = AssetFilterTypeList.getKey(%i);
|
||||
AssetTypeListPopup.insertItem(%i, %assetTypeName, "", "AssetBrowser.toggleAssetTypeFilter(" @ %i @ ");");
|
||||
}*/
|
||||
}
|
||||
|
||||
//Browser visibility menu
|
||||
if( !isObject( BrowserVisibilityPopup ) )
|
||||
{
|
||||
|
|
@ -208,13 +263,26 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
//isPopup = true;
|
||||
|
||||
item[ 0 ] = "Toggle Show Core Modules" TAB "" TAB "AssetBrowser.viewCoreModulesFilter();";
|
||||
item[ 1 ] = "Toggle Only Show Modules with Assets" TAB "" TAB "AssetBrowser.viewPopulatedModulesFilter();";
|
||||
Item[ 2 ] = "-";
|
||||
item[ 3 ] = "Show Assets as list" TAB "" TAB "AssetBrowser.viewListFilter();";
|
||||
Item[ 4 ] = "Show Assets with tags" TAB "" TAB "AssetBrowser.viewTagsFilter();";
|
||||
item[ 1 ] = "Toggle Show Tools Modules" TAB "" TAB "AssetBrowser.viewToolsModulesFilter();";
|
||||
item[ 2 ] = "Toggle Only Show Modules with Assets" TAB "" TAB "AssetBrowser.viewPopulatedModulesFilter();";
|
||||
Item[ 3 ] = "-";
|
||||
item[ 4 ] = "Show Folders" TAB "" TAB "AssetBrowser.toggleShowingFolders();";
|
||||
item[ 5 ] = "Show Empty Folders" TAB "" TAB "AssetBrowser.toggleShowingEmptyFolders();";
|
||||
item[ 6 ] = "-";
|
||||
item[ 7 ] = "Filter by Asset Type" TAB AssetTypeListPopup;
|
||||
item[ 8 ] = "-";
|
||||
item[ 9 ] = "Enable Auto-refresh" TAB "" TAB "AssetBrowser.toggleAutorefresh();";
|
||||
Item[ 10 ] = "-";
|
||||
Item[ 11 ] = "Asset Preview Size" TAB AssetPreviewSizePopup;
|
||||
};
|
||||
|
||||
BrowserVisibilityPopup.enableItem(5, false);
|
||||
BrowserVisibilityPopup.enableItem(7, false);
|
||||
BrowserVisibilityPopup.enableItem(9, false);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
//Import Legacy menus
|
||||
if( !isObject( ImportAssetsPopup ) )
|
||||
{
|
||||
|
|
@ -266,6 +334,7 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function AddNewScriptAssetPopupMenu::onSelectItem(%this, %id, %text)
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
};
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 3.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 10 KiB |
|
|
@ -20,7 +20,7 @@
|
|||
minExtent = "8 2";
|
||||
horizSizing = "center";
|
||||
vertSizing = "center";
|
||||
profile = "ToolsGuiDefaultProfile";
|
||||
profile = "ToolsGuiSolidDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "ToolsGuiToolTipProfile";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ function ESettingsWindow::startup( %this )
|
|||
%this.addEditorSettingsPage("ShapeEditor", "Shape Editor");
|
||||
%this.addEditorSettingsPage("NavEditor", "Navigation Editor");
|
||||
%this.addEditorSettingsPage("Theme", "Theme");
|
||||
%this.addEditorSettingsPage("AssetEditing", "Asset Editing");
|
||||
|
||||
%this.addGameSettingsPage("GameGeneral", "General");
|
||||
%this.addGameSettingsPage("Gameplay", "Gameplay");
|
||||
|
|
@ -185,7 +186,7 @@ function SettingsInspector::changeEditorSetting(%this, %varName, %value)
|
|||
%success = ProjectSettings.write();
|
||||
|
||||
if(%oldValue !$= %value)
|
||||
ESettingsWindow.refresh();
|
||||
ESettingsWindow.schedule(15,"refresh");
|
||||
}
|
||||
|
||||
function GuiInspectorVariableGroup::buildOptionsSettingField(%this, %fieldName, %fieldLabel, %fieldDesc, %fieldDefaultVal, %fieldDataVals, %ownerObj)
|
||||
|
|
@ -292,6 +293,12 @@ function ESettingsWindow::getGeneralSettings(%this)
|
|||
SettingsInspector.addSettingsField("WorldEditor/Theme/windowTitleFontColor", "Window Title Text Color", "colorI", "");
|
||||
SettingsInspector.addSettingsField("WorldEditor/Theme/mainTextColor", "Main Text Color", "colorI", "");
|
||||
SettingsInspector.endGroup();
|
||||
|
||||
SettingsInspector.startGroup("Layout");
|
||||
SettingsInspector.addSettingsField("WorldEditor/Layout/LayoutMode", "Editor Layout Mode", "list", "This dictates which layout style the editor should use." @
|
||||
"WARNING - Modern layout is highlight experimental." @
|
||||
"Updating this requires a restart of the program", "Classic,Modern");
|
||||
SettingsInspector.endGroup();
|
||||
}
|
||||
|
||||
function ESettingsWindow::getCameraSettings(%this)
|
||||
|
|
@ -380,6 +387,7 @@ function ESettingsWindow::getThemeSettings(%this)
|
|||
SettingsInspector.addSettingsField("Theme/fieldTextColor", "Field Text Color", "ColorI", "");
|
||||
SettingsInspector.addSettingsField("Theme/fieldTextHLColor", "Field Text Highlight Color", "ColorI", "");
|
||||
SettingsInspector.addSettingsField("Theme/fieldTextSELColor", "Field Text Selected Color", "ColorI", "");
|
||||
SettingsInspector.addSettingsField("Theme/fieldTextNAColor", "Field Text N/A Color", "ColorI", "");
|
||||
|
||||
SettingsInspector.addSettingsField("Theme/fieldBGColor", "Field Background Color", "ColorI", "");
|
||||
SettingsInspector.addSettingsField("Theme/fieldBGHLColor", "Field Background Highlight Color", "ColorI", "");
|
||||
|
|
@ -431,9 +439,38 @@ function ESettingsWindow::getAssetManagementSettings(%this)
|
|||
SettingsInspector.addSettingsField("AssetManagement/Assets/assetExtension", "Asset Extension", "string", "");
|
||||
SettingsInspector.addSettingsField("AssetManagement/Assets/datablockCaching", "Cache Datablocks", "bool", "");
|
||||
//SettingsInspector.addSettingsField("AssetManagement/Assets/moduleExtension", "Module Extension", "string", "");
|
||||
|
||||
SettingsInspector.endGroup();
|
||||
}
|
||||
|
||||
function ESettingsWindow::getAssetEditingSettings(%this)
|
||||
{
|
||||
ImportAssetWindow::reloadImportOptionConfigs();
|
||||
|
||||
for(%i=0; %i < ImportAssetWindow.importConfigsList.Count(); %i++)
|
||||
{
|
||||
%configName = ImportAssetWindow.importConfigsList.getKey(%i);
|
||||
%formattedConfigList = %i == 0 ? %configName : %formattedConfigList @ "," @ %configName;
|
||||
}
|
||||
|
||||
SettingsInspector.startGroup("Assets Importing");
|
||||
SettingsInspector.addSettingsField("Assets/AssetImporDefaultConfig", "Default Asset Import Config", "list", "", %formattedConfigList);
|
||||
SettingsInspector.addSettingsField("Assets/AutoImport", "Automatically Import using default config", "bool", "If on, the asset importing process" @
|
||||
"will attempt to automatically import any inbound assets"@
|
||||
"using the default config, without prompting the import window."@
|
||||
"The window will still display if any issues are detected", "");
|
||||
SettingsInspector.endGroup();
|
||||
|
||||
SettingsInspector.startGroup("Asset Browser");
|
||||
SettingsInspector.addSettingsField("Assets/Browser/showCoreModule", "Show Core Module in Asset Browser", "bool", "");
|
||||
SettingsInspector.addSettingsField("Assets/Browser/showToolsModule", "Show Tools Module in Asset Browser", "bool", "");
|
||||
SettingsInspector.addSettingsField("Assets/Browser/showOnlyPopulatedModule", "Show Only Modules with Assets in Asset Browser", "bool", "");
|
||||
SettingsInspector.addSettingsField("Assets/Browser/showFolders", "Show Folders in Tiles view in Asset Browser", "bool", "");
|
||||
SettingsInspector.addSettingsField("Assets/Browser/showEmptyFolders", "Show Empty Folders in Tiles view in Asset Browser", "bool", "");
|
||||
SettingsInspector.addSettingsField("Assets/Browser/previewTileSize", "Asset Preview Tile Size", "bool", "");
|
||||
SettingsInspector.endGroup();
|
||||
}
|
||||
|
||||
function ESettingsWindow::getGameplaySettings(%this)
|
||||
{
|
||||
SettingsInspector.startGroup("Game Modes");
|
||||
|
|
|
|||
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;
|
||||
|
||||
// fill color
|
||||
opaque = true;
|
||||
opaque = false;
|
||||
fillColor = EditorSettings.value("Theme/tabsColor");
|
||||
fillColorHL = EditorSettings.value("Theme/tabsGLColor");
|
||||
fillColorSEL = EditorSettings.value("Theme/tabsSELColor");
|
||||
|
|
@ -79,7 +79,7 @@ new GuiControlProfile (ToolsGuiDefaultProfile)
|
|||
};
|
||||
|
||||
if( !isObject( ToolsGuiSolidDefaultProfile ) )
|
||||
new GuiControlProfile (ToolsGuiSolidDefaultProfile)
|
||||
new GuiControlProfile (ToolsGuiSolidDefaultProfile : ToolsGuiDefaultProfile)
|
||||
{
|
||||
opaque = true;
|
||||
border = true;
|
||||
|
|
@ -1109,7 +1109,7 @@ singleton GuiControlProfile( ToolsGuiMenuBarProfile )
|
|||
fontColor = EditorSettings.value("Theme/headerTextColor");
|
||||
fontColorSEL = EditorSettings.value("Theme/fieldTextSELColor");
|
||||
fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
|
||||
fontColorNA = EditorSettings.value("Theme/fieldTextSELColor");
|
||||
fontColorNA = EditorSettings.value("Theme/fieldTextNAColor");
|
||||
border = 0;
|
||||
borderThickness = 1;
|
||||
opaque = true;
|
||||
|
|
@ -1123,6 +1123,8 @@ singleton GuiControlProfile( ToolsMenubarProfile : ToolsGuiDefaultProfile )
|
|||
bitmap = "./menubar";
|
||||
category = "Editor";
|
||||
|
||||
opaque = true;
|
||||
|
||||
fillColor = EditorSettings.value("Theme/headerColor");
|
||||
fontColor = EditorSettings.value("Theme/headerTextColor");
|
||||
fontColorHL = EditorSettings.value("Theme/fieldTextHLColor");
|
||||
|
|
|
|||
|
|
@ -1,5 +1,193 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<EditorSettings>
|
||||
<Group name="MeshRoadEditor">
|
||||
<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="topMaterialName">DefaultRoadMaterialTop</Setting>
|
||||
<Setting name="DefaultNormal">0 0 1</Setting>
|
||||
</Group>
|
||||
<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 name="Theme">
|
||||
<Setting name="dividerDarkColor">17 16 15 255</Setting>
|
||||
<Setting name="fieldTextHLColor">234 232 230 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="dividerMidColor">50 49 48 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="fieldBGSELColor">100 98 96 255</Setting>
|
||||
<Setting name="tabsColor">37 36 35 255</Setting>
|
||||
<Setting name="tabsHLColor">50 49 48 255</Setting>
|
||||
<Setting name="headerColor">50 49 48 255</Setting>
|
||||
<Setting name="fieldTextNAColor">77 77 77 255</Setting>
|
||||
<Setting name="tooltipTextColor">255 255 255 255</Setting>
|
||||
<Setting name="headerTextColor">236 234 232 255</Setting>
|
||||
<Setting name="tooltipDividerColor">72 70 68 255</Setting>
|
||||
<Setting name="tabsSELColor">59 58 57 255</Setting>
|
||||
<Setting name="dividerLightColor">96 94 92 255</Setting>
|
||||
</Group>
|
||||
<Group name="GuiEditor">
|
||||
<Setting name="lastPath">tools/worldEditor/gui</Setting>
|
||||
<Setting name="previewResolution">1024 768</Setting>
|
||||
<Group name="Library">
|
||||
<Setting name="viewType">Categorized</Setting>
|
||||
</Group>
|
||||
<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 name="Selection">
|
||||
<Setting name="fullBox">0</Setting>
|
||||
</Group>
|
||||
<Group name="EngineDevelopment">
|
||||
<Setting name="showEditorProfiles">0</Setting>
|
||||
<Setting name="toggleIntoEditor">0</Setting>
|
||||
<Setting name="showEditorGuis">0</Setting>
|
||||
</Group>
|
||||
</Group>
|
||||
<Group name="ShapeEditor">
|
||||
<Setting name="SunAngleZ">135</Setting>
|
||||
<Setting name="gridDimension">40 40</Setting>
|
||||
<Setting name="gridSize">0.1</Setting>
|
||||
<Setting name="showObjBox">1</Setting>
|
||||
<Setting name="AdvancedWndVisible">1</Setting>
|
||||
<Setting name="showNodes">1</Setting>
|
||||
<Setting name="ShowGrid">1</Setting>
|
||||
<Setting name="SunDiffuseColor">255 255 255 255</Setting>
|
||||
<Setting name="SunAngleX">45</Setting>
|
||||
<Setting name="highlightMaterial">1</Setting>
|
||||
<Setting name="backgroundColor">0 0 0 100</Setting>
|
||||
<Setting name="renderMounts">1</Setting>
|
||||
<Setting name="RenderCollision">0</Setting>
|
||||
<Setting name="showBounds">0</Setting>
|
||||
<Setting name="SunAmbientColor">180 180 180 255</Setting>
|
||||
</Group>
|
||||
<Group name="WorldEditor">
|
||||
<Setting name="forceLoadDAE">0</Setting>
|
||||
<Setting name="torsionPath">AssetWork_Debug.exe</Setting>
|
||||
<Setting name="orthoFOV">50</Setting>
|
||||
<Setting name="undoLimit">40</Setting>
|
||||
<Setting name="EditorLayoutMode">Modern</Setting>
|
||||
<Setting name="dropType">screenCenter</Setting>
|
||||
<Setting name="orthoShowGrid">1</Setting>
|
||||
<Setting name="displayType">6</Setting>
|
||||
<Setting name="currentEditor">TerrainPainterPlugin</Setting>
|
||||
<Group name="Images">
|
||||
<Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
|
||||
<Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
|
||||
<Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
|
||||
</Group>
|
||||
<Group name="Docs">
|
||||
<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="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
|
||||
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
|
||||
</Group>
|
||||
<Group name="Theme">
|
||||
<Setting name="windowTitleFontColor">215 215 215 255</Setting>
|
||||
<Setting name="windowTitleFontHLColor">255 255 255 255</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 name="Layout">
|
||||
<Setting name="LayoutMode">Classic</Setting>
|
||||
</Group>
|
||||
</Group>
|
||||
<Group name="AssetCreation">
|
||||
<Setting name="CubemapAssetSubdirectoryFormat"><AssetType>/</Setting>
|
||||
<Setting name="LevelAssetSubdirectoryFormat"><AssetType>/<AssetName>/</Setting>
|
||||
<Setting name="AssetImporDefaultConfig">TestConfig</Setting>
|
||||
<Setting name="PostFXAssetSubdirectoryFormat"><AssetType>/</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 name="LevelInformation">
|
||||
<Setting name="levelsDirectory">data/FPSGameplay/levels</Setting>
|
||||
<Group name="levels">
|
||||
|
|
@ -11,209 +199,51 @@
|
|||
</Group>
|
||||
</Group>
|
||||
</Group>
|
||||
<Group name="MeshRoadEditor">
|
||||
<Setting name="DefaultNormal">0 0 1</Setting>
|
||||
<Setting name="DefaultWidth">10</Setting>
|
||||
<Setting name="HoverSplineColor">255 0 0 255</Setting>
|
||||
<Setting name="sideMaterialName">DefaultRoadMaterialOther</Setting>
|
||||
<Setting name="topMaterialName">DefaultRoadMaterialTop</Setting>
|
||||
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
|
||||
</Group>
|
||||
<Group name="Theme">
|
||||
<Setting name="fieldTextHLColor">234 232 230 255</Setting>
|
||||
<Setting name="tooltipDividerColor">72 70 68 255</Setting>
|
||||
<Setting name="tooltipTextColor">255 255 255 255</Setting>
|
||||
<Setting name="headerColor">50 49 48 255</Setting>
|
||||
<Setting name="fieldBGSELColor">100 98 96 255</Setting>
|
||||
<Setting name="dividerMidColor">50 49 48 255</Setting>
|
||||
<Setting name="dividerDarkColor">17 16 15 255</Setting>
|
||||
<Setting name="dividerLightColor">96 94 92 255</Setting>
|
||||
<Setting name="fieldBGHLColor">72 70 68 255</Setting>
|
||||
<Setting name="fieldTextSELColor">255 255 255 255</Setting>
|
||||
<Setting name="tooltipBGColor">43 43 43 255</Setting>
|
||||
<Setting name="windowBackgroundColor">32 31 30 255</Setting>
|
||||
<Setting name="tabsHLColor">50 49 48 255</Setting>
|
||||
<Setting name="fieldTextColor">178 175 172 255</Setting>
|
||||
<Setting name="fieldBGColor">59 58 57 255</Setting>
|
||||
<Setting name="tabsColor">37 36 35 255</Setting>
|
||||
<Setting name="tabsSELColor">59 58 57 255</Setting>
|
||||
<Setting name="headerTextColor">236 234 232 255</Setting>
|
||||
</Group>
|
||||
<Group name="AxisGizmo">
|
||||
<Setting name="renderInfoText">1</Setting>
|
||||
<Setting name="mouseRotateScalar">0.8</Setting>
|
||||
<Setting name="renderWhenUsed">0</Setting>
|
||||
<Setting name="snapRotations">0</Setting>
|
||||
<Setting name="axisGizmoMaxScreenLen">100</Setting>
|
||||
<Setting name="mouseScaleScalar">0.8</Setting>
|
||||
<Setting name="rotationSnap">15</Setting>
|
||||
<Group name="Grid">
|
||||
<Setting name="snapToGrid">0</Setting>
|
||||
<Setting name="planeDim">500</Setting>
|
||||
<Setting name="renderPlane">0</Setting>
|
||||
<Setting name="gridSize">10 10 10</Setting>
|
||||
<Setting name="gridColor">255 255 255 20</Setting>
|
||||
<Setting name="renderPlaneHashes">0</Setting>
|
||||
<Group name="Assets">
|
||||
<Setting name="AssetImporDefaultConfig">TestConfig</Setting>
|
||||
<Setting name="AutoImport">0</Setting>
|
||||
<Group name="Browser">
|
||||
<Setting name="previewTileSize">small</Setting>
|
||||
</Group>
|
||||
</Group>
|
||||
<Group name="GuiEditor">
|
||||
<Setting name="lastPath">tools/gui</Setting>
|
||||
<Setting name="previewResolution">1024 768</Setting>
|
||||
<Group name="EngineDevelopment">
|
||||
<Setting name="showEditorProfiles">0</Setting>
|
||||
<Setting name="toggleIntoEditor">0</Setting>
|
||||
<Setting name="showEditorGuis">0</Setting>
|
||||
</Group>
|
||||
<Group name="Library">
|
||||
<Setting name="viewType">Categorized</Setting>
|
||||
</Group>
|
||||
<Group name="Snapping">
|
||||
<Setting name="snapToCenters">1</Setting>
|
||||
<Setting name="snapToControls">1</Setting>
|
||||
<Setting name="snap2GridSize">8</Setting>
|
||||
<Setting name="snap2Grid">0</Setting>
|
||||
<Setting name="snapToCanvas">1</Setting>
|
||||
<Setting name="snapToGuides">1</Setting>
|
||||
<Setting name="sensitivity">2</Setting>
|
||||
<Setting name="snapToEdges">1</Setting>
|
||||
</Group>
|
||||
<Group name="Help">
|
||||
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
|
||||
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
|
||||
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
|
||||
</Group>
|
||||
<Group name="Rendering">
|
||||
<Setting name="drawBorderLines">1</Setting>
|
||||
<Setting name="drawGuides">1</Setting>
|
||||
</Group>
|
||||
<Group name="Selection">
|
||||
<Setting name="fullBox">0</Setting>
|
||||
</Group>
|
||||
</Group>
|
||||
<Group name="WorldEditor">
|
||||
<Setting name="orthoFOV">50</Setting>
|
||||
<Setting name="orthoShowGrid">1</Setting>
|
||||
<Setting name="torsionPath">AssetWork_Debug.exe</Setting>
|
||||
<Setting name="forceLoadDAE">0</Setting>
|
||||
<Setting name="displayType">6</Setting>
|
||||
<Setting name="currentEditor">WorldEditorInspectorPlugin</Setting>
|
||||
<Setting name="dropType">screenCenter</Setting>
|
||||
<Setting name="undoLimit">40</Setting>
|
||||
<Group name="Render">
|
||||
<Setting name="showMousePopupInfo">1</Setting>
|
||||
<Setting name="renderObjText">1</Setting>
|
||||
<Setting name="renderSelectionBox">1</Setting>
|
||||
<Setting name="renderObjHandle">1</Setting>
|
||||
<Setting name="renderPopupBackground">1</Setting>
|
||||
</Group>
|
||||
<Group name="Color">
|
||||
<Setting name="popupBackgroundColor">100 100 100 255</Setting>
|
||||
<Setting name="objectTextColor">255 255 255 255</Setting>
|
||||
<Setting name="dragRectColor">255 255 0 255</Setting>
|
||||
<Setting name="objMouseOverColor">0 255 0 255</Setting>
|
||||
<Setting name="selectionBoxColor">255 255 0 255</Setting>
|
||||
<Setting name="objSelectColor">255 0 0 255</Setting>
|
||||
<Setting name="objMouseOverSelectColor">0 0 255 255</Setting>
|
||||
</Group>
|
||||
<Group name="Grid">
|
||||
<Setting name="gridMinorColor">51 51 51 100</Setting>
|
||||
<Setting name="gridColor">102 102 102 100</Setting>
|
||||
<Setting name="gridSize">1</Setting>
|
||||
<Setting name="gridOriginColor">255 255 255 100</Setting>
|
||||
<Setting name="gridSnap">0</Setting>
|
||||
</Group>
|
||||
<Group name="ObjectIcons">
|
||||
<Setting name="fadeIconsEndDist">20</Setting>
|
||||
<Setting name="fadeIconsStartDist">8</Setting>
|
||||
<Setting name="fadeIcons">1</Setting>
|
||||
<Setting name="fadeIconsEndAlpha">0</Setting>
|
||||
<Setting name="fadeIconsStartAlpha">255</Setting>
|
||||
</Group>
|
||||
<Group name="Docs">
|
||||
<Setting name="documentationReference">../../../Documentation/Torque 3D - Script Manual.chm</Setting>
|
||||
<Setting name="documentationLocal">../../../Documentation/Official Documentation.html</Setting>
|
||||
<Setting name="forumURL">http://www.garagegames.com/products/torque-3d/forums</Setting>
|
||||
<Setting name="documentationURL">http://www.garagegames.com/products/torque-3d/documentation/user</Setting>
|
||||
</Group>
|
||||
<Group name="Tools">
|
||||
<Setting name="boundingBoxCollision">0</Setting>
|
||||
<Setting name="dropAtScreenCenterScalar">1</Setting>
|
||||
<Setting name="objectsUseBoxCenter">1</Setting>
|
||||
<Setting name="dropAtScreenCenterMax">100</Setting>
|
||||
<Setting name="snapSoftSize">2</Setting>
|
||||
<Setting name="snapSoft">0</Setting>
|
||||
<Setting name="snapGround">0</Setting>
|
||||
</Group>
|
||||
<Group name="Theme">
|
||||
<Setting name="windowTitleFontHLColor">255 255 255 255</Setting>
|
||||
<Setting name="windowTitleBGColor">50 50 50 255</Setting>
|
||||
<Setting name="windowTitleBGHLColor">48 48 48 255</Setting>
|
||||
<Setting name="windowTitleFontColor">215 215 215 255</Setting>
|
||||
<Setting name="windowTitleBGNAColor">180 180 180 255</Setting>
|
||||
</Group>
|
||||
<Group name="Images">
|
||||
<Setting name="lockedHandle">tools/worldEditor/images/LockedHandle</Setting>
|
||||
<Setting name="selectHandle">tools/worldEditor/images/SelectHandle</Setting>
|
||||
<Setting name="defaultHandle">tools/worldEditor/images/DefaultHandle</Setting>
|
||||
</Group>
|
||||
</Group>
|
||||
<Group name="ShapeEditor">
|
||||
<Setting name="SunAmbientColor">180 180 180 255</Setting>
|
||||
<Setting name="RenderCollision">0</Setting>
|
||||
<Setting name="showBounds">0</Setting>
|
||||
<Setting name="renderMounts">1</Setting>
|
||||
<Setting name="gridSize">0.1</Setting>
|
||||
<Setting name="SunAngleZ">135</Setting>
|
||||
<Setting name="showNodes">1</Setting>
|
||||
<Setting name="highlightMaterial">1</Setting>
|
||||
<Setting name="showObjBox">1</Setting>
|
||||
<Setting name="SunDiffuseColor">255 255 255 255</Setting>
|
||||
<Setting name="backgroundColor">0 0 0 100</Setting>
|
||||
<Setting name="AdvancedWndVisible">1</Setting>
|
||||
<Setting name="SunAngleX">45</Setting>
|
||||
<Setting name="ShowGrid">1</Setting>
|
||||
<Setting name="gridDimension">40 40</Setting>
|
||||
</Group>
|
||||
<Group name="TerrainEditor">
|
||||
<Setting name="currentAction">lowerHeight</Setting>
|
||||
<Group name="Brush">
|
||||
<Setting name="brushPressure">1</Setting>
|
||||
<Setting name="brushSize">40 40</Setting>
|
||||
<Setting name="maxBrushSize">40 40</Setting>
|
||||
<Setting name="brushSoftness">1</Setting>
|
||||
<Setting name="brushType">ellipse</Setting>
|
||||
</Group>
|
||||
<Group name="ActionValues">
|
||||
<Setting name="setHeightVal">100</Setting>
|
||||
<Setting name="scaleVal">1</Setting>
|
||||
<Setting name="SlopeMinAngle">0</Setting>
|
||||
<Setting name="adjustHeightVal">10</Setting>
|
||||
<Setting name="softSelectRadius">50</Setting>
|
||||
<Setting name="SlopeMaxAngle">90</Setting>
|
||||
<Setting name="softSelectDefaultFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
|
||||
<Setting name="softSelectFilter">1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000</Setting>
|
||||
<Setting name="noiseFactor">1</Setting>
|
||||
<Setting name="smoothFactor">0.1</Setting>
|
||||
</Group>
|
||||
</Group>
|
||||
<Group name="RiverEditor">
|
||||
<Setting name="DefaultNormal">0 0 1</Setting>
|
||||
<Setting name="HoverNodeColor">255 255 255 255</Setting>
|
||||
<Setting name="HoverSplineColor">255 0 0 255</Setting>
|
||||
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
|
||||
<Setting name="DefaultWidth">10</Setting>
|
||||
<Setting name="DefaultDepth">5</Setting>
|
||||
</Group>
|
||||
<Group name="NavEditor">
|
||||
<Setting name="backgroundBuild">1</Setting>
|
||||
<Setting name="SpawnClass">AIPlayer</Setting>
|
||||
<Setting name="spawnDatablock">DefaultPlayerData</Setting>
|
||||
<Setting name="SpawnClass">AIPlayer</Setting>
|
||||
</Group>
|
||||
<Group name="RiverEditor">
|
||||
<Setting name="DefaultNormal">0 0 1</Setting>
|
||||
<Setting name="HoverSplineColor">255 0 0 255</Setting>
|
||||
<Setting name="DefaultWidth">10</Setting>
|
||||
<Setting name="DefaultDepth">5</Setting>
|
||||
<Setting name="HoverNodeColor">255 255 255 255</Setting>
|
||||
<Setting name="SelectedSplineColor">0 255 0 255</Setting>
|
||||
</Group>
|
||||
<Group name="AxisGizmo">
|
||||
<Setting name="rotationSnap">15</Setting>
|
||||
<Setting name="mouseRotateScalar">0.8</Setting>
|
||||
<Setting name="snapRotations">0</Setting>
|
||||
<Setting name="mouseScaleScalar">0.8</Setting>
|
||||
<Setting name="renderInfoText">1</Setting>
|
||||
<Setting name="renderWhenUsed">0</Setting>
|
||||
<Setting name="axisGizmoMaxScreenLen">100</Setting>
|
||||
<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 name="AssetBrowser">
|
||||
<Setting name="previewSize">Small</Setting>
|
||||
</Group>
|
||||
<Group name="RoadEditor">
|
||||
<Setting name="HoverNodeColor">255 255 255 255</Setting>
|
||||
<Setting name="DefaultWidth">10</Setting>
|
||||
<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">
|
||||
<Setting name="materialName">Grid_512_Orange</Setting>
|
||||
|
|
|
|||
|
|
@ -299,6 +299,20 @@
|
|||
function CreateNewTerrainGui::onWake( %this )
|
||||
{
|
||||
%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.clear();
|
||||
|
|
@ -313,8 +327,8 @@ function CreateNewTerrainGui::onWake( %this )
|
|||
%rezList.add( "512", 512 );
|
||||
%rezList.add( "1024", 1024 );
|
||||
%rezList.add( "2048", 2048 );
|
||||
//%rezList.add( "4096", 4096 );
|
||||
%rezList.setSelected( 256 );
|
||||
%rezList.add( "4096", 4096 );
|
||||
%rezList.setSelected( 512 );
|
||||
|
||||
%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);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
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)
|
||||
|
|
@ -489,6 +560,9 @@ function ObjectBuilderGui::process(%this)
|
|||
|
||||
case "TypeFile":
|
||||
%this.createFileType(%i);
|
||||
|
||||
case "TypeTerrainAsset":
|
||||
%this.createTerrainAssetType(%i);
|
||||
|
||||
case "TypeMaterialName":
|
||||
%this.createMaterialNameType(%i);
|
||||
|
|
@ -830,6 +904,7 @@ function ObjectBuilderGui::buildTerrainBlock(%this)
|
|||
%this.createCallback = "ETerrainEditor.attachTerrain();";
|
||||
|
||||
%this.addField("terrainFile", "TypeFile", "Terrain file", "", "*.ter");
|
||||
%this.addField("terrainAsset", "TypeTerrainAsset", "Terrain Asset", "", "");
|
||||
%this.addField("squareSize", "TypeInt", "Square size", "8");
|
||||
|
||||
%this.process();
|
||||
|
|
|
|||
|
|
@ -1885,6 +1885,9 @@ function Editor::open(%this)
|
|||
Canvas.setContent(EditorGui);
|
||||
$isFirstPersonVar = true;
|
||||
EditorGui.syncCameraGui();
|
||||
|
||||
if(EditorSettings.value("WorldEditor/Layout/LayoutMode", "Classic") $= "Modern")
|
||||
togglePanelLayout();
|
||||
}
|
||||
|
||||
function Editor::close(%this, %gui)
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ function toggleEditor(%make)
|
|||
|
||||
//------------------------------------------------------------------------------
|
||||
// The editor action maps are defined in editor.bind.cs
|
||||
GlobalActionMap.bind(keyboard, "f11", toggleEditor);
|
||||
GlobalActionMap.bind(keyboard, "f11", fastLoadWorldEdit);
|
||||
|
||||
|
||||
// The scenario:
|
||||
|
|
|
|||
|
|
@ -60,6 +60,8 @@ EditorSettings.endGroup();
|
|||
|
||||
EditorSettings.beginGroup( "Tools" );
|
||||
EditorSettings.setDefaultValue( "snapGround", "0" );
|
||||
EditorSettings.setDefaultValue( "TerrainSnapOffsetZ", "0" );
|
||||
EditorSettings.setDefaultValue( "OffsetZValue", "0.01" );
|
||||
EditorSettings.setDefaultValue( "snapSoft", "0" );
|
||||
EditorSettings.setDefaultValue( "snapSoftSize", "2.0" );
|
||||
EditorSettings.setDefaultValue( "boundingBoxCollision", "0" );
|
||||
|
|
@ -215,6 +217,8 @@ function EditorGui::readWorldEditorSettings(%this)
|
|||
|
||||
EditorSettings.beginGroup( "Tools" );
|
||||
EWorldEditor.stickToGround = EditorSettings.value("snapGround"); //$pref::WorldEditor::snapGround;
|
||||
EWorldEditor.TerrainSnapOffsetZ = EditorSettings.value("TerrainSnapOffsetZ"); //$pref::WorldEditor::TerrainSnapOffsetZ;
|
||||
EWorldEditor.OffsetZValue = EditorSettings.value("OffsetZValue"); //$pref::WorldEditor::OffsetZValue;
|
||||
EWorldEditor.setSoftSnap( EditorSettings.value("snapSoft") ); //$pref::WorldEditor::snapSoft
|
||||
EWorldEditor.setSoftSnapSize( EditorSettings.value("snapSoftSize") ); //$pref::WorldEditor::snapSoftSize
|
||||
EWorldEditor.boundingBoxCollision = EditorSettings.value("boundingBoxCollision"); //$pref::WorldEditor::boundingBoxCollision;
|
||||
|
|
@ -310,6 +314,8 @@ function EditorGui::writeWorldEditorSettings(%this)
|
|||
|
||||
EditorSettings.beginGroup( "Tools" );
|
||||
EditorSettings.setValue( "snapGround", EWorldEditor.stickToGround ); //$Pref::WorldEditor::snapGround
|
||||
EditorSettings.setValue( "TerrainSnapOffsetZ", EWorldEditor.TerrainSnapOffsetZ ); //$pref::WorldEditor::TerrainSnapOffsetZ;
|
||||
EditorSettings.setValue( "OffsetZValue", EWorldEditor.OffsetZValue ); //$pref::WorldEditor::OffsetZValue;
|
||||
EditorSettings.setValue( "snapSoft", EWorldEditor.getSoftSnap() ); //$Pref::WorldEditor::snapSoft
|
||||
EditorSettings.setValue( "snapSoftSize", EWorldEditor.getSoftSnapSize() ); //$Pref::WorldEditor::snapSoftSize
|
||||
EditorSettings.setValue( "boundingBoxCollision", EWorldEditor.boundingBoxCollision ); //$Pref::WorldEditor::boundingBoxCollision
|
||||
|
|
|
|||
|
|
@ -83,6 +83,20 @@ function TerrainMaterialDlg::onWake( %this )
|
|||
if( !isObject( 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.
|
||||
%this.snapshotMaterials();
|
||||
|
||||
|
|
@ -292,12 +306,33 @@ function TerrainMaterialDlg::changeNormal( %this )
|
|||
%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 )
|
||||
{
|
||||
// Create a unique material name.
|
||||
%matName = getUniqueInternalName( "newMaterial", TerrainMaterialSet, true );
|
||||
/*%matName = getUniqueInternalName( "newMaterial", TerrainMaterialSet, true );
|
||||
|
||||
// Create the new material.
|
||||
%newMat = new TerrainMaterial()
|
||||
|
|
@ -308,12 +343,16 @@ function TerrainMaterialDlg::newMat( %this )
|
|||
%newMat.setFileName( "art/terrains/materials.cs" );
|
||||
|
||||
// Mark it as dirty and to be saved in the default location.
|
||||
ETerrainMaterialPersistMan.setDirty( %newMat, "art/terrains/materials.cs" );
|
||||
|
||||
%matLibTree = %this-->matLibTree;
|
||||
%matLibTree.buildVisibleTree( true );
|
||||
%item = %matLibTree.findItemByObjectId( %newMat );
|
||||
%matLibTree.selectItem( %item );
|
||||
ETerrainMaterialPersistMan.setDirty( %newMat, "art/terrains/materials.cs" );*/
|
||||
|
||||
%scene = getRootScene();
|
||||
%path = filePath(%scene.getFilename());
|
||||
%module = AssetBrowser.getModuleFromAddress(%path);
|
||||
AssetBrowser.selectedModule = %module.moduleID;
|
||||
|
||||
AssetBrowser.currentAddress = "data/" @ %module.moduleID;
|
||||
|
||||
AssetBrowser.setupCreateNewAsset("TerrainMaterialAsset", AssetBrowser.selectedModule);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -380,6 +419,11 @@ function TerrainMaterialDlg::setActiveMaterial( %this, %mat )
|
|||
}else{
|
||||
%this-->baseTexCtrl.setBitmap( %mat.diffuseMap );
|
||||
}
|
||||
if (%mat.pbrConfigMap $= ""){
|
||||
%this-->pbrConfigTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" );
|
||||
}else{
|
||||
%this-->pbrConfigTexCtrl.setBitmap( %mat.pbrConfigMap );
|
||||
}
|
||||
if (%mat.detailMap $= ""){
|
||||
%this-->detailTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" );
|
||||
}else{
|
||||
|
|
@ -438,6 +482,11 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
|
|||
}else{
|
||||
%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"){
|
||||
%newDetail = "";
|
||||
}else{
|
||||
|
|
@ -466,6 +515,7 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
|
|||
%mat.diffuseMap $= %newDiffuse &&
|
||||
%mat.normalMap $= %newNormal &&
|
||||
%mat.detailMap $= %newDetail &&
|
||||
%mat.pbrConfigMap $= %newPBRConfig &&
|
||||
%mat.macroMap $= %newMacro &&
|
||||
%mat.detailSize == %detailSize &&
|
||||
%mat.diffuseSize == %diffuseSize &&
|
||||
|
|
@ -497,7 +547,8 @@ function TerrainMaterialDlg::saveDirtyMaterial( %this, %mat )
|
|||
}
|
||||
|
||||
%mat.diffuseMap = %newDiffuse;
|
||||
%mat.normalMap = %newNormal;
|
||||
%mat.normalMap = %newNormal;
|
||||
%mat.pbrConfigMap = %newPBRConfig;
|
||||
%mat.detailMap = %newDetail;
|
||||
%mat.macroMap = %newMacro;
|
||||
%mat.detailSize = %detailSize;
|
||||
|
|
@ -543,6 +594,7 @@ function TerrainMaterialDlg::snapshotMaterials( %this )
|
|||
internalName = %mat.internalName;
|
||||
diffuseMap = %mat.diffuseMap;
|
||||
normalMap = %mat.normalMap;
|
||||
pbrConfigMap = %mat.pbrConfigMap;
|
||||
detailMap = %mat.detailMap;
|
||||
macroMap = %mat.macroMap;
|
||||
detailSize = %mat.detailSize;
|
||||
|
|
@ -577,6 +629,7 @@ function TerrainMaterialDlg::restoreMaterials( %this )
|
|||
%mat.setInternalName( %obj.internalName );
|
||||
%mat.diffuseMap = %obj.diffuseMap;
|
||||
%mat.normalMap = %obj.normalMap;
|
||||
%mat.pbrConfigMap = %obj.pbrConfigMap;
|
||||
%mat.detailMap = %obj.detailMap;
|
||||
%mat.macroMap = %obj.macroMap;
|
||||
%mat.detailSize = %obj.detailSize;
|
||||
|
|
|
|||
|
|
@ -280,7 +280,17 @@ function EditorSaveMission()
|
|||
initContainerTypeSearch($TypeMasks::TerrainObjectType);
|
||||
|
||||
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();
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
// Debug Shaders.
|
||||
new ShaderData( AL_ColorBufferShader )
|
||||
singleton shaderData( AL_ColorBufferShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/dbgColorBufferP.hlsl";
|
||||
|
|
@ -59,7 +59,7 @@ function toggleColorBufferViz( %enable )
|
|||
}
|
||||
}
|
||||
|
||||
new ShaderData( AL_SpecMapShader )
|
||||
singleton shaderData( AL_SpecMapShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/dbgSpecMapVisualizeP.hlsl";
|
||||
|
|
@ -94,7 +94,7 @@ function toggleSpecMapViz( %enable )
|
|||
AL_SpecMapVisualize.disable();
|
||||
}
|
||||
|
||||
new GFXStateBlockData( AL_DepthVisualizeState )
|
||||
singleton GFXStateBlockData( AL_DepthVisualizeState )
|
||||
{
|
||||
zDefined = true;
|
||||
zEnable = false;
|
||||
|
|
@ -105,7 +105,7 @@ new GFXStateBlockData( AL_DepthVisualizeState )
|
|||
samplerStates[1] = SamplerClampLinear; // viz color lookup
|
||||
};
|
||||
|
||||
new GFXStateBlockData( AL_DefaultVisualizeState )
|
||||
singleton GFXStateBlockData( AL_DefaultVisualizeState )
|
||||
{
|
||||
blendDefined = true;
|
||||
blendEnable = true;
|
||||
|
|
@ -121,7 +121,7 @@ new GFXStateBlockData( AL_DefaultVisualizeState )
|
|||
samplerStates[1] = SamplerClampLinear; // depthviz
|
||||
};
|
||||
|
||||
new ShaderData( AL_DepthVisualizeShader )
|
||||
singleton shaderData( AL_DepthVisualizeShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/dbgDepthVisualizeP.hlsl";
|
||||
|
|
@ -157,7 +157,7 @@ function AL_DepthVisualize::onEnabled( %this )
|
|||
return true;
|
||||
}
|
||||
|
||||
new ShaderData( AL_GlowVisualizeShader )
|
||||
singleton shaderData( AL_GlowVisualizeShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/dbgGlowVisualizeP.hlsl";
|
||||
|
|
@ -178,7 +178,7 @@ singleton PostEffect( AL_GlowVisualize )
|
|||
renderPriority = 9999;
|
||||
};
|
||||
|
||||
new ShaderData( AL_NormalsVisualizeShader )
|
||||
singleton shaderData( AL_NormalsVisualizeShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/dbgNormalVisualizeP.hlsl";
|
||||
|
|
@ -214,7 +214,7 @@ function AL_NormalsVisualize::onEnabled( %this )
|
|||
|
||||
|
||||
|
||||
new ShaderData( AL_LightColorVisualizeShader )
|
||||
singleton shaderData( AL_LightColorVisualizeShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/dbgLightColorVisualizeP.hlsl";
|
||||
|
|
@ -249,7 +249,7 @@ function AL_LightColorVisualize::onEnabled( %this )
|
|||
}
|
||||
|
||||
|
||||
new ShaderData( AL_LightSpecularVisualizeShader )
|
||||
singleton shaderData( AL_LightSpecularVisualizeShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/dbgLightSpecularVisualizeP.hlsl";
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
new GFXStateBlockData( Viz_DefaultVisualizeState )
|
||||
singleton GFXStateBlockData( Viz_DefaultVisualizeState )
|
||||
{
|
||||
/*alphaDefined = true;
|
||||
alphaTestEnable = true;
|
||||
|
|
@ -39,7 +39,7 @@ new GFXStateBlockData( Viz_DefaultVisualizeState )
|
|||
samplerStates[4] = SamplerClampLinear; // depthviz
|
||||
};
|
||||
|
||||
new ShaderData( Viz_TexelDensity )
|
||||
singleton shaderData( Viz_TexelDensity )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/Viz_TexelDensityP.hlsl";
|
||||
|
|
@ -79,7 +79,7 @@ function toggleTexelDensityViz( %enable )
|
|||
|
||||
//
|
||||
//
|
||||
new ShaderData( Viz_SurfaceProperties )
|
||||
singleton shaderData( Viz_SurfaceProperties )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/Viz_SurfacePropertiesP.hlsl";
|
||||
|
|
@ -203,7 +203,7 @@ function Viz_SurfacePropertiesPFX::onEnabled( %this )
|
|||
//
|
||||
//
|
||||
//
|
||||
new ShaderData( Viz_ColorBlindness )
|
||||
singleton shaderData( Viz_ColorBlindness )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/Viz_ColorblindnessP.hlsl";
|
||||
|
|
@ -307,7 +307,7 @@ function Viz_ColorBlindnessPFX::onEnabled( %this )
|
|||
|
||||
//
|
||||
//Material Complexity Viz
|
||||
new ShaderData( Viz_MaterialComplexity )
|
||||
singleton shaderData( Viz_MaterialComplexity )
|
||||
{
|
||||
DXVertexShaderFile = "./shaders/Viz_materialComplexityV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/Viz_materialComplexityP.hlsl";
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
new ShaderData( AL_ShadowVisualizeShader )
|
||||
singleton shaderData( AL_ShadowVisualizeShader )
|
||||
{
|
||||
DXVertexShaderFile = $Core::CommonShaderPath @ "/guiMaterialV.hlsl";
|
||||
DXPixelShaderFile = "./shaders/dbgShadowVisualizeP.hlsl";
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
:: Delete procedural shaders
|
||||
echo shaders
|
||||
del /q /a:-R shaders\procedural\*.*
|
||||
del /q /a:-R data\shaderCachel\*.*
|
||||
:: Delete dumped shader disassembly files
|
||||
for /R %%a IN (*._dis.txt) do IF EXIST "%%a._dis.txt" del "%%a._dis.txt"
|
||||
|
||||
|
|
@ -38,10 +38,11 @@ IF EXIST "scripts\server\banlist.cs" del /s scripts\server\banlist.cs
|
|||
IF EXIST "scripts\server\prefs.cs" del /s scripts\server\prefs.cs
|
||||
IF EXIST "client\config.cs" del /s client\config.cs
|
||||
IF EXIST "config.cs" del /s config.cs
|
||||
IF EXIST "tools\settings.xml" del /s tools\settings.xml
|
||||
:: IF EXIST "tools\settings.xml" del /s tools\settings.xml
|
||||
IF EXIST "banlist.cs" del /s banlist.cs
|
||||
|
||||
:: logs
|
||||
echo logs
|
||||
IF EXIST "torque3d.log" del /s torque3d.log
|
||||
echo DONE!
|
||||
IF EXIST "console.log" del /s console.log
|
||||
echo DONE!
|
||||
Loading…
Add table
Add a link
Reference in a new issue