mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-29 00:05:40 +00:00
WIP of updating terrain editor to work with assets
Fix minor UI issues for asset browser included folder 'asset type' script
This commit is contained in:
parent
a85bc7bae0
commit
22249bf4d4
25 changed files with 2203 additions and 1256 deletions
|
|
@ -1124,28 +1124,9 @@ function AssetBrowserFilterTree::onRightMouseDown(%this, %itemId)
|
|||
}
|
||||
else
|
||||
{
|
||||
//get the parent, and thus our module
|
||||
%moduleId = %this.getParentItem(%itemId);
|
||||
|
||||
//set the module value for creation info
|
||||
AssetBrowser.selectedModule = %this.getItemText(%moduleId);
|
||||
|
||||
if(%this.getItemText(%itemId) $= "ComponentAsset")
|
||||
{
|
||||
AddNewComponentAssetPopup.showPopup(Canvas);
|
||||
//Canvas.popDialog(AssetBrowser_newComponentAsset);
|
||||
//AssetBrowser_newComponentAsset-->AssetBrowserModuleList.setText(AssetBrowser.selectedModule);
|
||||
}
|
||||
else if(%this.getItemText(%itemId) $= "ScriptAsset")
|
||||
{
|
||||
EditAssetCategoryPopup.showPopup(Canvas);
|
||||
}
|
||||
EditFolderPopup.showPopup(Canvas);
|
||||
}
|
||||
}
|
||||
else if( %this.getSelectedItemsCount() > 0 && %itemId == 1)
|
||||
{
|
||||
AddNewModulePopup.showPopup(Canvas);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -1254,6 +1235,9 @@ function AssetBrowser::rebuildAssetArray(%this)
|
|||
%assetType = AssetDatabase.getAssetType(%assetId);
|
||||
}
|
||||
|
||||
if(AssetBrowser.assetTypeFilter !$= "" && AssetBrowser.assetTypeFilter !$= %assetType)
|
||||
continue;
|
||||
|
||||
/*if(%this.getItemText(%itemId) $= %assetType || (%assetType $= "" && %this.getItemText(%itemId) $= "Misc")
|
||||
|| %moduleItemId == 1)
|
||||
{*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,95 @@
|
|||
function AssetBrowser::buildFolderPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.dirPath;
|
||||
|
||||
//%previewData.previewImage = "tools/assetBrowser/art/folderIcon";
|
||||
%previewData.previewImage = "tools/gui/images/folder";
|
||||
|
||||
//%previewData.assetFriendlyName = %assetDef.assetName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.dirPath;
|
||||
%previewData.doubleClickCommand = "AssetBrowser.navigateTo(\""@ %assetDef.dirPath @ "/" @ %assetDef.assetName @"\")";//browseTo %assetDef.dirPath / %assetDef.assetName
|
||||
}
|
||||
|
||||
function AssetBrowser::renameFolder(%this, %folderPath, %newFolderName)
|
||||
{
|
||||
%fullPath = makeFullPath(%folderPath);
|
||||
%newFullPath = makeFullPath(%folderPath);
|
||||
|
||||
%fullPath = strreplace(%fullPath, "//", "/");
|
||||
|
||||
%count = getTokenCount(%fullPath, "/");
|
||||
%basePath = getTokens(%fullPath, "/", 0, %count-2);
|
||||
%oldName = getToken(%fullPath, "/", %count-1);
|
||||
|
||||
//We need to ensure that no files are 'active' while we try and clean up behind ourselves with the delete action
|
||||
//so, we nix any assets active for the module, do the delete action on the old folder, and then re-acquire our assets.
|
||||
//This will have the added benefit of updating paths for asset items
|
||||
|
||||
%module = AssetBrowser.getModuleFromAddress(AssetBrowser.currentAddress);
|
||||
%moduleId = %module.ModuleId;
|
||||
|
||||
AssetDatabase.removeDeclaredAssets(%moduleId);
|
||||
|
||||
%copiedSuccess = pathCopy(%fullPath, %basePath @ "/" @ %newFolderName);
|
||||
%this.deleteFolder(%fullPath);
|
||||
|
||||
AssetDatabase.addModuleDeclaredAssets(%moduleId);
|
||||
}
|
||||
|
||||
function AssetBrowser::deleteFolder(%this, %folderPath)
|
||||
{
|
||||
doDeleteFolder(%folderPath);
|
||||
|
||||
%this.loadFilters();
|
||||
}
|
||||
|
||||
function doDeleteFolder(%folderPath)
|
||||
{
|
||||
%fullPath = makeFullPath(%folderPath);
|
||||
|
||||
//First, wipe out any files inside the folder first
|
||||
%file = findFirstFileMultiExpr( %fullPath @ "/*.*", true);
|
||||
|
||||
while( %file !$= "" )
|
||||
{
|
||||
%success = fileDelete( %file );
|
||||
|
||||
if(!%success)
|
||||
{
|
||||
error("doDeleteFolder - unable to delete file " @ %file);
|
||||
return;
|
||||
}
|
||||
|
||||
%file = findNextFileMultiExpr( %fullPath @ "/*.*" );
|
||||
}
|
||||
|
||||
//next, walk through and delete any subfolders that may be remaining
|
||||
while(fileDelete(%fullPath) == 0)
|
||||
{
|
||||
//We couldn't delete the folder, so get a directory list and recurse through it, deleteing them as we go
|
||||
%paths = getDirectoryList(%fullPath);
|
||||
for(%i=0; %i < getFieldCount(%paths); %i++)
|
||||
{
|
||||
%childPath = getField(%paths, %i);
|
||||
doDeleteFolder(%fullPath @ "/" @ %childPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function AssetBrowser::moveFolder(%this, %folderPath, %newFolderPath)
|
||||
{
|
||||
%fullPath = makeFullPath(%folderPath);
|
||||
%newFullPath = makeFullPath(%newFolderPath);
|
||||
|
||||
%fullPath = strreplace(%fullPath, "//", "/");
|
||||
%newFullPath = strreplace(%newFullPath, "//", "/");
|
||||
|
||||
%count = getTokenCount(%fullPath, "/");
|
||||
%basePath = getTokens(%fullPath, "/", 0, %count-2);
|
||||
%oldName = getToken(%fullPath, "/", %count-1);
|
||||
|
||||
%copiedSuccess = pathCopy(%fullPath, %newFullPath @ "/" @ %newFolderName);
|
||||
%this.deleteFolder(%fullPath);
|
||||
}
|
||||
|
|
@ -1,5 +1,38 @@
|
|||
function AssetBrowser::createTerrainAsset(%this)
|
||||
{
|
||||
%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)
|
||||
|
|
@ -50,4 +83,45 @@ function GuiInspectorTypeTerrainAssetPtr::onClick( %this, %fieldName )
|
|||
function GuiInspectorTypeTerrainAssetPtr::onControlDropped( %this, %payload, %position )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//AssetDatabase.acquireAsset("pbr:NewTerrain");
|
||||
function TerrainAsset::saveAsset(%this)
|
||||
{
|
||||
%matDepIdx = 0;
|
||||
while(%this.getFieldValue("terrainMaterialAsset", %matDepIdx) !$= "")
|
||||
{
|
||||
%this.setFieldValue("terrainMaterialAsset", "", %matDepIdx);
|
||||
}
|
||||
|
||||
%filePath = AssetDatabase.getAssetFilePath(%this.getAssetId());
|
||||
|
||||
%mats = ETerrainEditor.getMaterials();
|
||||
|
||||
%assetQuery = new AssetQuery();
|
||||
AssetDatabase.findAssetType(%assetQuery, "TerrainMaterialAsset");
|
||||
|
||||
%count = %assetQuery.getCount();
|
||||
|
||||
%matDepIdx = 0;
|
||||
for( %i = 0; %i < getRecordCount( %mats ); %i++ )
|
||||
{
|
||||
%matInternalName = getRecord( %mats, %i );
|
||||
|
||||
for(%m=0; %m < %count; %m++)
|
||||
{
|
||||
%assetId = %assetQuery.getAsset(%m);
|
||||
|
||||
%terrMatAssetDef = AssetDatabase.acquireAsset(%assetId);
|
||||
|
||||
if(%terrMatAssetDef.materialDefinitionName $= %matInternalName)
|
||||
{
|
||||
%this.setFieldValue("terrainMaterialAsset", "@Asset=" @ %assetId, %matDepIdx);
|
||||
%matDepIdx++;
|
||||
}
|
||||
}
|
||||
}
|
||||
%assetQuery.delete();
|
||||
|
||||
TAMLWrite(%this, %filePath);
|
||||
}
|
||||
|
|
@ -1,9 +1,70 @@
|
|||
function AssetBrowser::createTerrainMaterialAsset(%this)
|
||||
{
|
||||
%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)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,8 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
|
||||
AddNewModulePopup.enableItem(1, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if( !isObject( EditAssetPopup ) )
|
||||
{
|
||||
new PopupMenu( EditAssetPopup )
|
||||
|
|
@ -64,22 +65,6 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
};
|
||||
}
|
||||
|
||||
if( !isObject( EditFolderPopup ) )
|
||||
{
|
||||
new PopupMenu( EditFolderPopup )
|
||||
{
|
||||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
//isPopup = true;
|
||||
|
||||
item[ 0 ] = "Rename Folder" TAB "" TAB "AssetBrowser.renameAsset();";
|
||||
item[ 1 ] = "-";
|
||||
Item[ 2 ] = "Duplicate Folder" TAB "" TAB "AssetBrowser.duplicateAsset();";
|
||||
item[ 3 ] = "-";
|
||||
item[ 4 ] = "Delete Folder" TAB "" TAB "AssetBrowser.deleteAsset();";
|
||||
};
|
||||
}
|
||||
|
||||
if( !isObject( AddNewComponentAssetPopup ) )
|
||||
{
|
||||
new PopupMenu( AddNewComponentAssetPopup )
|
||||
|
|
@ -121,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);";
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -199,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 ) )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue