| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- //-----------------------------------------------------------------------------
- // 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();
-
- if(%this.isMethod("setupCreateNew"@%assetType))
- {
- %command = %this @ ".setupCreateNew"@%assetType @"();";
- eval(%command);
- }
-
- 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 = eval(AssetBrowser @ ".create"@%assetType@"();");
-
- 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();
- }
|