mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
361 lines
11 KiB
Plaintext
361 lines
11 KiB
Plaintext
//-----------------------------------------------------------------------------
|
|
// Copyright (c) 2012 GarageGames, LLC
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to
|
|
// deal in the Software without restriction, including without limitation the
|
|
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
// sell copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
// IN THE SOFTWARE.
|
|
//-----------------------------------------------------------------------------
|
|
function CreateAssetButton::onClick(%this)
|
|
{
|
|
AddNewAssetPopup.showPopup(Canvas);
|
|
}
|
|
|
|
function AssetBrowser_newAsset::onWake(%this)
|
|
{
|
|
%targetModule = AssetBrowser.dirHandler.getModuleFromAddress(AssetBrowser.dirHandler.currentAddress).ModuleId;
|
|
|
|
if(%targetModule $= "")
|
|
%targetModule = EditorSettings.value("Assets/New/defaultModule", "");
|
|
|
|
NewAssetTargetModule.setText(%targetModule);
|
|
|
|
%moduleDef = ModuleDatabase.findModule(%targetModule);
|
|
|
|
%targetPath = AssetBrowser.dirHandler.currentAddress;
|
|
if(!startsWith(%targetPath, %moduleDef.ModulePath))
|
|
{
|
|
%targetPath = %moduleDef.ModulePath;
|
|
}
|
|
|
|
NewAssetTargetAddress.text = %targetPath;
|
|
}
|
|
|
|
function AssetBrowser_newAssetWindow::onClose(%this)
|
|
{
|
|
NewAssetPropertiesInspector.clearFields();
|
|
Canvas.popDialog(AssetBrowser_newAsset);
|
|
}
|
|
|
|
function NewAssetTypeList::onWake(%this)
|
|
{
|
|
%this.refresh();
|
|
}
|
|
|
|
function NewAssetTypeList::refresh(%this)
|
|
{
|
|
%this.clear();
|
|
|
|
//TODO: make this more automated
|
|
//%this.add("GameObject", 0);
|
|
%this.add("ComponentAsset", 0);
|
|
%this.add("ImageAsset", 1);
|
|
%this.add("MaterialAsset", 2);
|
|
%this.add("ShapeAsset", 3);
|
|
%this.add("SoundAsset", 4);
|
|
%this.add("StateMachineAsset", 5);
|
|
}
|
|
|
|
function NewAssetTypeList::onSelected(%this)
|
|
{
|
|
%assetType = %this.getText();
|
|
|
|
if(%assetType $= "ComponentAsset")
|
|
{
|
|
NewComponentAssetSettings.hidden = false;
|
|
}
|
|
}
|
|
|
|
function NewAssetModuleBtn::onClick(%this)
|
|
{
|
|
Canvas.pushDialog(AssetBrowser_AddModule);
|
|
AssetBrowser_addModuleWindow.selectWindow();
|
|
}
|
|
|
|
function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName, %callback, %nameOverride)
|
|
{
|
|
Canvas.pushDialog(AssetBrowser_newAsset);
|
|
|
|
%shortAssetTypeName = strreplace(%assetType, "Asset", "");
|
|
|
|
AssetBrowser_newAssetWindow.text = "New" SPC %shortAssetTypeName SPC "Asset";
|
|
|
|
NewAssetPropertiesInspector.clearFields();
|
|
|
|
AssetBrowser_newAsset.callbackFunc = %callback;
|
|
|
|
//get rid of the old one if we had one.
|
|
if(isObject(%this.newAssetSettings))
|
|
%this.newAssetSettings.delete();
|
|
|
|
%this.newAssetSettings = new ScriptObject();
|
|
|
|
%this.newAssetSettings.assetType = %assetType;
|
|
%this.newAssetSettings.moduleName = %moduleName;
|
|
|
|
%newAssetName = "New" @ %shortAssetTypeName;
|
|
if(%nameOverride !$= "")
|
|
%newAssetName = %nameOverride;
|
|
|
|
NewAssetPropertiesInspector.startGroup("General");
|
|
NewAssetPropertiesInspector.addField("assetName", "New Asset Name", "String", "Name of the new asset", %newAssetName, "", %this.newAssetSettings);
|
|
//NewAssetPropertiesInspector.addField("AssetType", "New Asset Type", "List", "Type of the new asset", %assetType, "Component,Image,Material,Shape,Sound,State Machine", %newAssetSettings);
|
|
|
|
//NewAssetPropertiesInspector.addField("friendlyName", "Friendly Name", "String", "Human-readable name of new asset", "", "", %this.newAssetSettings);
|
|
|
|
NewAssetPropertiesInspector.addCallbackField("description", "Description", "Command", "Description of the new asset", "", "", "updateNewAssetField", %this.newAssetSettings);
|
|
NewAssetPropertiesInspector.endGroup();
|
|
|
|
%this.callAssetTypeFunc(%assetType, "setupCreateNew");
|
|
|
|
NewAssetPropertiesInspector.refresh();
|
|
}
|
|
|
|
function NewAssetPropertiesInspector::updateNewAssetField(%this)
|
|
{
|
|
%this.schedule(32, "update");
|
|
}
|
|
|
|
function newAssetUpdatePath(%newPath)
|
|
{
|
|
AssetBrowser.navigateTo(%newPath);
|
|
|
|
NewAssetTargetAddress.text = %newPath;
|
|
NewAssetTargetModule.text = AssetBrowser.dirHandler.getModuleFromAddress(AssetBrowser.dirHandler.currentAddress).ModuleId;
|
|
}
|
|
|
|
//
|
|
function AssetBrowser::importNewFile(%this)
|
|
{
|
|
%importingPath = "";
|
|
|
|
%dlg = new OpenFileDialog()
|
|
{
|
|
Filters = "(All Files (*.*)|*.*|";
|
|
DefaultFile = "";
|
|
ChangePath = false;
|
|
MustExist = true;
|
|
MultipleFiles = false;
|
|
forceRelativePath = false;
|
|
};
|
|
|
|
if ( %dlg.Execute() )
|
|
{
|
|
%importingPath = makeFullPath(%dlg.FileName);
|
|
}
|
|
|
|
%dlg.delete();
|
|
|
|
AssetBrowser.onBeginDropFiles();
|
|
AssetBrowser.onDropFile(%importingPath);
|
|
AssetBrowser.onEndDropFiles();
|
|
}
|
|
|
|
//
|
|
function NewAssetTargetModule::onSelect(%this, %idx, %idy)
|
|
{
|
|
%newModuleName = %this.getText();
|
|
|
|
%currentTargetPath = NewAssetTargetAddress.getText();
|
|
if(!startsWith(%currentTargetPath, "data/" @ %newModuleName @ "/"))
|
|
{
|
|
NewAssetTargetAddress.setText("data/" @ %newModuleName @ "/");
|
|
}
|
|
}
|
|
|
|
//
|
|
//We do a quick validation that mandatory fields are filled in before passing along to the asset-type specific function
|
|
function CreateNewAsset()
|
|
{
|
|
//To enusre that any in-progress-of-being-edited field applies it's changes
|
|
%lastEditField = AssetBrowser_newAsset.getFirstResponder();
|
|
|
|
if(isObject(%lastEditField) && %lastEditField.isMethod("forceValidateText"))
|
|
%lastEditField.forceValidateText();
|
|
|
|
%assetName = AssetBrowser.newAssetSettings.assetName;
|
|
|
|
if(%assetName $= "")
|
|
{
|
|
toolsMessageBoxOK( "Error", "Attempted to make a new asset with no name!");
|
|
return;
|
|
}
|
|
|
|
%firstChar = getSubStr(%assetName, 0, 1);
|
|
if(isInt(%firstChar))
|
|
{
|
|
toolsMessageBoxOK( "Error", "Names cannot start with a number!");
|
|
return;
|
|
}
|
|
|
|
//get the selected module data
|
|
%moduleName = NewAssetTargetModule.getText();
|
|
|
|
if(%moduleName $= "")
|
|
{
|
|
toolsMessageBoxOK( "Error", "Attempted to make a new asset with no module!");
|
|
return;
|
|
}
|
|
|
|
//First, we need to make sure we're not creating a conflicting asset
|
|
if(AssetDatabase.isDeclaredAsset(%moduleName @ ":" @ %assetName))
|
|
{
|
|
toolsMessageBoxOK( "Error", "An asset with the ID: " @ %moduleName @ ":" @ %assetName
|
|
@ " already exists! Please review and rename.");
|
|
return;
|
|
}
|
|
|
|
%assetType = AssetBrowser.newAssetSettings.assetType;
|
|
|
|
if(%assetType $= "MaterialAsset" || %assetType $= "TerrainMaterialAsset" ||
|
|
%assetType $= "GUIAsset")
|
|
{
|
|
if(isObject(%assetName))
|
|
{
|
|
toolsMessageBoxOK( "Error", "Attempted to create a new asset that requires " @
|
|
"a unique name, as the object definition must be unique. " @
|
|
"Please use a new name.");
|
|
return;
|
|
}
|
|
}
|
|
|
|
%currentTargetPath = NewAssetTargetAddress.getText();
|
|
%modulePath = makeRelativePath(ModuleDatabase.findModule(%moduleName).ModulePath);
|
|
|
|
if(!startsWith(%currentTargetPath, %modulePath))
|
|
{
|
|
toolsMessageBoxOK( "Error", "Attempting to create a new asset in an invalid path. " @
|
|
"Please set the target path to be within the target module folder.");
|
|
return;
|
|
}
|
|
|
|
|
|
AssetBrowser.newAssetSettings.moduleName = %moduleName;
|
|
|
|
if(%assetType $= "")
|
|
{
|
|
toolsMessageBoxOK( "Error", "Attempted to make a new asset with no type!");
|
|
return;
|
|
}
|
|
|
|
%assetFilePath = AssetBrowser.callAssetTypeFunc(%assetType, "onCreateNew");
|
|
|
|
Canvas.popDialog(AssetBrowser_newAsset);
|
|
|
|
//Load it
|
|
if(!AssetDatabase.isDeclaredAsset(%moduleName @ ":" @ %assetName))
|
|
{
|
|
%moduleDef = ModuleDatabase.findModule(%moduleName,1);
|
|
AssetDatabase.addDeclaredAsset(%moduleDef, %assetFilePath);
|
|
//For utilities' sake, we'll acquire it immediately so it can be utilized
|
|
//without delay if it's got any script/dependencies stuff
|
|
AssetDatabase.acquireAsset("\"" @ %moduleName @ ":" @ %assetName @ "\"");
|
|
}
|
|
|
|
if(AssetBrowser_newAsset.callbackFunc !$= "")
|
|
{
|
|
%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(); */
|
|
AssetBrowser.refresh();
|
|
}
|
|
|
|
function ParentComponentList::onWake(%this)
|
|
{
|
|
%this.refresh();
|
|
}
|
|
|
|
function ParentComponentList::refresh(%this)
|
|
{
|
|
%this.clear();
|
|
|
|
%assetQuery = new AssetQuery();
|
|
if(!AssetDatabase.findAssetType(%assetQuery, "ComponentAsset"))
|
|
return; //if we didn't find ANY, just exit
|
|
|
|
// Find all the types.
|
|
%count = %assetQuery.getCount();
|
|
|
|
/*%categories = "";
|
|
for (%i = 0; %i < %count; %i++)
|
|
{
|
|
%assetId = %assetQuery.getAsset(%i);
|
|
|
|
%componentAsset = AssetDatabase.acquireAsset(%assetId);
|
|
%componentName = %componentAsset.componentName;
|
|
|
|
if(%componentName $= "")
|
|
%componentName = %componentAsset.componentClass;
|
|
|
|
%this.add(%componentName, %i);
|
|
}*/
|
|
|
|
%categories = "";
|
|
for (%i = 0; %i < %count; %i++)
|
|
{
|
|
%assetId = %assetQuery.getAsset(%i);
|
|
|
|
%componentAsset = AssetDatabase.acquireAsset(%assetId);
|
|
%componentClass = %componentAsset.componentClass;
|
|
if (!isInList(%componentClass, %categories))
|
|
%categories = %categories TAB %componentClass;
|
|
}
|
|
|
|
%categories = trim(%categories);
|
|
|
|
%index = 0;
|
|
%categoryCount = getFieldCount(%categories);
|
|
for (%i = 0; %i < %categoryCount; %i++)
|
|
{
|
|
%category = getField(%categories, %i);
|
|
%this.addCategory(%category);
|
|
|
|
for (%j = 0; %j < %count; %j++)
|
|
{
|
|
%assetId = %assetQuery.getAsset(%j);
|
|
|
|
%componentAsset = AssetDatabase.acquireAsset(%assetId);
|
|
%componentName = %componentAsset.componentName;
|
|
%componentClass = %componentAsset.componentClass;
|
|
|
|
if (%componentClass $= %category)
|
|
{
|
|
if(%componentName !$= "")
|
|
%this.add(" "@%componentName, %i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------
|
|
// Game Object creation
|
|
//----------------------------------------------------------
|
|
function EWorldEditor::createGameObject( %this )
|
|
{
|
|
AssetBrowser.createGameObjectAsset();
|
|
} |