mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-19 19:35:26 +00:00
Merge branch 'ExpandedAssetsPR' of https://github.com/Areloch/Torque3D into development
This commit is contained in:
commit
ace58e2c28
73 changed files with 4468 additions and 1876 deletions
|
|
@ -243,7 +243,7 @@ function ChooseLevelDlg::addLevelAsset( %this, %levelAsset )
|
|||
%LevelInfoObject.delete();
|
||||
}*/
|
||||
|
||||
%levelName = %levelAsset.friendlyName;
|
||||
%levelName = %levelAsset.LevelName;
|
||||
%levelDesc = %levelAsset.description;
|
||||
%levelPreview = %levelAsset.levelPreviewImage;
|
||||
|
||||
|
|
|
|||
BIN
Templates/BaseGame/game/tools/assetBrowser/art/cppIcon.png
Normal file
BIN
Templates/BaseGame/game/tools/assetBrowser/art/cppIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
|
|
@ -1,18 +1,34 @@
|
|||
<AssetImportConfigs>
|
||||
<Config Name="TestConfig">
|
||||
<Mesh ImportMesh="1" DoUpAxisOverride="0" UpAxisOverride="Z_AXIS" DoScaleOverride="0" ScaleOverride="1" IgnoreNodeScale="0" AdjustCenter="0" AdjustFloor="1" CollapseSubmeshes="0" LODType="TrailingNumber" ImportedNodes="" IgnoreNodes="" ImportMeshes="" IgnoreMeshes="" />
|
||||
<Materials ImportMaterials="1" CreateComposites="1" UseDiffuseSuffixOnOriginImg="1" UseExistingMaterials="1" />
|
||||
<Materials ImportMaterials="1" IgnoreMaterials="" CreateComposites="1" UseDiffuseSuffixOnOriginImg="1" UseExistingMaterials="1" />
|
||||
<Animations ImportAnimations="1" SeparateAnimations="1" SeparateAnimationPrefix="" />
|
||||
<Collisions GenerateCollisions="1" GenCollisionType="CollisionMesh" CollisionMeshPrefix="Col" GenerateLOSCollisions="1" GenLOSCollisionType="CollisionMesh" LOSCollisionMeshPrefix="LOS" />
|
||||
<Images ImageType="N/A" DiffuseTypeSuffixes="_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL" NormalTypeSuffixes="_NORMAL,_NORM" SpecularTypeSuffixes="_SPECULAR,_SPEC" MetalnessTypeSuffixes="_METAL,_MET,_METALNESS,_METALLIC" RoughnessTypeSuffixes="_ROUGH,_ROUGHNESS" SmoothnessTypeSuffixes="_SMOOTH,_SMOOTHNESS" AOTypeSuffixes="_AO,_AMBIENT,_AMBIENTOCCLUSION" CompositeTypeSuffixes="_COMP,_COMPOSITE" TextureFilteringMode="Bilinear" UseMips="1" IsHDR="0" Scaling="1" Compressed="0" GenerateMaterialOnImport="1" PopulateMaterialMaps="1" />
|
||||
<Images ImageType="GUI" DiffuseTypeSuffixes="_ALBEDO,_DIFFUSE,_ALB,_DIF,_Base_Color,_COLOR,_COL" NormalTypeSuffixes="_NORMAL,_NORM" SpecularTypeSuffixes="_SPECULAR,_SPEC" MetalnessTypeSuffixes="_METAL,_MET,_METALNESS,_METALLIC" RoughnessTypeSuffixes="_ROUGH,_ROUGHNESS" SmoothnessTypeSuffixes="_SMOOTH,_SMOOTHNESS" AOTypeSuffixes="_AO,_AMBIENT,_AMBIENTOCCLUSION,_Ambient_Occlusion" CompositeTypeSuffixes="_COMP,_COMPOSITE" TextureFilteringMode="Bilinear" UseMips="1" IsHDR="0" Scaling="1" Compressed="0" GenerateMaterialOnImport="1" PopulateMaterialMaps="1" />
|
||||
<Sounds VolumeAdjust="1" PitchAdjust="1" Compressed="0" />
|
||||
</Config>
|
||||
<Config Name="SecondTest">
|
||||
<Mesh ImportMesh="1" DoUpAxisOverride="0" UpAxisOverride="Z_AXIS" DoScaleOverride="0" ScaleOverride="1" IgnoreNodeScale="0" AdjustCenter="0" AdjustFloor="0" CollapseSubmeshes="0" LODType="TrailingNumber" ImportedNodes="" IgnoreNodes="" ImportMeshes="" IgnoreMeshes="" />
|
||||
<Materials ImportMaterials="1" CreateComposites="1" UseDiffuseSuffixOnOriginImg="" UseExistingMaterials="" />
|
||||
<Materials ImportMaterials="1" IgnoreMaterials="" CreateComposites="1" UseDiffuseSuffixOnOriginImg="" UseExistingMaterials="" />
|
||||
<Animations ImportAnimations="1" SeparateAnimations="1" SeparateAnimationPrefix="" />
|
||||
<Collisions GenerateCollisions="1" GenCollisionType="CollisionMesh" CollisionMeshPrefix="Col" GenerateLOSCollisions="1" GenLOSCollisionType="CollisionMesh" LOSCollisionMeshPrefix="LOS" />
|
||||
<Images ImageType="N/A" DiffuseTypeSuffixes="_ALBEDO,_DIFFUSE,_ALB,_DIF,_COLOR,_COL" NormalTypeSuffixes="_NORMAL,_NORM" SpecularTypeSuffixes="_SPECULAR,_SPEC" MetalnessTypeSuffixes="_METAL,_MET,_METALNESS,_METALLIC" RoughnessTypeSuffixes="_ROUGH,_ROUGHNESS" SmoothnessTypeSuffixes="_SMOOTH,_SMOOTHNESS" AOTypeSuffixes="_AO,_AMBIENT,_AMBIENTOCCLUSION" CompositeTypeSuffixes="_COMP,_COMPOSITE" TextureFilteringMode="Bilinear" UseMips="1" IsHDR="0" Scaling="1" Compressed="0" GenerateMaterialOnImport="" PopulateMaterialMaps="" />
|
||||
<Sounds VolumeAdjust="1" PitchAdjust="1" Compressed="0" />
|
||||
</Config>
|
||||
<Config Name="GUI_Image_Import">
|
||||
<Mesh ImportMesh="0" DoUpAxisOverride="0" UpAxisOverride="Z_AXIS" DoScaleOverride="0" ScaleOverride="1" IgnoreNodeScale="0" AdjustCenter="0" AdjustFloor="0" CollapseSubmeshes="0" LODType="TrailingNumber" ImportedNodes="" IgnoreNodes="" ImportMeshes="" IgnoreMeshes="" />
|
||||
<Materials ImportMaterials="0" IgnoreMaterials="" CreateComposites="1" UseDiffuseSuffixOnOriginImg="1" UseExistingMaterials="1" />
|
||||
<Animations ImportAnimations="0" SeparateAnimations="1" SeparateAnimationPrefix="" />
|
||||
<Collisions GenerateCollisions="0" GenCollisionType="CollisionMesh" CollisionMeshPrefix="Col" GenerateLOSCollisions="1" GenLOSCollisionType="CollisionMesh" LOSCollisionMeshPrefix="LOS" />
|
||||
<Images ImageType="GUI" DiffuseTypeSuffixes="_ALBEDO;_DIFFUSE;_ALB;_DIF;_COLOR;_COL;_BASECOLOR;_BASE_COLOR" NormalTypeSuffixes="_NORMAL;_NORM" SpecularTypeSuffixes="_SPECULAR;_SPEC" MetalnessTypeSuffixes="_METAL;_MET;_METALNESS;_METALLIC" RoughnessTypeSuffixes="_ROUGH;_ROUGHNESS" SmoothnessTypeSuffixes="_SMOOTH;_SMOOTHNESS" AOTypeSuffixes="_AO;_AMBIENT;_AMBIENTOCCLUSION" CompositeTypeSuffixes="_COMP;_COMPOSITE" TextureFilteringMode="Bilinear" UseMips="1" IsHDR="0" Scaling="1" Compressed="0" GenerateMaterialOnImport="0" PopulateMaterialMaps="0" />
|
||||
<Sounds VolumeAdjust="1" PitchAdjust="1" Compressed="0" />
|
||||
</Config>
|
||||
<Config Name="CogflictsMesh">
|
||||
<Mesh ImportMesh="1" DoUpAxisOverride="0" UpAxisOverride="Z_AXIS" DoScaleOverride="0" ScaleOverride="1" IgnoreNodeScale="0" AdjustCenter="0" AdjustFloor="0" CollapseSubmeshes="0" LODType="TrailingNumber" ImportedNodes="" IgnoreNodes="" ImportMeshes="" IgnoreMeshes="" />
|
||||
<Materials ImportMaterials="1" IgnoreMaterials="ColorEffect*;" CreateComposites="1" UseDiffuseSuffixOnOriginImg="1" UseExistingMaterials="1" />
|
||||
<Animations ImportAnimations="1" SeparateAnimations="1" SeparateAnimationPrefix="" />
|
||||
<Collisions GenerateCollisions="1" GenCollisionType="CollisionMesh" CollisionMeshPrefix="Col" GenerateLOSCollisions="1" GenLOSCollisionType="CollisionMesh" LOSCollisionMeshPrefix="LOS" />
|
||||
<Images ImageType="N/A" DiffuseTypeSuffixes="_ALBEDO;_DIFFUSE;_ALB;_DIF;_COLOR;_COL;_BASECOLOR;_BASE_COLOR;_Al" NormalTypeSuffixes="_NORMAL;_NORM;_N" SpecularTypeSuffixes="_SPECULAR;_SPEC" MetalnessTypeSuffixes="_METAL;_MET;_METALNESS;_METALLIC" RoughnessTypeSuffixes="_ROUGH;_ROUGHNESS" SmoothnessTypeSuffixes="_SMOOTH;_SMOOTHNESS" AOTypeSuffixes="_AO;_AMBIENT;_AMBIENTOCCLUSION" CompositeTypeSuffixes="_COMP;_COMPOSITE;_C" TextureFilteringMode="Bilinear" UseMips="1" IsHDR="0" Scaling="1" Compressed="0" GenerateMaterialOnImport="1" PopulateMaterialMaps="1" />
|
||||
<Sounds VolumeAdjust="1" PitchAdjust="1" Compressed="0" />
|
||||
</Config>
|
||||
</AssetImportConfigs>
|
||||
|
|
|
|||
|
|
@ -13,15 +13,15 @@
|
|||
isContainer = "1";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "1";
|
||||
AddNewArtAssetPopup = "18801";
|
||||
AddNewAssetPopup = "18802";
|
||||
AddNewScriptAssetPopup = "18800";
|
||||
AddNewArtAssetPopup = "18222";
|
||||
AddNewAssetPopup = "18223";
|
||||
AddNewScriptAssetPopup = "18221";
|
||||
coreModulesFilter = "0";
|
||||
currentPreviewPage = "0";
|
||||
enabled = "1";
|
||||
importAssetFinalListArray = "20465";
|
||||
importAssetNewListArray = "20463";
|
||||
importAssetUnprocessedListArray = "20464";
|
||||
isReImportingAsset = "0";
|
||||
totalPages = "1";
|
||||
treeFilterMode = "list";
|
||||
|
||||
new GuiWindowCtrl(AssetBrowser_addFilterWindow) {
|
||||
text = "Create New Tag";
|
||||
|
|
@ -400,7 +400,7 @@
|
|||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiBitmapButtonCtrl() {
|
||||
bitmap = "tools/gui/images/iconNew.png";
|
||||
bitmap = "tools/gui/images/visible";
|
||||
bitmapMode = "Stretched";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
|
|
@ -409,41 +409,15 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "113 1";
|
||||
extent = "15 15";
|
||||
position = "128 -1";
|
||||
extent = "18 19";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "GuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.viewTagsFilter();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
tooltip = "Show assets grouped and filtered via tags.";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
new GuiBitmapButtonCtrl() {
|
||||
bitmap = "tools/gui/images/iconList.png";
|
||||
bitmapMode = "Stretched";
|
||||
autoFitExtents = "0";
|
||||
useModifiers = "0";
|
||||
useStates = "1";
|
||||
masked = "0";
|
||||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "130 1";
|
||||
extent = "15 15";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "GuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "AssetBrowser.viewListFilter();";
|
||||
command = "AssetBrowser.showFilterPopup();";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
tooltip = "Views assets via module-oriented list tree.";
|
||||
hovertime = "1000";
|
||||
|
|
@ -526,7 +500,7 @@
|
|||
canRenameObjects = "1";
|
||||
renameInternal = "0";
|
||||
position = "1 1";
|
||||
extent = "145 294";
|
||||
extent = "145 252";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
|
|
@ -897,13 +871,14 @@
|
|||
horizSizing = "left";
|
||||
vertSizing = "top";
|
||||
profile = "ToolsGuiButtonProfile";
|
||||
visible = "1";
|
||||
visible = "0";
|
||||
active = "1";
|
||||
command = "AssetBrowser.selectAsset( AssetBrowser.selectedAsset );";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
internalName = "SelectButton";
|
||||
hidden = "1";
|
||||
canSave = "1";
|
||||
canSaveDynamicFields = "0";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
anchorBottom = "0";
|
||||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "633 358";
|
||||
position = "339 179";
|
||||
extent = "346 409";
|
||||
minExtent = "48 92";
|
||||
horizSizing = "center";
|
||||
|
|
@ -138,7 +138,7 @@
|
|||
anchorBottom = "0";
|
||||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "562 251";
|
||||
position = "324 132";
|
||||
extent = "376 503";
|
||||
minExtent = "48 92";
|
||||
horizSizing = "center";
|
||||
|
|
@ -296,8 +296,8 @@
|
|||
anchorBottom = "0";
|
||||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "536 205";
|
||||
extent = "368 502";
|
||||
position = "140 98";
|
||||
extent = "733 502";
|
||||
minExtent = "48 92";
|
||||
horizSizing = "center";
|
||||
vertSizing = "center";
|
||||
|
|
@ -315,7 +315,7 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "224 470";
|
||||
position = "589 470";
|
||||
extent = "64 22";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "left";
|
||||
|
|
@ -335,7 +335,7 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "292 470";
|
||||
position = "657 470";
|
||||
extent = "64 22";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "left";
|
||||
|
|
@ -343,7 +343,7 @@
|
|||
profile = "ToolsGuiButtonProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "Canvas.popDialog();";
|
||||
command = "ImportAssetWindow.close();";
|
||||
tooltipProfile = "ToolsGuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
|
|
@ -364,7 +364,7 @@
|
|||
minExtent = "8 2";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
profile = "GuiTextProfile";
|
||||
profile = "GuiDefaultProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
tooltipProfile = "GuiToolTipProfile";
|
||||
|
|
@ -387,7 +387,7 @@
|
|||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "134 27";
|
||||
extent = "204 22";
|
||||
extent = "569 22";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "width";
|
||||
vertSizing = "bottom";
|
||||
|
|
@ -410,7 +410,7 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "342 27";
|
||||
position = "707 27";
|
||||
extent = "22 22";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "left";
|
||||
|
|
@ -463,7 +463,7 @@
|
|||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "126 53";
|
||||
extent = "175 22";
|
||||
extent = "540 22";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "width";
|
||||
vertSizing = "bottom";
|
||||
|
|
@ -486,7 +486,7 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "305 53";
|
||||
position = "670 53";
|
||||
extent = "15 22";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "left";
|
||||
|
|
@ -512,7 +512,7 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "325 53";
|
||||
position = "690 53";
|
||||
extent = "15 22";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "left";
|
||||
|
|
@ -538,7 +538,7 @@
|
|||
groupNum = "-1";
|
||||
buttonType = "PushButton";
|
||||
useMouseEvents = "0";
|
||||
position = "346 53";
|
||||
position = "711 53";
|
||||
extent = "15 22";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "left";
|
||||
|
|
@ -570,7 +570,7 @@
|
|||
anchorLeft = "1";
|
||||
anchorRight = "0";
|
||||
position = "9 82";
|
||||
extent = "348 381";
|
||||
extent = "713 381";
|
||||
minExtent = "8 2";
|
||||
horizSizing = "width";
|
||||
vertSizing = "height";
|
||||
|
|
@ -594,7 +594,7 @@
|
|||
changeChildSizeToFit = "0";
|
||||
changeChildPosition = "1";
|
||||
position = "1 1";
|
||||
extent = "345 20";
|
||||
extent = "710 20";
|
||||
minExtent = "16 16";
|
||||
horizSizing = "width";
|
||||
vertSizing = "bottom";
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@
|
|||
profile = "ToolsGuiButtonProfile";
|
||||
visible = "1";
|
||||
active = "1";
|
||||
command = "Canvas.popDialog(AssetBrowser_SelectModule);";
|
||||
command = "AssetBrowser_SelectModule.moduleSelected();";
|
||||
tooltipProfile = "ToolsGuiToolTipProfile";
|
||||
hovertime = "1000";
|
||||
isContainer = "0";
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ function initializeAssetBrowser()
|
|||
exec("./guis/assetImport.gui");
|
||||
exec("./guis/selectModule.gui");
|
||||
exec("./guis/editModule.gui");
|
||||
exec("./guis/importTemplateModules.gui");
|
||||
|
||||
exec("./scripts/assetBrowser.cs");
|
||||
exec("./scripts/popupMenus.cs");
|
||||
|
|
@ -48,7 +49,23 @@ function initializeAssetBrowser()
|
|||
exec("./scripts/newAsset.cs");
|
||||
exec("./scripts/editAsset.cs");
|
||||
exec("./scripts/editModule.cs");
|
||||
exec("./scripts/selectModule.cs");
|
||||
|
||||
//Processing for the different asset types
|
||||
exec("./scripts/assetTypes/component.cs");
|
||||
exec("./scripts/assetTypes/cpp.cs");
|
||||
exec("./scripts/assetTypes/gameObject.cs");
|
||||
exec("./scripts/assetTypes/gui.cs");
|
||||
exec("./scripts/assetTypes/image.cs");
|
||||
exec("./scripts/assetTypes/level.cs");
|
||||
exec("./scripts/assetTypes/material.cs");
|
||||
exec("./scripts/assetTypes/postFX.cs");
|
||||
exec("./scripts/assetTypes/script.cs");
|
||||
exec("./scripts/assetTypes/shape.cs");
|
||||
exec("./scripts/assetTypes/shapeAnimation.cs");
|
||||
exec("./scripts/assetTypes/sound.cs");
|
||||
exec("./scripts/assetTypes/stateMachine.cs");
|
||||
|
||||
exec("./scripts/fieldTypes.cs");
|
||||
|
||||
new ScriptObject( AssetBrowserPlugin )
|
||||
|
|
|
|||
|
|
@ -57,6 +57,18 @@ function AssetBrowser_addModuleWindow::CreateNewModule(%this)
|
|||
Extension = "asset.taml";
|
||||
Recurse = true;
|
||||
};
|
||||
|
||||
//Autoload the usual suspects
|
||||
new AutoloadAssets()
|
||||
{
|
||||
AssetType = "ComponentAsset";
|
||||
Recurse = true;
|
||||
};
|
||||
new AutoloadAssets()
|
||||
{
|
||||
AssetType = "GUIAsset";
|
||||
Recurse = true;
|
||||
};
|
||||
};
|
||||
|
||||
TAMLWrite(%newModule, %moduleDefinitionFilePath);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
new SimGroup(AssetBrowserPreviewCache);
|
||||
|
||||
//AssetBrowser.addToolbarButton
|
||||
|
|
@ -34,14 +33,84 @@ function AssetBrowser::addToolbarButton(%this)
|
|||
//
|
||||
function AssetBrowser::onAdd(%this)
|
||||
{
|
||||
%this.isReImportingAsset = false;
|
||||
}
|
||||
|
||||
function AssetBrowser::onWake(%this)
|
||||
{
|
||||
%this.importAssetNewListArray = new ArrayObject();
|
||||
// manage preview array
|
||||
if(!isObject(AssetPreviewArray))
|
||||
new ArrayObject(AssetPreviewArray);
|
||||
|
||||
if(!isObject(ImportAssetTree))
|
||||
new GuiTreeViewCtrl(ImportAssetTree);
|
||||
|
||||
%this.importingFilesArray = new ArrayObject();
|
||||
%this.importAssetUnprocessedListArray = new ArrayObject();
|
||||
%this.importAssetFinalListArray = new ArrayObject();
|
||||
|
||||
%this.isReImportingAsset = false;
|
||||
%this.coreModulesFilter = false;
|
||||
%this.onlyShowModulesWithAssets = false;
|
||||
%this.treeFilterMode = "list";
|
||||
|
||||
//First, build our our list of active modules
|
||||
%modulesList = ModuleDatabase.findModules(true);
|
||||
|
||||
%nonDefaultModuleCount = 0;
|
||||
|
||||
for(%i=0; %i < getWordCount(%modulesList); %i++)
|
||||
{
|
||||
%moduleName = getWord(%modulesList, %i).ModuleId;
|
||||
|
||||
%moduleGroup = getWord(%modulesList, %i).Group;
|
||||
if((%moduleGroup $= "Core" || %moduleGroup $= "Tools") && !%this.coreModulesFilter)
|
||||
continue;
|
||||
|
||||
%nonDefaultModuleCount++;
|
||||
}
|
||||
|
||||
if(%nonDefaultModuleCount == 0)
|
||||
{
|
||||
MessageBoxYesNo( "Import Template Content?",
|
||||
"You have no modules or content. Do you want to import a module from the template content?",
|
||||
"AssetBrowser.ImportTemplateModules();", "" );
|
||||
}
|
||||
}
|
||||
|
||||
//Filters
|
||||
function AssetBrowser::showFilterPopup(%this)
|
||||
{
|
||||
BrowserVisibilityPopup.showPopup(Canvas);
|
||||
}
|
||||
|
||||
function AssetBrowser::viewCoreModulesFilter(%this)
|
||||
{
|
||||
%this.coreModulesFilter = !%this.coreModulesFilter;
|
||||
|
||||
BrowserVisibilityPopup.checkItem(0,%this.coreModulesFilter);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
}
|
||||
|
||||
function AssetBrowser::viewPopulatedModulesFilter(%this)
|
||||
{
|
||||
%this.onlyShowModulesWithAssets = !%this.onlyShowModulesWithAssets;
|
||||
|
||||
BrowserVisibilityPopup.checkItem(1,%this.onlyShowModulesWithAssets);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
}
|
||||
|
||||
function AssetBrowser::viewListFilter(%this)
|
||||
{
|
||||
%this.treeFilterMode = "list";
|
||||
AssetBrowser.loadFilters();
|
||||
}
|
||||
|
||||
function AssetBrowser::viewTagsFilter(%this)
|
||||
{
|
||||
%this.treeFilterMode = "tags";
|
||||
AssetBrowser.loadFilters();
|
||||
}
|
||||
|
||||
//Drag-Drop functionality
|
||||
|
|
@ -113,6 +182,11 @@ function AssetBrowser::hideDialog( %this )
|
|||
|
||||
function AssetBrowser::buildPreviewArray( %this, %asset, %moduleName )
|
||||
{
|
||||
if(!isObject(%this.previewData))
|
||||
{
|
||||
%this.previewData = new ScriptObject();
|
||||
}
|
||||
|
||||
%assetDesc = AssetDatabase.acquireAsset(%asset);
|
||||
%assetName = AssetDatabase.getAssetName(%asset);
|
||||
%previewImage = "core/art/warnmat";
|
||||
|
|
@ -142,8 +216,20 @@ function AssetBrowser::buildPreviewArray( %this, %asset, %moduleName )
|
|||
|
||||
%tooltip = %assetName;
|
||||
|
||||
%doubleClickCommand = "AssetBrowser.editAsset( "@%assetDesc@" );";
|
||||
|
||||
if(%assetType $= "ShapeAsset")
|
||||
{
|
||||
%this.previewData.assetName = %assetDesc.assetName;
|
||||
%this.previewData.assetPath = %assetDesc.scriptFile;
|
||||
%this.previewData.doubleClickCommand = %doubleClickCommand;
|
||||
|
||||
%this.previewData.previewImage = "tools/assetBrowser/art/componentIcon";
|
||||
|
||||
%this.previewData.assetFriendlyName = %assetDesc.friendlyName;
|
||||
%this.previewData.assetDesc = %assetDesc.description;
|
||||
%this.previewData.tooltip = %assetDesc.friendlyName @ "\n" @ %assetDesc;
|
||||
|
||||
%previewButton = new GuiObjectView()
|
||||
{
|
||||
className = "AssetPreviewControl";
|
||||
|
|
@ -218,111 +304,21 @@ function AssetBrowser::buildPreviewArray( %this, %asset, %moduleName )
|
|||
}
|
||||
else
|
||||
{
|
||||
if(%assetType $= "ComponentAsset")
|
||||
{
|
||||
%assetPath = "data/" @ %moduleName @ "/components/" @ %assetName @ ".cs";
|
||||
%doubleClickCommand = "EditorOpenFileInTorsion( "@%assetPath@", 0 );";
|
||||
|
||||
%previewImage = "tools/assetBrowser/art/componentIcon";
|
||||
|
||||
%assetFriendlyName = %assetDesc.friendlyName;
|
||||
%assetDesc = %assetDesc.description;
|
||||
%tooltip = %assetFriendlyName @ "\n" @ %assetDesc;
|
||||
}
|
||||
else if(%assetType $= "GameObjectAsset")
|
||||
{
|
||||
%assetPath = "data/" @ %moduleName @ "/gameObjects/" @ %assetName @ ".cs";
|
||||
%doubleClickCommand = "EditorOpenFileInTorsion( "@%assetPath@", 0 );";
|
||||
|
||||
%previewImage = "tools/assetBrowser/art/gameObjectIcon";
|
||||
|
||||
%tooltip = %assetDesc.gameObjectName;
|
||||
}
|
||||
else if(%assetType $= "ImageAsset")
|
||||
{
|
||||
//nab the image and use it for the preview
|
||||
%assetQuery = new AssetQuery();
|
||||
%numAssetsFound = AssetDatabase.findAllAssets(%assetQuery);
|
||||
|
||||
for( %i=0; %i < %numAssetsFound; %i++)
|
||||
{
|
||||
%assetId = %assetQuery.getAsset(%i);
|
||||
%name = AssetDatabase.getAssetName(%assetId);
|
||||
|
||||
if(%name $= %assetName)
|
||||
{
|
||||
%asset = AssetDatabase.acquireAsset(%assetId);
|
||||
%previewImage = %asset.imageFile;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(%assetType $= "StateMachineAsset")
|
||||
{
|
||||
%previewImage = "tools/assetBrowser/art/stateMachineIcon";
|
||||
}
|
||||
else if(%assetType $= "SoundAsset")
|
||||
{
|
||||
%previewImage = "tools/assetBrowser/art/soundIcon";
|
||||
}
|
||||
else if(%assetType $= "LevelAsset")
|
||||
{
|
||||
%previewImage = "tools/assetBrowser/art/levelIcon";
|
||||
}
|
||||
else if(%assetType $= "PostEffectAsset")
|
||||
{
|
||||
%previewImage = "tools/assetBrowser/art/postEffectIcon";
|
||||
}
|
||||
else if(%assetType $= "GUIAsset")
|
||||
{
|
||||
%previewImage = "tools/assetBrowser/art/guiIcon";
|
||||
}
|
||||
else if(%assetType $= "ScriptAsset")
|
||||
{
|
||||
if(%assetDesc.isServerSide)
|
||||
%previewImage = "tools/assetBrowser/art/serverScriptIcon";
|
||||
else
|
||||
%previewImage = "tools/assetBrowser/art/clientScriptIcon";
|
||||
}
|
||||
else if(%assetType $= "MaterialAsset")
|
||||
{
|
||||
%previewImage = "";
|
||||
//nab the image and use it for the preview
|
||||
%assetQuery = new AssetQuery();
|
||||
%numAssetsFound = AssetDatabase.findAllAssets(%assetQuery);
|
||||
|
||||
for( %i=0; %i < %numAssetsFound; %i++)
|
||||
{
|
||||
%assetId = %assetQuery.getAsset(%i);
|
||||
%name = AssetDatabase.getAssetName(%assetId);
|
||||
|
||||
if(%name $= %assetName)
|
||||
{
|
||||
%asset = AssetDatabase.acquireAsset(%assetId);
|
||||
%previewImage = %asset.materialDefinitionName.diffuseMap[0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(%previewImage $= "")
|
||||
%previewImage = "tools/assetBrowser/art/materialIcon";
|
||||
}
|
||||
if(%assetType $= "ShapeAnimationAsset")
|
||||
{
|
||||
%previewImage = "tools/assetBrowser/art/animationIcon";
|
||||
}
|
||||
//Build out the preview
|
||||
%buildCommand = %this @ ".build" @ %assetType @ "Preview(" @ %assetDesc @ "," @ %this.previewData @ ");";
|
||||
eval(%buildCommand);
|
||||
|
||||
%previewButton = new GuiBitmapButtonCtrl()
|
||||
{
|
||||
className = "AssetPreviewControl";
|
||||
internalName = %assetName;
|
||||
internalName = %this.previewData.assetName;
|
||||
HorizSizing = "right";
|
||||
VertSizing = "bottom";
|
||||
profile = "ToolsGuiButtonProfile";
|
||||
position = "10 4";
|
||||
extent = %previewSize;
|
||||
buttonType = "PushButton";
|
||||
bitmap = %previewImage;
|
||||
bitmap = %this.previewData.previewImage;
|
||||
Command = "";
|
||||
text = "";
|
||||
useStates = false;
|
||||
|
|
@ -345,7 +341,7 @@ function AssetBrowser::buildPreviewArray( %this, %asset, %moduleName )
|
|||
|
||||
%previewBorder = new GuiButtonCtrl(){
|
||||
class = "AssetPreviewButton";
|
||||
internalName = %assetName@"Border";
|
||||
internalName = %this.previewData.assetName@"Border";
|
||||
HorizSizing = "right";
|
||||
VertSizing = "bottom";
|
||||
profile = "ToolsGuiThumbHighlightButtonProfile";
|
||||
|
|
@ -353,21 +349,21 @@ function AssetBrowser::buildPreviewArray( %this, %asset, %moduleName )
|
|||
extent = %previewSize.x + %previewBounds SPC %previewSize.y + 24;
|
||||
Variable = "";
|
||||
buttonType = "radioButton";
|
||||
tooltip = %tooltip;
|
||||
tooltip = %this.previewData.tooltip;
|
||||
Command = "AssetBrowser.updateSelection( $ThisControl.getParent().assetName, $ThisControl.getParent().moduleName );";
|
||||
altCommand = %doubleClickCommand;
|
||||
altCommand = %this.previewData.doubleClickCommand;
|
||||
groupNum = "0";
|
||||
useMouseEvents = true;
|
||||
text = "";
|
||||
icon = %previewImage;
|
||||
icon = %this.previewData.previewImage;
|
||||
};
|
||||
|
||||
%previewNameCtrl = new GuiTextEditCtrl(){
|
||||
position = 0 SPC %previewSize.y + %previewBounds - 16;
|
||||
profile = ToolsGuiTextEditCenterProfile;
|
||||
extent = %previewSize.x + %previewBounds SPC 16;
|
||||
text = %assetName;
|
||||
originalAssetName = %assetName; //special internal field used in renaming assets
|
||||
text = %this.previewData.assetName;
|
||||
originalAssetName = %this.previewData.assetName; //special internal field used in renaming assets
|
||||
internalName = "AssetNameLabel";
|
||||
class = "AssetNameField";
|
||||
active = false;
|
||||
|
|
@ -381,32 +377,7 @@ function AssetBrowser::buildPreviewArray( %this, %asset, %moduleName )
|
|||
AssetBrowser-->materialSelection.add(%container);
|
||||
|
||||
// add to the array object for reference later
|
||||
AssetPreviewArray.add( %previewButton, %previewImage );
|
||||
}
|
||||
|
||||
function AssetBrowser::loadImages( %this, %materialNum )
|
||||
{
|
||||
// this will save us from spinning our wheels in case we don't exist
|
||||
/*if( !AssetBrowser.visible )
|
||||
return;
|
||||
|
||||
// this schedule is here to dynamically load images
|
||||
%previewButton = AssetPreviewArray.getKey(%materialNum);
|
||||
%previewImage = AssetPreviewArray.getValue(%materialNum);
|
||||
|
||||
if(%previewButton.getClassName() !$= "GuiObjectView")
|
||||
{
|
||||
%previewButton.setBitmap(%previewImage);
|
||||
%previewButton.setText("");
|
||||
}
|
||||
|
||||
%materialNum++;
|
||||
|
||||
/*if( %materialNum < AssetPreviewArray.count() )
|
||||
{
|
||||
%tempSchedule = %this.schedule(64, "loadImages", %materialNum);
|
||||
MatEdScheduleArray.add( %tempSchedule, %materialNum );
|
||||
}*/
|
||||
AssetPreviewArray.add( %previewButton, %this.previewData.previewImage );
|
||||
}
|
||||
|
||||
function AssetBrowser::loadFilters( %this )
|
||||
|
|
@ -417,62 +388,91 @@ function AssetBrowser::loadFilters( %this )
|
|||
|
||||
AssetBrowser-->filterTree.insertItem(0, "Assets");
|
||||
|
||||
//First, build our our list of active modules
|
||||
%modulesList = ModuleDatabase.findModules(true);
|
||||
AssetPreviewArray.empty();
|
||||
|
||||
for(%i=0; %i < getWordCount(%modulesList); %i++)
|
||||
if(%this.treeFilterMode $= "list")
|
||||
{
|
||||
%moduleName = getWord(%modulesList, %i).ModuleId;
|
||||
//First, build our our list of active modules
|
||||
%modulesList = ModuleDatabase.findModules(true);
|
||||
|
||||
%moduleItemId = AssetBrowser-->filterTree.findItemByName(%moduleName);
|
||||
|
||||
if(%moduleItemId == 0)
|
||||
%moduleItemId = AssetBrowser-->filterTree.insertItem(1, %moduleName, "", "", 1, 1);
|
||||
}
|
||||
for(%i=0; %i < getWordCount(%modulesList); %i++)
|
||||
{
|
||||
%moduleName = getWord(%modulesList, %i).ModuleId;
|
||||
|
||||
%moduleGroup = getWord(%modulesList, %i).Group;
|
||||
if((%moduleGroup $= "Core" || %moduleGroup $= "Tools") && !%this.coreModulesFilter)
|
||||
continue;
|
||||
|
||||
%moduleItemId = AssetBrowser-->filterTree.findItemByName(%moduleName);
|
||||
|
||||
if(%moduleItemId == 0)
|
||||
%moduleItemId = AssetBrowser-->filterTree.insertItem(1, %moduleName, "", "", 1, 1);
|
||||
}
|
||||
|
||||
//Next, go through and list the asset categories
|
||||
%assetQuery = new AssetQuery();
|
||||
%numAssetsFound = AssetDatabase.findAllAssets(%assetQuery);
|
||||
|
||||
for( %i=0; %i < %numAssetsFound; %i++)
|
||||
//Next, go through and list the asset categories
|
||||
%assetQuery = new AssetQuery();
|
||||
%numAssetsFound = AssetDatabase.findAllAssets(%assetQuery);
|
||||
|
||||
for( %i=0; %i < %numAssetsFound; %i++)
|
||||
{
|
||||
%assetId = %assetQuery.getAsset(%i);
|
||||
|
||||
//first, get the asset's module, as our major categories
|
||||
%module = AssetDatabase.getAssetModule(%assetId);
|
||||
|
||||
%moduleName = %module.moduleId;
|
||||
|
||||
%moduleGroup = %module.Group;
|
||||
if((%moduleGroup $= "Core" || %moduleGroup $= "Tools") && !%this.coreModulesFilter)
|
||||
continue;
|
||||
|
||||
//first, see if this module Module is listed already
|
||||
%moduleItemId = AssetBrowser-->filterTree.findItemByName(%moduleName);
|
||||
|
||||
if(%moduleItemId == 0)
|
||||
%moduleItemId = AssetBrowser-->filterTree.insertItem(1, %moduleName, "", "", 1, 1);
|
||||
|
||||
%assetType = AssetDatabase.getAssetCategory(%assetId);
|
||||
|
||||
if(%assetType $= "")
|
||||
{
|
||||
%assetType = AssetDatabase.getAssetType(%assetId);
|
||||
if(%assetType $= "")
|
||||
%assetType = "Misc";
|
||||
}
|
||||
|
||||
if(AssetBrowser.assetTypeFilter !$= "" && AssetBrowser.assetTypeFilter !$= %assetType)
|
||||
continue;
|
||||
|
||||
%assetTypeId = AssetBrowser-->filterTree.findChildItemByName(%moduleItemId, %assetType);
|
||||
|
||||
if(%assetTypeId == 0)
|
||||
%assetTypeId = AssetBrowser-->filterTree.insertItem(%moduleItemId, %assetType);
|
||||
}
|
||||
|
||||
AssetBrowser-->filterTree.buildVisibleTree(true);
|
||||
}
|
||||
else if(%this.treeFilterMode $= "tags")
|
||||
{
|
||||
%assetId = %assetQuery.getAsset(%i);
|
||||
|
||||
//first, get the asset's module, as our major categories
|
||||
%module = AssetDatabase.getAssetModule(%assetId);
|
||||
|
||||
%moduleName = %module.moduleId;
|
||||
|
||||
//These are core, native-level components, so we're not going to be messing with this module at all, skip it
|
||||
if(%moduleName $= "CoreComponentsModule")
|
||||
continue;
|
||||
|
||||
//first, see if this module Module is listed already
|
||||
%moduleItemId = AssetBrowser-->filterTree.findItemByName(%moduleName);
|
||||
|
||||
if(%moduleItemId == 0)
|
||||
%moduleItemId = AssetBrowser-->filterTree.insertItem(1, %moduleName, "", "", 1, 1);
|
||||
|
||||
%assetType = AssetDatabase.getAssetCategory(%assetId);
|
||||
|
||||
if(%assetType $= "")
|
||||
{
|
||||
%assetType = AssetDatabase.getAssetType(%assetId);
|
||||
if(%assetType $= "")
|
||||
%assetType = "Misc";
|
||||
}
|
||||
|
||||
if(AssetBrowser.assetTypeFilter !$= "" && AssetBrowser.assetTypeFilter !$= %assetType)
|
||||
continue;
|
||||
|
||||
%assetTypeId = AssetBrowser-->filterTree.findChildItemByName(%moduleItemId, %assetType);
|
||||
|
||||
if(%assetTypeId == 0)
|
||||
%assetTypeId = AssetBrowser-->filterTree.insertItem(%moduleItemId, %assetType);
|
||||
|
||||
}
|
||||
|
||||
AssetBrowser-->filterTree.buildVisibleTree(true);
|
||||
|
||||
%this.collapseTree();
|
||||
|
||||
//Remove any modules that have no assets if we have that filter on
|
||||
if(%this.onlyShowModulesWithAssets)
|
||||
{
|
||||
for(%i=0; %i < getWordCount(%modulesList); %i++)
|
||||
{
|
||||
%moduleName = getWord(%modulesList, %i).ModuleId;
|
||||
|
||||
%moduleItemId = AssetBrowser-->filterTree.findItemByName(%moduleName);
|
||||
|
||||
if(AssetBrowser-->filterTree.isParentItem(%moduleItemId) == false)
|
||||
AssetBrowser-->filterTree.removeItem(%moduleItemId);
|
||||
}
|
||||
}
|
||||
|
||||
//special handling for selections
|
||||
if(AssetBrowser.newModuleId !$= "")
|
||||
{
|
||||
|
|
@ -484,6 +484,8 @@ function AssetBrowser::loadFilters( %this )
|
|||
|
||||
%selectedItem = AssetBrowser-->filterTree.getSelectedItem();
|
||||
AssetBrowser-->filterTree.scrollVisibleByObjectId(%selectedItem);
|
||||
|
||||
AssetBrowser-->filterTree.buildVisibleTree();
|
||||
}
|
||||
|
||||
// create category and update current material if there is one
|
||||
|
|
@ -563,6 +565,26 @@ function AssetBrowser::updateSelection( %this, %asset, %moduleName )
|
|||
%this.prevSelectedMaterialHL = %asset;
|
||||
}
|
||||
|
||||
function AssetBrowser::collapseTree(%this)
|
||||
{
|
||||
%modulesList = ModuleDatabase.findModules(true);
|
||||
|
||||
for(%i=0; %i < getWordCount(%modulesList); %i++)
|
||||
{
|
||||
%moduleName = getWord(%modulesList, %i).ModuleId;
|
||||
|
||||
%moduleGroup = getWord(%modulesList, %i).Group;
|
||||
if((%moduleGroup $= "Core" || %moduleGroup $= "Tools") && !%this.coreModulesFilter)
|
||||
continue;
|
||||
|
||||
%moduleItemId = AssetBrowser-->filterTree.findItemByName(%moduleName);
|
||||
|
||||
AssetBrowser-->filterTree.expandItem(%moduleItemId, false);
|
||||
}
|
||||
|
||||
AssetBrowser-->filterTree.expandItem(1, true);
|
||||
}
|
||||
|
||||
//
|
||||
//needs to be deleted with the persistence manager and needs to be blanked out of the matmanager
|
||||
//also need to update instances... i guess which is the tricky part....
|
||||
|
|
@ -709,6 +731,9 @@ function AssetBrowser::changeAsset(%this)
|
|||
%cmd = %this.fieldTargetObject @ "." @ %this.fieldTargetName @ "=\"" @ %this.selectedAsset @ "\";";
|
||||
echo("Changing asset via the " @ %cmd @ " command");
|
||||
eval(%cmd);
|
||||
|
||||
//Flag us as dirty for editing purposes
|
||||
EWorldEditor.setSceneAsDirty();
|
||||
}
|
||||
|
||||
function AssetBrowser::reImportAsset(%this)
|
||||
|
|
@ -722,8 +747,34 @@ function AssetBrowser::reImportAsset(%this)
|
|||
AssetBrowser.isAssetReImport = true;
|
||||
AssetBrowser.reImportingAssetId = EditAssetPopup.assetId;
|
||||
|
||||
%reimportingPath = %assetDef.originalFilePath;
|
||||
|
||||
//first, double-check we have an originating file. if we don't then we need to basically go out looking for it
|
||||
if(!isFile(%assetDef.originalFilePath))
|
||||
{
|
||||
//if(%assetType $= "ImageAsset")
|
||||
// %filters = "";
|
||||
|
||||
%dlg = new OpenFileDialog()
|
||||
{
|
||||
Filters = "(All Files (*.*)|*.*|";
|
||||
DefaultFile = %currentFile;
|
||||
ChangePath = false;
|
||||
MustExist = true;
|
||||
MultipleFiles = false;
|
||||
forceRelativePath = false;
|
||||
};
|
||||
|
||||
if ( %dlg.Execute() )
|
||||
{
|
||||
%reimportingPath = %dlg.FileName;
|
||||
}
|
||||
|
||||
%dlg.delete();
|
||||
}
|
||||
|
||||
AssetBrowser.onBeginDropFiles();
|
||||
AssetBrowser.onDropFile(%assetDef.originalFilePath);
|
||||
AssetBrowser.onDropFile(%reimportingPath);
|
||||
AssetBrowser.onEndDropFiles();
|
||||
|
||||
%module = AssetDatabase.getAssetModule(EditAssetPopup.assetId);
|
||||
|
|
@ -745,7 +796,7 @@ function AssetPreviewButton::onRightClick(%this)
|
|||
EditAssetPopup.enableItem(7, true);
|
||||
|
||||
//Is it an editable type?
|
||||
if(%assetType $= "ImageAsset" || %assetType $= "GameObjectAsset" || %assetType $= "SoundAsset")
|
||||
if(%assetType $= "ImageAsset" /*|| %assetType $= "GameObjectAsset"*/ || %assetType $= "CppAsset" || %assetType $= "SoundAsset")
|
||||
{
|
||||
EditAssetPopup.enableItem(0, false);
|
||||
}
|
||||
|
|
@ -758,7 +809,10 @@ function AssetPreviewButton::onRightClick(%this)
|
|||
EditAssetPopup.enableItem(7, false);
|
||||
}
|
||||
|
||||
EditAssetPopup.showPopup(Canvas);
|
||||
if(%assetType $= "LevelAsset")
|
||||
EditLevelAssetPopup.showPopup(Canvas);
|
||||
else
|
||||
EditAssetPopup.showPopup(Canvas);
|
||||
}
|
||||
|
||||
function AssetListPanel::onRightMouseDown(%this)
|
||||
|
|
@ -802,10 +856,6 @@ function AssetBrowserFilterTree::onSelect(%this, %itemId)
|
|||
|
||||
// we have to empty out the list; so when we create new schedules, these dont linger
|
||||
MatEdScheduleArray.empty();
|
||||
|
||||
// manage preview array
|
||||
if(!isObject(AssetPreviewArray))
|
||||
new ArrayObject(AssetPreviewArray);
|
||||
|
||||
// we have to empty out the list; so when we create new guicontrols, these dont linger
|
||||
AssetPreviewArray.empty();
|
||||
|
|
@ -876,8 +926,6 @@ function AssetBrowserFilterTree::onSelect(%this, %itemId)
|
|||
|
||||
for(%i=0; %i < %assetArray.count(); %i++)
|
||||
AssetBrowser.buildPreviewArray( %assetArray.getValue(%i), %assetArray.getKey(%i) );
|
||||
|
||||
AssetBrowser.loadImages( 0 );
|
||||
}
|
||||
|
||||
function AssetBrowserFilterTree::onRightMouseDown(%this, %itemId)
|
||||
|
|
@ -909,9 +957,9 @@ function AssetBrowserFilterTree::onRightMouseDown(%this, %itemId)
|
|||
//Canvas.popDialog(AssetBrowser_newComponentAsset);
|
||||
//AssetBrowser_newComponentAsset-->AssetBrowserModuleList.setText(AssetBrowser.selectedModule);
|
||||
}
|
||||
else
|
||||
else if(%this.getItemText(%itemId) $= "ScriptAsset")
|
||||
{
|
||||
|
||||
EditAssetCategoryPopup.showPopup(Canvas);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1131,45 +1179,35 @@ function EWorldEditor::onControlDropped( %this, %payload, %position )
|
|||
|
||||
if(%assetType $= "ImageAsset")
|
||||
{
|
||||
echo("DROPPED AN IMAGE ON THE EDITOR WINDOW!");
|
||||
echo("WorldEditor::onControlDropped - dropped an ImageAsset onto the editor window. Todo: Implement dropping image/material into scene");
|
||||
}
|
||||
else if(%assetType $= "ShapeAsset")
|
||||
{
|
||||
echo("DROPPED A SHAPE ON THE EDITOR WINDOW!");
|
||||
|
||||
%newEntity = new Entity()
|
||||
{
|
||||
position = %pos;
|
||||
|
||||
new MeshComponent()
|
||||
{
|
||||
MeshAsset = %module @ ":" @ %asset;
|
||||
};
|
||||
|
||||
//new CollisionComponent(){};
|
||||
};
|
||||
%staticShapeObjDef = AssetDatabase.acquireAsset("Core_GameObjects:StaticShapeObject");
|
||||
|
||||
MissionGroup.add(%newEntity);
|
||||
%newEntity = %staticShapeObjDef.createObject();
|
||||
|
||||
%newEntity.position = %pos;
|
||||
%newEntity-->MeshComponent.MeshAsset = %module @ ":" @ %asset;
|
||||
|
||||
getScene(0).add(%newEntity);
|
||||
|
||||
EWorldEditor.clearSelection();
|
||||
EWorldEditor.selectObject(%newEntity);
|
||||
}
|
||||
else if(%assetType $= "MaterialAsset")
|
||||
{
|
||||
echo("DROPPED A MATERIAL ON THE EDITOR WINDOW!");
|
||||
echo("WorldEditor::onControlDropped - dropped an MaterialAsset onto the editor window. Todo: Implement dropping image/material into scene");
|
||||
}
|
||||
else if(%assetType $= "GameObjectAsset")
|
||||
{
|
||||
echo("DROPPED A GAME OBJECT ON THE EDITOR WINDOW!");
|
||||
echo("WorldEditor::onControlDropped - dropped an GameObjectAsset onto the editor window.");
|
||||
|
||||
%GO = spawnGameObject(%asset, true);
|
||||
%goAssetDef = AssetDatabase.acquireAsset(%module @ ":" @%asset);
|
||||
|
||||
%pos = EWCreatorWindow.getCreateObjectPosition(); //LocalClientConnection.camera.position;
|
||||
|
||||
%GO.position = %pos;
|
||||
|
||||
EWorldEditor.clearSelection();
|
||||
EWorldEditor.selectObject(%GO);
|
||||
AssetBrowser.dragAndDropGameObjectAsset(%goAssetDef, EWorldEditor);
|
||||
}
|
||||
else if(%assetType $= "ComponentAsset")
|
||||
{
|
||||
|
|
@ -1185,7 +1223,7 @@ function EWorldEditor::onControlDropped( %this, %payload, %position )
|
|||
else
|
||||
eval("$tmpVar = new " @ %assetDef.componentClass @ "() {}; %newEntity.add($tmpVar);");
|
||||
|
||||
MissionGroup.add(%newEntity);
|
||||
getScene(0).add(%newEntity);
|
||||
|
||||
EWorldEditor.clearSelection();
|
||||
EWorldEditor.selectObject(%newEntity);
|
||||
|
|
@ -1198,7 +1236,7 @@ function EWorldEditor::onControlDropped( %this, %payload, %position )
|
|||
class = %asset;
|
||||
};
|
||||
|
||||
MissionGroup.add(%newEntity);
|
||||
getScene(0).add(%newEntity);
|
||||
|
||||
EWorldEditor.clearSelection();
|
||||
EWorldEditor.selectObject(%newEntity);
|
||||
|
|
@ -1207,68 +1245,6 @@ function EWorldEditor::onControlDropped( %this, %payload, %position )
|
|||
EWorldEditor.isDirty = true;
|
||||
}
|
||||
|
||||
function GuiInspectorTypeShapeAssetPtr::onControlDropped( %this, %payload, %position )
|
||||
{
|
||||
Canvas.popDialog(EditorDragAndDropLayer);
|
||||
|
||||
// Make sure this is a color swatch drag operation.
|
||||
if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) )
|
||||
return;
|
||||
|
||||
%assetType = %payload.dragSourceControl.parentGroup.assetType;
|
||||
|
||||
if(%assetType $= "ShapeAsset")
|
||||
{
|
||||
echo("DROPPED A SHAPE ON A SHAPE ASSET COMPONENT FIELD!");
|
||||
|
||||
%module = %payload.dragSourceControl.parentGroup.moduleName;
|
||||
%asset = %payload.dragSourceControl.parentGroup.assetName;
|
||||
|
||||
%targetComponent = %this.ComponentOwner;
|
||||
%targetComponent.MeshAsset = %module @ ":" @ %asset;
|
||||
|
||||
//Inspector.refresh();
|
||||
}
|
||||
|
||||
EWorldEditor.isDirty= true;
|
||||
}
|
||||
|
||||
function GuiInspectorTypeImageAssetPtr::onControlDropped( %this, %payload, %position )
|
||||
{
|
||||
Canvas.popDialog(EditorDragAndDropLayer);
|
||||
|
||||
// Make sure this is a color swatch drag operation.
|
||||
if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) )
|
||||
return;
|
||||
|
||||
%assetType = %payload.dragSourceControl.parentGroup.assetType;
|
||||
|
||||
if(%assetType $= "ImageAsset")
|
||||
{
|
||||
echo("DROPPED A IMAGE ON AN IMAGE ASSET COMPONENT FIELD!");
|
||||
}
|
||||
|
||||
EWorldEditor.isDirty = true;
|
||||
}
|
||||
|
||||
function GuiInspectorTypeMaterialAssetPtr::onControlDropped( %this, %payload, %position )
|
||||
{
|
||||
Canvas.popDialog(EditorDragAndDropLayer);
|
||||
|
||||
// Make sure this is a color swatch drag operation.
|
||||
if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) )
|
||||
return;
|
||||
|
||||
%assetType = %payload.dragSourceControl.parentGroup.assetType;
|
||||
|
||||
if(%assetType $= "MaterialAsset")
|
||||
{
|
||||
echo("DROPPED A MATERIAL ON A MATERIAL ASSET COMPONENT FIELD!");
|
||||
}
|
||||
|
||||
EWorldEditor.isDirty = true;
|
||||
}
|
||||
|
||||
function AssetBrowserFilterTree::onControlDropped( %this, %payload, %position )
|
||||
{
|
||||
Canvas.popDialog(EditorDragAndDropLayer);
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -8,7 +8,9 @@ function ImportAssetConfigList::onSelect( %this, %id, %text )
|
|||
|
||||
ImportAssetWindow.activeImportConfigIndex = %id;
|
||||
ImportAssetWindow.activeImportConfig = ImportAssetWindow.importConfigsList.getKey(%id);
|
||||
ImportAssetWindow.refresh();
|
||||
//ImportAssetWindow.refresh();
|
||||
|
||||
AssetBrowser.reloadImportingFiles();
|
||||
}
|
||||
|
||||
function ImportAssetOptionsWindow::findMissingFile(%this, %assetItem)
|
||||
|
|
@ -26,6 +28,7 @@ function ImportAssetOptionsWindow::findMissingFile(%this, %assetItem)
|
|||
ChangePath = true;
|
||||
OverwritePrompt = true;
|
||||
forceRelativePath = false;
|
||||
fileName="";
|
||||
//MultipleFiles = true;
|
||||
};
|
||||
|
||||
|
|
@ -43,6 +46,23 @@ function ImportAssetOptionsWindow::findMissingFile(%this, %assetItem)
|
|||
return;
|
||||
|
||||
%assetItem.filePath = %fullPath;
|
||||
%assetItem.assetName = fileBase(%assetItem.filePath);
|
||||
|
||||
if(%assetItem.assetType $= "Image")
|
||||
{
|
||||
//See if we have anything important to update for our material parent(if we have one)
|
||||
%treeItem = ImportAssetTree.findItemByObjectId(%assetItem);
|
||||
%parentItem = ImportAssetTree.getParentItem(%treeItem);
|
||||
|
||||
if(%parentItem != 0)
|
||||
{
|
||||
%parentAssetItem = ImportAssetTree.getItemObject(%parentItem);
|
||||
if(%parentAssetItem.assetType $= "Material")
|
||||
{
|
||||
AssetBrowser.prepareImportMaterialAsset(%parentAssetItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImportAssetWindow.refresh();
|
||||
}
|
||||
|
|
@ -128,6 +148,7 @@ function ImportAssetOptionsWindow::editImportSettings(%this, %assetItem)
|
|||
ImportOptionsList.addField("PopulateMaterialMaps", "Populate Material Maps", "bool", "", "1", "", %optionsObj);
|
||||
ImportOptionsList.addField("UseDiffuseSuffixOnOriginImg", "Use Diffuse Suffix for Origin Image", "bool", "", "1", "", %optionsObj);
|
||||
ImportOptionsList.addField("UseExistingMaterials", "Use Existing Materials", "bool", "", "1", "", %optionsObj);
|
||||
ImportOptionsList.addField("IgnoreMaterials", "Ignore Importing Materials that fit these naming convention.", "command", "", "1", "", %optionsObj);
|
||||
ImportOptionsList.endGroup();
|
||||
}
|
||||
else if(%assetType $= "Sound")
|
||||
|
|
@ -145,35 +166,13 @@ function ImportAssetOptionsWindow::editImportSettings(%this, %assetItem)
|
|||
|
||||
function ImportAssetOptionsWindow::deleteImportingAsset(%this, %assetItem)
|
||||
{
|
||||
%assetIndex = AssetBrowser.importAssetNewListArray.getIndexFromKey(%assetItem);
|
||||
AssetBrowser.importAssetNewListArray.erase(%assetIndex);
|
||||
%item = ImportAssetTree.findItemByObjectId(%assetItem);
|
||||
|
||||
//check if we have any child assets and remove them as well
|
||||
for(%i=0; %i < AssetBrowser.importAssetNewListArray.count(); %i++)
|
||||
{
|
||||
%asset = AssetBrowser.importAssetNewListArray.getKey(%i);
|
||||
if(%asset.ParentAssetItem == %assetItem)
|
||||
{
|
||||
AssetBrowser.importAssetNewListArray.erase(%i);
|
||||
%i--;
|
||||
}
|
||||
}
|
||||
|
||||
%assetIndex = AssetBrowser.importAssetFinalListArray.getIndexFromKey(%assetItem);
|
||||
AssetBrowser.importAssetFinalListArray.erase(%assetIndex);
|
||||
|
||||
//check if we have any child assets and remove them as well
|
||||
for(%i=0; %i < AssetBrowser.importAssetFinalListArray.count(); %i++)
|
||||
{
|
||||
%asset = AssetBrowser.importAssetFinalListArray.getKey(%i);
|
||||
if(%asset.ParentAssetItem == %assetItem)
|
||||
{
|
||||
AssetBrowser.importAssetFinalListArray.erase(%i);
|
||||
%i--;
|
||||
}
|
||||
}
|
||||
|
||||
ImportAssetWindow.refresh();
|
||||
ImportAssetTree.removeAllChildren(%item);
|
||||
ImportAssetTree.removeItem(%item);
|
||||
|
||||
schedule(10, 0, "refreshImportAssetWindow");
|
||||
//ImportAssetWindow.refresh();
|
||||
ImportAssetOptionsWindow.setVisible(0);
|
||||
}
|
||||
|
||||
|
|
@ -302,6 +301,7 @@ function ImportAssetConfigEditorWindow::addNewConfig(%this)
|
|||
|
||||
//Materials
|
||||
%optionsObj.ImportMaterials = true;
|
||||
%optionsObj.IgnoreMaterials = "";
|
||||
%optionsObj.CreateComposites = true;
|
||||
%optionsObj.UseDiffuseSuffixOnOriginImg = true;
|
||||
%optionsObj.UseExistingMaterials = true;
|
||||
|
|
@ -398,6 +398,7 @@ function ImportAssetConfigEditorWindow::saveAssetOptionsConfig(%this)
|
|||
|
||||
%xmlDoc.pushNewElement("Materials");
|
||||
%xmlDoc.setAttribute("ImportMaterials", %configObj.ImportMaterials);
|
||||
%xmlDoc.setAttribute("IgnoreMaterials", %configObj.IgnoreMaterials);
|
||||
%xmlDoc.setAttribute("CreateComposites", %configObj.CreateComposites);
|
||||
%xmlDoc.setAttribute("UseDiffuseSuffixOnOriginImg", %configObj.UseDiffuseSuffixOnOriginImg);
|
||||
%xmlDoc.setAttribute("UseExistingMaterials", %configObj.UseExistingMaterials);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
function AssetBrowser::create_Asset(%this)
|
||||
{
|
||||
}
|
||||
|
||||
function AssetBrowser::edit_Asset(%this, %assetDef)
|
||||
{
|
||||
}
|
||||
|
||||
function AssetBrowser::duplicate_Asset(%this, %assetDef, %targetModule)
|
||||
{
|
||||
}
|
||||
|
||||
function AssetBrowser::import_Asset(%this, %assetDef)
|
||||
{
|
||||
}
|
||||
|
||||
function AssetBrowser::dragAndDrop_Asset(%this, %assetDef, %dropTarget)
|
||||
{
|
||||
if(!isObject(%dropTarget))
|
||||
return;
|
||||
}
|
||||
|
||||
function AssetBrowser::rename_Asset(%this, %assetDef, %newAssetId, %originalName, %newName)
|
||||
{
|
||||
}
|
||||
|
||||
function AssetBrowser::delete_Asset(%this, %assetDef)
|
||||
{
|
||||
}
|
||||
|
||||
function AssetBrowser::build_AssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = "";
|
||||
%previewData.doubleClickCommand = "";
|
||||
|
||||
%previewData.previewImage = "tools/assetBrowser/art/gameObjectIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.gameObjectName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.gameObjectName;
|
||||
}
|
||||
|
||||
function GuiInspectorType_AssetPtr::onClick( %this, %fieldName )
|
||||
{
|
||||
//Get our data
|
||||
%obj = %this.getInspector().getInspectObject(0);
|
||||
}
|
||||
|
||||
function GuiInspectorType_AssetPtr::onControlDropped( %this, %payload, %position )
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
function AssetBrowser::createComponentAsset(%this)
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/components/" @ %assetName @ ".asset.taml";
|
||||
%scriptPath = %modulePath @ "/components/" @ %assetName @ ".cs";
|
||||
|
||||
%asset = new ComponentAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
componentName = %assetName;
|
||||
componentClass = AssetBrowser.newAssetSettings.parentClass;
|
||||
friendlyName = AssetBrowser.newAssetSettings.friendlyName;
|
||||
componentType = AssetBrowser.newAssetSettings.componentGroup;
|
||||
description = AssetBrowser.newAssetSettings.description;
|
||||
scriptFile = %assetName @ ".cs";
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
%file = new FileObject();
|
||||
|
||||
if(%file.openForWrite(%scriptPath))
|
||||
{
|
||||
//TODO: enable ability to auto-embed a header for copyright or whatnot
|
||||
%file.writeline("//onAdd is called when the component is created and then added to it's owner entity.\n");
|
||||
%file.writeline("//You would also add any script-defined component fields via addComponentField().\n");
|
||||
%file.writeline("function " @ %assetName @ "::onAdd(%this)\n{\n\n}\n");
|
||||
%file.writeline("//onAdd is called when the component is removed and deleted from it's owner entity.");
|
||||
%file.writeline("function " @ %assetName @ "::onRemove(%this)\n{\n\n}\n");
|
||||
%file.writeline("//onClientConnect is called any time a new client connects to the server.");
|
||||
%file.writeline("function " @ %assetName @ "::onClientConnect(%this, %client)\n{\n\n}\n");
|
||||
%file.writeline("//onClientDisconnect is called any time a client disconnects from the server.");
|
||||
%file.writeline("function " @ %assetName @ "::onClientDisonnect(%this, %client)\n{\n\n}\n");
|
||||
%file.writeline("//update is called when the component does an update tick.\n");
|
||||
%file.writeline("function " @ %assetName @ "::Update(%this)\n{\n\n}\n");
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
Canvas.popDialog(AssetBrowser_newComponentAsset);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "ComponentAsset");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function AssetBrowser::editComponentAsset(%this, %assetDef)
|
||||
{
|
||||
%scriptFile = %assetDef.scriptFile;
|
||||
|
||||
EditorOpenFileInTorsion(makeFullPath(%scriptFile), 0);
|
||||
}
|
||||
|
||||
function AssetBrowser::duplicateComponentAsset(%this, %assetId)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
function AssetBrowser::renameGameObjectAsset(%this, %assetDef, %newAssetId, %originalName, %newName)
|
||||
{
|
||||
%assetPath = AssetDatabase.getAssetFilePath(%newAssetId);
|
||||
|
||||
//rename the file to match
|
||||
%path = filePath(%assetPath);
|
||||
|
||||
%oldScriptFilePath = %assetDef.scriptFile;
|
||||
%scriptFilePath = filePath(%assetDef.scriptFile);
|
||||
%scriptExt = fileExt(%assetDef.scriptFile);
|
||||
|
||||
%newScriptFileName = %scriptFilePath @ "/" @ %newName @ %scriptExt;
|
||||
%newAssetFile = %path @ "/" @ %newName @ ".asset.taml";
|
||||
|
||||
%assetDef.componentName = %newName;
|
||||
%assetDef.scriptFile = %newScriptFileName;
|
||||
|
||||
TamlWrite(%assetDef, %newAssetFile);
|
||||
fileDelete(%assetPath);
|
||||
|
||||
pathCopy(%oldScriptFilePath, %newScriptFileName);
|
||||
fileDelete(%oldScriptFilePath);
|
||||
|
||||
//Go through our scriptfile and replace the old namespace with the new
|
||||
%editedFileContents = "";
|
||||
|
||||
%file = new FileObject();
|
||||
if ( %file.openForRead( %newScriptFileName ) )
|
||||
{
|
||||
while ( !%file.isEOF() )
|
||||
{
|
||||
%line = %file.readLine();
|
||||
%line = trim( %line );
|
||||
|
||||
%editedFileContents = %editedFileContents @ strreplace(%line, %originalAssetName, %newName) @ "\n";
|
||||
}
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
if(%editedFileContents !$= "")
|
||||
{
|
||||
%file.openForWrite(%newScriptFileName);
|
||||
|
||||
%file.writeline(%editedFileContents);
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
exec(%newScriptFileName);
|
||||
}
|
||||
|
||||
//not used
|
||||
function AssetBrowser::importComponentAsset(%this, %assetId)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
function AssetBrowser::buildComponentAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.scriptFile;
|
||||
%previewData.doubleClickCommand = "EditorOpenFileInTorsion( "@%previewData.assetPath@", 0 );";
|
||||
|
||||
%previewData.previewImage = "tools/assetBrowser/art/componentIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.friendlyName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.friendlyName @ "\n" @ %assetDef;
|
||||
}
|
||||
|
|
@ -0,0 +1,143 @@
|
|||
function AssetBrowser::createCppAsset(%this)
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/source/" @ %assetName @ ".asset.taml";
|
||||
%codePath = %modulePath @ "/source/" @ %assetName @ ".cpp";
|
||||
%headerPath = %modulePath @ "/source/" @ %assetName @ ".h";
|
||||
|
||||
//Do the work here
|
||||
%assetType = AssetBrowser.newAssetSettings.assetType;
|
||||
|
||||
/*if(%assetType $= "CppStaticClassAsset"
|
||||
|| %assetType $= "CppRegularClassAsset"
|
||||
|| %assetType $= "CppGameObjectAsset"
|
||||
|| %assetType $= "CppComponentAsset"
|
||||
|| %assetType $= "CppScriptClass")
|
||||
{
|
||||
|
||||
}*/
|
||||
|
||||
%asset = new CppAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
codeFile = %codePath;
|
||||
headerFile = %headerPath;
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "CppAsset");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
%templateFilesPath = "tools/assetBrowser/scripts/templateFiles/";
|
||||
|
||||
%file = new FileObject();
|
||||
%templateFile = new FileObject();
|
||||
|
||||
if(%assetType $= "CppStaticClassAsset")
|
||||
{
|
||||
%cppTemplateCodeFilePath = %templateFilesPath @ "CppStaticClassFile.cpp";
|
||||
%cppTemplateHeaderFilePath = %templateFilesPath @ "CppStaticClassFile.h";
|
||||
}
|
||||
|
||||
if(%file.openForWrite(%codePath) && %templateFile.openForRead(%cppTemplateCodeFilePath))
|
||||
{
|
||||
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("CreateNewCppAsset - Something went wrong and we couldn't write the C++ code file!");
|
||||
}
|
||||
|
||||
if(%file.openForWrite(%headerPath) && %templateFile.openForRead(%cppTemplateHeaderFilePath))
|
||||
{
|
||||
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("CreateNewCppAsset - Something went wrong and we couldn't write the C++ header file!");
|
||||
}
|
||||
|
||||
//Last, check that we have a C++ Module definition. If not, make one so anything important can be initialized on startup there
|
||||
%cppModuleFilePath = %modulePath @ "/source/" @ %moduleName @ ".cpp";
|
||||
if(!isFile(%cppModuleFilePath))
|
||||
{
|
||||
%file = new FileObject();
|
||||
%templateFile = new FileObject();
|
||||
|
||||
if(%file.openForWrite(%cppModuleFilePath) && %templateFile.openForRead(%templateFilesPath @ "CppModuleFile.cpp"))
|
||||
{
|
||||
while( !%templateFile.isEOF() )
|
||||
{
|
||||
%line = %templateFile.readline();
|
||||
%line = strreplace( %line, "@", %moduleName );
|
||||
|
||||
%file.writeline(%line);
|
||||
echo(%line);
|
||||
}
|
||||
|
||||
%file.close();
|
||||
%templateFile.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
%file.close();
|
||||
%templateFile.close();
|
||||
|
||||
warnf("CreateNewCppAsset - Something went wrong and we couldn't write the C++ module file!");
|
||||
}
|
||||
}
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function AssetBrowser::buildCppAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.codeFilePath;
|
||||
%previewData.doubleClickCommand = "echo(\"Not yet implemented to edit C++ files from the editor\");";//"EditorOpenFileInTorsion( "@%previewData.assetPath@", 0 );";
|
||||
|
||||
%previewData.previewImage = "tools/assetBrowser/art/cppIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.assetName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.assetName;
|
||||
}
|
||||
|
|
@ -0,0 +1,242 @@
|
|||
function AssetBrowser::createGameObjectAsset(%this)
|
||||
{
|
||||
GameObjectCreatorObjectName.text = "";
|
||||
|
||||
%activeSelection = EWorldEditor.getActiveSelection();
|
||||
if( %activeSelection.getCount() == 0 )
|
||||
return;
|
||||
|
||||
GameObjectCreator.selectedEntity = %activeSelection.getObject( 0 );
|
||||
|
||||
Canvas.pushDialog(GameObjectCreator);
|
||||
}
|
||||
|
||||
function AssetBrowser::editGameObjectAsset(%this, %assetDef)
|
||||
{
|
||||
//We have no dedicated GO editor for now, so just defer to the script editing aspect
|
||||
%this.editGameObjectAssetScript(%assetDef);
|
||||
}
|
||||
|
||||
function AssetBrowser::editGameObjectAssetScript(%this, %assetDef)
|
||||
{
|
||||
%scriptFile = %assetDef.scriptFile;
|
||||
|
||||
EditorOpenFileInTorsion(makeFullPath(%scriptFile), 0);
|
||||
}
|
||||
|
||||
function AssetBrowser::applyInstanceToGameObject(%this, %assetDef)
|
||||
{
|
||||
%obj = EditGameObjectAssetPopup.object;
|
||||
|
||||
//TODO add proper validation against the original GO asset
|
||||
%obj.dirtyGameObject = true;
|
||||
|
||||
TamlWrite(%obj, %assetDef.TAMLFilePath);
|
||||
}
|
||||
|
||||
function AssetBrowser::duplicateGameObjectAsset(%this, %assetDef, %targetModule)
|
||||
{
|
||||
//Check if we have a target module, if not we need to select one
|
||||
if(%targetModule $= "")
|
||||
{
|
||||
error("AssetBrowser::duplicateGameObjectAsset - No target module selected!");
|
||||
return;
|
||||
}
|
||||
|
||||
%assetId = %assetDef.getAssetId();
|
||||
%assetName = AssetDatabase.getAssetName(%assetId);
|
||||
|
||||
//First step, copy the files
|
||||
%modulePath = "data/" @ %targetModule @ "/gameObjects/";
|
||||
|
||||
if(!isDirectory(%modulePath))
|
||||
createPath(%modulePath);
|
||||
|
||||
%assetFile = AssetDatabase.getAssetFilePath(%assetId);
|
||||
%scriptFile = %assetDef.scriptFile;
|
||||
%gameObjectFile = %assetDef.TAMLFile;
|
||||
|
||||
echo("AssetBrowser::duplicateGameObjectAsset - duplicating! " @ %assetId @ " to " @ %targetModule);
|
||||
|
||||
%tamlPath = %modulePath @ fileName(%assetFile);
|
||||
|
||||
pathCopy(%assetFile, %tamlPath);
|
||||
pathCopy(%scriptFile, %modulePath @ fileName(%scriptFile));
|
||||
pathCopy(%gameObjectFile, %modulePath @ fileName(%gameObjectFile));
|
||||
|
||||
echo("AssetBrowser::duplicateGameObjectAsset - duplicated!");
|
||||
|
||||
//Register the asset
|
||||
%moduleDef = ModuleDatabase.findModule(%targetModule, 1);
|
||||
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlPath);
|
||||
|
||||
//Refresh the browser
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
//Ensure our context is set
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%targetModule);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "GameObjectAsset");
|
||||
|
||||
AssetBrowserFilterTree.selectItem(%smItem);
|
||||
|
||||
//Rename it for convenience
|
||||
AssetBrowser.performRenameAsset(%assetName, "New" @ %assetName);
|
||||
|
||||
//Expand and refresh the target module
|
||||
AssetBrowserFilterTree.expandItem(%treeItemId,true);
|
||||
|
||||
AssetBrowserFilterTree.buildVisibleTree();
|
||||
}
|
||||
|
||||
//not used
|
||||
function AssetBrowser::importGameObjectAsset(%this, %assetId)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
function AssetBrowser::dragAndDropGameObjectAsset(%this, %assetDef, %dropTarget)
|
||||
{
|
||||
if(!isObject(%dropTarget))
|
||||
return;
|
||||
|
||||
if(%dropTarget.getId() == EWorldEditor.getId())
|
||||
{
|
||||
if(isObject(%assetDef))
|
||||
{
|
||||
%gameObject = %assetDef.createObject();
|
||||
|
||||
getScene(0).add(%gameObject);
|
||||
|
||||
%pos = EWCreatorWindow.getCreateObjectPosition(); //LocalClientConnection.camera.position;
|
||||
|
||||
%gameObject.position = %pos;
|
||||
|
||||
EWorldEditor.clearSelection();
|
||||
EWorldEditor.selectObject(%gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
error("WorldEditor::onControlDropped - unable to create GameObject");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function AssetBrowser::renameGameObjectAsset(%this, %assetDef, %newAssetId, %originalName, %newName)
|
||||
{
|
||||
%oldScriptFilePath = %assetDef.scriptFile;
|
||||
%scriptFilePath = filePath(%assetDef.scriptFile);
|
||||
%scriptExt = fileExt(%assetDef.scriptFile);
|
||||
|
||||
%oldGOFilePath = %assetDef.TAMLFile;
|
||||
|
||||
%filepath = AssetDatabase.getAssetFilePath(%assetDef.getAssetId());
|
||||
%path = makeRelativePath(filePath(%filepath));
|
||||
|
||||
%newScriptFileName = %path @ "/" @ %newName @ %scriptExt;
|
||||
%newAssetFile = %path @ "/" @ %newName @ ".asset.taml";
|
||||
%newGOFile = %path @ "/" @ %newName @ ".taml";
|
||||
|
||||
%assetDef.gameObjectName = %newName;
|
||||
%assetDef.scriptFile = %newScriptFileName;
|
||||
%assetDef.TAMLFile = %newGOFile;
|
||||
|
||||
TamlWrite(%assetDef, %newAssetFile);
|
||||
fileDelete(%filepath);
|
||||
|
||||
//Quick check, if we duplicated the asset to a new module, the old path may not line up so we'll want to update that to be relevent
|
||||
if(filePath(%oldScriptFilePath) !$= %path)
|
||||
{
|
||||
%oldFileBase = fileName(%oldScriptFilePath);
|
||||
%oldScriptFilePath = %path @ "/" @ %oldFileBase;
|
||||
}
|
||||
|
||||
%scriptFileCopySuccess = pathCopy(%oldScriptFilePath, %newScriptFileName);
|
||||
fileDelete(%oldScriptFilePath);
|
||||
|
||||
if(!%scriptFileCopySuccess)
|
||||
error("AssetBrowser::renameGameObjectAsset - unable to copy scriptFile");
|
||||
|
||||
if(filePath(%oldGOFilePath) !$= %path)
|
||||
{
|
||||
%oldFileBase = fileName(%oldGOFilePath);
|
||||
%oldGOFilePath = %path @ "/" @ %oldFileBase;
|
||||
}
|
||||
|
||||
%goFileCopySuccess = pathCopy(%oldGOFilePath, %newGOFile);
|
||||
fileDelete(%oldGOFilePath);
|
||||
|
||||
if(!%scriptFileCopySuccess)
|
||||
error("AssetBrowser::renameGameObjectAsset - unable to copy gameObject");
|
||||
|
||||
//Go through our scriptfile and replace the old namespace with the new
|
||||
%editedFileContents = "";
|
||||
|
||||
%file = new FileObject();
|
||||
if ( %file.openForRead( %newScriptFileName ) )
|
||||
{
|
||||
while ( !%file.isEOF() )
|
||||
{
|
||||
%line = %file.readLine();
|
||||
%line = trim( %line );
|
||||
|
||||
%editedFileContents = %editedFileContents @ strreplace(%line, %originalName, %newName) @ "\n";
|
||||
}
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
if(%editedFileContents !$= "")
|
||||
{
|
||||
%file.openForWrite(%newScriptFileName);
|
||||
|
||||
%file.writeline(%editedFileContents);
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
exec(%newScriptFileName);
|
||||
|
||||
%gameObj = TAMLRead(%newGOFile);
|
||||
|
||||
%gameObj.className = %newName;
|
||||
%gameObj.GameObject = %assetDef.getAssetId();
|
||||
|
||||
TAMLWrite(%gameObj, %newGOFile);
|
||||
}
|
||||
|
||||
function AssetBrowser::buildGameObjectAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.scriptFile;
|
||||
%previewData.doubleClickCommand = "EditorOpenFileInTorsion( "@%previewData.assetPath@", 0 );";
|
||||
|
||||
%previewData.previewImage = "tools/assetBrowser/art/gameObjectIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.gameObjectName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.gameObjectName;
|
||||
}
|
||||
|
||||
function GuiInspectorTypeGameObjectAssetPtr::onClick( %this, %fieldName )
|
||||
{
|
||||
//Get our data
|
||||
%obj = %this.getInspector().getInspectObject(0);
|
||||
|
||||
EditGameObjectAssetPopup.object = %obj;
|
||||
|
||||
%assetId = %obj.getFieldValue(%fieldName);
|
||||
|
||||
if(%assetId !$= "")
|
||||
{
|
||||
EditGameObjectAssetPopup.assetId = %assetId;
|
||||
|
||||
|
||||
EditGameObjectAssetPopup.showPopup(Canvas);
|
||||
}
|
||||
else
|
||||
{
|
||||
//We've gotta be trying to create a GameObject, so kick that off
|
||||
AssetBrowser.createGameObjectAsset();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
function AssetBrowser::createGUIAsset(%this)
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/GUIs/" @ %assetName @ ".asset.taml";
|
||||
%guipath = %modulePath @ "/GUIs/" @ %assetName @ ".gui";
|
||||
%scriptPath = %modulePath @ "/GUIs/" @ %assetName @ ".cs";
|
||||
|
||||
%asset = new GUIAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
scriptFile = %assetName @ ".cs";
|
||||
guiFile = %assetName @ ".gui";
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
%file = new FileObject();
|
||||
|
||||
if(%file.openForWrite(%guipath))
|
||||
{
|
||||
%file.writeline("//--- OBJECT WRITE BEGIN ---");
|
||||
%file.writeline("%guiContent = new GuiControl(" @ %assetName @ ") {");
|
||||
%file.writeline(" position = \"0 0\";");
|
||||
%file.writeline(" extent = \"100 100\";");
|
||||
%file.writeline("};");
|
||||
%file.writeline("//--- OBJECT WRITE END ---");
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
if(%file.openForWrite(%scriptPath))
|
||||
{
|
||||
%file.writeline("function " @ %assetName @ "::onWake(%this)\n{\n\n}\n");
|
||||
%file.writeline("function " @ %assetName @ "::onSleep(%this)\n{\n\n}\n");
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
//load the gui
|
||||
exec(%guipath);
|
||||
exec(%scriptPath);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "GUIs");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function AssetBrowser::editGUIAsset(%this, %assetDef)
|
||||
{
|
||||
if(!isObject(%assetDef.assetName))
|
||||
{
|
||||
exec(%assetDef.GUIFilePath);
|
||||
exec(%assetDef.mScriptFilePath);
|
||||
}
|
||||
|
||||
GuiEditContent(%assetDef.assetName);
|
||||
}
|
||||
|
||||
function AssetBrowser::buildGUIAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.GUIFilePath;
|
||||
%previewData.doubleClickCommand = "";
|
||||
|
||||
%previewData.previewImage = "tools/assetBrowser/art/guiIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.assetName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.assetName;
|
||||
}
|
||||
|
|
@ -0,0 +1,163 @@
|
|||
function AssetBrowser::prepareImportImageAsset(%this, %assetItem)
|
||||
{
|
||||
if(ImportAssetWindow.activeImportConfig.GenerateMaterialOnImport == 1 && %assetItem.parentAssetItem $= "")
|
||||
{
|
||||
//First, see if this already has a suffix of some sort based on our import config logic. Many content pipeline tools like substance automatically appends them
|
||||
%foundSuffixType = ImportAssetWindow.parseImageSuffixes(%assetItem);
|
||||
|
||||
if(%foundSuffixType $= "")
|
||||
{
|
||||
%noSuffixName = %assetItem.AssetName;
|
||||
}
|
||||
else
|
||||
{
|
||||
%suffixPos = strpos(strlwr(%assetItem.AssetName), strlwr(%assetItem.imageSuffixType), 0);
|
||||
%noSuffixName = getSubStr(%assetItem.AssetName, 0, %suffixPos);
|
||||
}
|
||||
|
||||
//Check if our material already exists
|
||||
//First, lets double-check that we don't already have an
|
||||
%materialAsset = AssetBrowser.doesAssetItemAlreadyExist(%noSuffixName);
|
||||
if(%materialAsset == 0)
|
||||
{
|
||||
%filePath = %assetItem.filePath;
|
||||
if(%filePath !$= "")
|
||||
%materialAsset = AssetBrowser.addImportingAsset("Material", "", "", %noSuffixName);
|
||||
}
|
||||
|
||||
if(isObject(%materialAsset))
|
||||
{
|
||||
//Establish parentage
|
||||
%itemId = ImportAssetTree.findItemByObjectId(%assetItem);
|
||||
%materialItemId = ImportAssetTree.findItemByObjectId(%materialAsset);
|
||||
|
||||
%assetItem.parentId = %materialItemId;
|
||||
|
||||
ImportAssetTree.reparentItem(%itemId, %materialItemId);
|
||||
|
||||
ImportAssetTree.buildVisibleTree(true);
|
||||
}
|
||||
|
||||
//Lets do some cleverness here. If we're generating a material we can parse like assets being imported(similar file names) but different suffixes
|
||||
//if we find these, we'll just populate into the original's material
|
||||
|
||||
//If we need to append the diffuse suffix and indeed didn't find a suffix on the name, do that here
|
||||
if(ImportAssetWindow.activeImportConfig.UseDiffuseSuffixOnOriginImg == 1)
|
||||
{
|
||||
if(%foundSuffixType $= "")
|
||||
{
|
||||
%diffuseToken = getToken(ImportAssetWindow.activeImportConfig.DiffuseTypeSuffixes, ",", 0);
|
||||
%assetItem.AssetName = %assetItem.AssetName @ %diffuseToken;
|
||||
|
||||
if(ImportAssetWindow.activeImportConfig.PopulateMaterialMaps == 1)
|
||||
%materialAsset.diffuseImageAsset = %assetItem;
|
||||
}
|
||||
else if(%foundSuffixType !$= "")
|
||||
{
|
||||
//otherwise, if we have some sort of suffix, we'll want to figure out if we've already got an existing material, and should append to it
|
||||
|
||||
if(ImportAssetWindow.activeImportConfig.PopulateMaterialMaps == 1)
|
||||
{
|
||||
if(%foundSuffixType $= "diffuse")
|
||||
%materialAsset.diffuseImageAsset = %assetItem;
|
||||
else if(%foundSuffixType $= "normal")
|
||||
%materialAsset.normalImageAsset = %assetItem;
|
||||
else if(%foundSuffixType $= "metalness")
|
||||
%materialAsset.metalnessImageAsset = %assetItem;
|
||||
else if(%foundSuffixType $= "roughness")
|
||||
%materialAsset.roughnessImageAsset = %assetItem;
|
||||
else if(%foundSuffixType $= "specular")
|
||||
%materialAsset.specularImageAsset = %assetItem;
|
||||
else if(%foundSuffixType $= "AO")
|
||||
%materialAsset.AOImageAsset = %assetItem;
|
||||
else if(%foundSuffixType $= "composite")
|
||||
%materialAsset.compositeImageAsset = %assetItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//We need to ensure that our image asset doesn't match the same name as the material asset, so if we're not trying to force the diffuse suffix
|
||||
//we'll give it a generic one
|
||||
if(%materialAsset.assetName $= %assetItem.assetName)
|
||||
{
|
||||
%assetItem.AssetName = %assetItem.AssetName @ "_image";
|
||||
}
|
||||
}
|
||||
|
||||
%assetItem.processed = true;
|
||||
}
|
||||
}
|
||||
|
||||
function AssetBrowser::importImageAsset(%this, %assetItem)
|
||||
{
|
||||
%moduleName = ImportAssetModuleList.getText();
|
||||
|
||||
%assetType = %assetItem.AssetType;
|
||||
%filePath = %assetItem.filePath;
|
||||
%assetName = %assetItem.assetName;
|
||||
%assetImportSuccessful = false;
|
||||
%assetId = %moduleName@":"@%assetName;
|
||||
|
||||
%assetPath = "data/" @ %moduleName @ "/Images";
|
||||
%assetFullPath = %assetPath @ "/" @ fileName(%filePath);
|
||||
|
||||
%newAsset = new ImageAsset()
|
||||
{
|
||||
assetName = %assetName;
|
||||
versionId = 1;
|
||||
imageFile = fileName(%filePath);
|
||||
originalFilePath = %filePath;
|
||||
};
|
||||
|
||||
%assetImportSuccessful = TAMLWrite(%newAsset, %assetPath @ "/" @ %assetName @ ".asset.taml");
|
||||
|
||||
//and copy the file into the relevent directory
|
||||
%doOverwrite = !AssetBrowser.isAssetReImport;
|
||||
if(!pathCopy(%filePath, %assetFullPath, %doOverwrite))
|
||||
{
|
||||
error("Unable to import asset: " @ %filePath);
|
||||
return;
|
||||
}
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName,1);
|
||||
|
||||
if(!AssetBrowser.isAssetReImport)
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %assetPath @ "/" @ %assetName @ ".asset.taml");
|
||||
else
|
||||
AssetDatabase.refreshAsset(%assetId);
|
||||
}
|
||||
|
||||
function AssetBrowser::buildImageAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.scriptFile;
|
||||
//%previewData.doubleClickCommand = "EditorOpenFileInTorsion( "@%previewData.assetPath@", 0 );";
|
||||
|
||||
if(isFile(%assetDef.imageFile))
|
||||
%previewData.previewImage = %assetDef.imageFile;
|
||||
else
|
||||
%previewData.previewImage = "core/rendering/images/unavailable";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.assetName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.friendlyName @ "\n" @ %assetDef;
|
||||
}
|
||||
|
||||
function GuiInspectorTypeImageAssetPtr::onControlDropped( %this, %payload, %position )
|
||||
{
|
||||
Canvas.popDialog(EditorDragAndDropLayer);
|
||||
|
||||
// Make sure this is a color swatch drag operation.
|
||||
if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) )
|
||||
return;
|
||||
|
||||
%assetType = %payload.dragSourceControl.parentGroup.assetType;
|
||||
|
||||
if(%assetType $= "ImageAsset")
|
||||
{
|
||||
echo("DROPPED A IMAGE ON AN IMAGE ASSET COMPONENT FIELD!");
|
||||
}
|
||||
|
||||
EWorldEditor.isDirty = true;
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
function AssetBrowser::createLevelAsset(%this)
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/levels/" @ %assetName @ ".asset.taml";
|
||||
%levelPath = %modulePath @ "/levels/" @ %assetName @ ".mis";
|
||||
|
||||
%asset = new LevelAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
LevelFile = %assetName @ ".mis";
|
||||
LevelName = AssetBrowser.newAssetSettings.levelName;
|
||||
AssetDescription = AssetBrowser.newAssetSettings.description;
|
||||
PreviewImage = AssetBrowser.newAssetSettings.levelPreviewImage;
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
if(!pathCopy("tools/levels/BlankRoom.mis", %levelPath, false))
|
||||
{
|
||||
echo("Unable to copy template level file!");
|
||||
}
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "Levels");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function AssetBrowser::editLevelAsset(%this, %assetDef)
|
||||
{
|
||||
schedule( 1, 0, "EditorOpenMission", %assetDef);
|
||||
}
|
||||
|
||||
function AssetBrowser::buildLevelAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.levelFile;
|
||||
%previewData.doubleClickCommand = "schedule( 1, 0, \"EditorOpenMission\", "@%assetDef@");";
|
||||
|
||||
%levelPreviewImage = %assetDesc.PreviewImage;
|
||||
|
||||
if(isFile(%levelPreviewImage))
|
||||
%previewData.previewImage = %levelPreviewImage;
|
||||
else
|
||||
%previewData.previewImage = "tools/assetBrowser/art/levelIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.assetName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.assetName;
|
||||
}
|
||||
|
|
@ -0,0 +1,468 @@
|
|||
function AssetBrowser::createMaterialAsset(%this)
|
||||
{
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%tamlpath = %modulePath @ "/materials/" @ %assetName @ ".asset.taml";
|
||||
%sgfPath = %modulePath @ "/materials/" @ %assetName @ ".sgf";
|
||||
|
||||
%asset = new MaterialAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
shaderData = "";
|
||||
shaderGraph = %sgfPath;
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "Materials");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function AssetBrowser::editMaterialAsset(%this, %assetDef)
|
||||
{
|
||||
//if(EditorSettings.materialEditMode $= "MaterialEditor")
|
||||
//{
|
||||
%assetDef.materialDefinitionName.reload();
|
||||
|
||||
EditorGui.setEditor(MaterialEditorPlugin);
|
||||
|
||||
MaterialEditorGui.currentMaterial = %assetDef.materialDefinitionName;
|
||||
MaterialEditorGui.setActiveMaterial( %assetDef.materialDefinitionName );
|
||||
|
||||
AssetBrowser.hideDialog();
|
||||
/*}
|
||||
else
|
||||
{
|
||||
Canvas.pushDialog(ShaderEditor);
|
||||
ShaderEditorGraph.loadGraph(%assetDef.shaderGraph);
|
||||
$ShaderGen::targetShaderFile = filePath(%assetDef.shaderGraph) @"/"@fileBase(%assetDef.shaderGraph);
|
||||
//} */
|
||||
}
|
||||
|
||||
function AssetBrowser::prepareImportMaterialAsset(%this, %assetItem)
|
||||
{
|
||||
//Iterate over to find appropriate images for
|
||||
|
||||
//Fetch just the fileBase name
|
||||
%fileDir = filePath(%assetItem.filePath);
|
||||
%fileName = fileBase(%assetItem.filePath);
|
||||
%fileExt = fileExt(%assetItem.filePath);
|
||||
|
||||
//Check if we need to filter this material out or not
|
||||
if(ImportAssetWindow.activeImportConfig.IgnoreMaterials !$= "")
|
||||
{
|
||||
%ignoredMatNamesCount = getTokenCount(ImportAssetWindow.activeImportConfig.IgnoreMaterials, ",;");
|
||||
for(%i=0; %i < %ignoredMatNamesCount; %i++)
|
||||
{
|
||||
%ignoreName = getToken(ImportAssetWindow.activeImportConfig.IgnoreMaterials, ".;", %i);
|
||||
|
||||
if(strIsMatchExpr(%ignoreName, %fileName))
|
||||
{
|
||||
//We fit the bill, ignore this material and skip it
|
||||
%assetItem.skip = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(ImportAssetWindow.activeImportConfig.PopulateMaterialMaps == 1)
|
||||
{
|
||||
%materialItemId = ImportAssetTree.findItemByObjectId(%assetItem);
|
||||
|
||||
if(%assetItem.diffuseImageAsset $= "")
|
||||
{
|
||||
//First, load our diffuse map, as set to the material in the shape
|
||||
//We're going to presume(for now) that the specifically-mentioned file for a given material is the diffuse/albedo
|
||||
%diffuseImagePath = %fileDir @ "/" @ %filename @ %fileExt;
|
||||
|
||||
%diffuseImageSuffix = ImportAssetWindow.parseImagePathSuffixes(%diffuseImagePath);
|
||||
|
||||
|
||||
|
||||
if(ImportAssetWindow.activeImportConfig.UseDiffuseSuffixOnOriginImg == 1 && %diffuseImageSuffix $= "")
|
||||
{
|
||||
%diffuseToken = getToken(ImportAssetWindow.activeImportConfig.DiffuseTypeSuffixes, ",;", 0);
|
||||
|
||||
%diffuseAsset = AssetBrowser.addImportingAsset("Image", %diffuseImagePath, %materialItemId, %filename @ %diffuseToken);
|
||||
}
|
||||
else
|
||||
{
|
||||
%diffuseAsset = AssetBrowser.addImportingAsset("Image", %diffuseImagePath, %materialItemId);
|
||||
}
|
||||
|
||||
%assetItem.diffuseImageAsset = %diffuseAsset;
|
||||
}
|
||||
|
||||
//Now, iterate over our comma-delimited suffixes to see if we have any matches. We'll use the first match in each case, if any.
|
||||
if(%assetItem.normalImageAsset $= "")
|
||||
{
|
||||
//First, normal map
|
||||
%targetFilePath = %this.findMaterialMapFileWSuffix(%fileDir, %fileName, %fileExt, ImportAssetWindow.activeImportConfig.NormalTypeSuffixes);
|
||||
|
||||
if(%targetFilePath $= "")
|
||||
{
|
||||
//Didn't find it for the presumed file path, so lets angle it from the diffuse map's texture name, if it has one
|
||||
if(isObject(%assetItem.diffuseImageAsset))
|
||||
{
|
||||
if(isFile(%assetItem.diffuseImageAsset.filePath))
|
||||
{
|
||||
%diffFileDir = filePath(%assetItem.diffuseImageAsset.filePath);
|
||||
%diffFileName = fileBase(%assetItem.diffuseImageAsset.filePath);
|
||||
%diffFileExt = fileExt(%assetItem.diffuseImageAsset.filePath);
|
||||
|
||||
%suffixCount = getTokenCount(ImportAssetWindow.activeImportConfig.DiffuseTypeSuffixes, ",;");
|
||||
for(%sfx = 0; %sfx < %suffixCount; %sfx++)
|
||||
{
|
||||
%suffixToken = getToken(ImportAssetWindow.activeImportConfig.DiffuseTypeSuffixes, ",;", %sfx);
|
||||
if(strIsMatchExpr("*"@%suffixToken, %diffFileName))
|
||||
{
|
||||
%diffFileName = strreplace(%diffFileName, %suffixToken, "");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
%targetFilePath = %this.findMaterialMapFileWSuffix(%diffFileDir, %diffFileName, %diffFileExt, ImportAssetWindow.activeImportConfig.NormalTypeSuffixes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(%targetFilePath !$= "")
|
||||
{
|
||||
%normalAsset = AssetBrowser.addImportingAsset("Image", %targetFilePath, %materialItemId);
|
||||
%assetItem.normalImageAsset = %normalAsset;
|
||||
}
|
||||
}
|
||||
if(%assetItem.specularImageAsset $= "")
|
||||
{
|
||||
//Specular
|
||||
%listCount = getTokenCount(ImportAssetWindow.activeImportConfig.SpecularTypeSuffixes, ",;");
|
||||
|
||||
%foundFile = 0;
|
||||
for(%i=0; %i < %listCount; %i++)
|
||||
{
|
||||
%entryText = getToken(ImportAssetWindow.activeImportConfig.SpecularTypeSuffixes, ",;", %i);
|
||||
|
||||
%targetFilePath = %fileDir @ "/" @ %filename @ %entryText @ %fileExt;
|
||||
%foundFile = isFile(%targetFilePath);
|
||||
|
||||
if(%foundFile)
|
||||
{
|
||||
%specularAsset = AssetBrowser.addImportingAsset("Image", %targetFilePath, %materialItemId);
|
||||
%assetItem.specularImageAsset = %specularAsset;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(%assetItem.metalImageAsset $= "")
|
||||
{
|
||||
//Metal
|
||||
%listCount = getTokenCount(ImportAssetWindow.activeImportConfig.MetalnessTypeSuffixes, ",;");
|
||||
|
||||
%foundFile = 0;
|
||||
for(%i=0; %i < %listCount; %i++)
|
||||
{
|
||||
%entryText = getToken(ImportAssetWindow.activeImportConfig.MetalnessTypeSuffixes, ",;", %i);
|
||||
|
||||
%targetFilePath = %fileDir @ "/" @ %filename @ %entryText @ %fileExt;
|
||||
%foundFile = isFile(%targetFilePath);
|
||||
|
||||
if(%foundFile)
|
||||
{
|
||||
%metalAsset = AssetBrowser.addImportingAsset("Image", %targetFilePath, %materialItemId);
|
||||
%assetItem.metalImageAsset = %metalAsset;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(%assetItem.roughnessImageAsset $= "")
|
||||
{
|
||||
//Roughness
|
||||
%listCount = getTokenCount(ImportAssetWindow.activeImportConfig.RoughnessTypeSuffixes, ",;");
|
||||
|
||||
%foundFile = 0;
|
||||
for(%i=0; %i < %listCount; %i++)
|
||||
{
|
||||
%entryText = getToken(ImportAssetWindow.activeImportConfig.RoughnessTypeSuffixes, ",;", %i);
|
||||
|
||||
%targetFilePath = %fileDir @ "/" @ %filename @ %entryText @ %fileExt;
|
||||
%foundFile = isFile(%targetFilePath);
|
||||
|
||||
if(%foundFile)
|
||||
{
|
||||
%roughnessAsset = AssetBrowser.addImportingAsset("Image", %targetFilePath, %materialItemId);
|
||||
%assetItem.roughnessImageAsset = %roughnessAsset;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(%assetItem.smoothnessImageAsset $= "")
|
||||
{
|
||||
//Smoothness
|
||||
%listCount = getTokenCount(ImportAssetWindow.activeImportConfig.SmoothnessTypeSuffixes, ",;");
|
||||
|
||||
%foundFile = 0;
|
||||
for(%i=0; %i < %listCount; %i++)
|
||||
{
|
||||
%entryText = getToken(ImportAssetWindow.activeImportConfig.SmoothnessTypeSuffixes, ",;", %i);
|
||||
|
||||
%targetFilePath = %fileDir @ "/" @ %filename @ %entryText @ %fileExt;
|
||||
%foundFile = isFile(%targetFilePath);
|
||||
|
||||
if(%foundFile)
|
||||
{
|
||||
%smoothnessAsset = AssetBrowser.addImportingAsset("Image", %targetFilePath, %materialItemId);
|
||||
%assetItem.SmoothnessImageAsset = %smoothnessAsset;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(%assetItem.AOImageAsset $= "")
|
||||
{
|
||||
//AO
|
||||
%listCount = getTokenCount(ImportAssetWindow.activeImportConfig.AOTypeSuffixes, ",;");
|
||||
|
||||
%foundFile = 0;
|
||||
for(%i=0; %i < %listCount; %i++)
|
||||
{
|
||||
%entryText = getToken(ImportAssetWindow.activeImportConfig.AOTypeSuffixes, ",;", %i);
|
||||
|
||||
%targetFilePath = %fileDir @ "/" @ %filename @ %entryText @ %fileExt;
|
||||
%foundFile = isFile(%targetFilePath);
|
||||
|
||||
if(%foundFile)
|
||||
{
|
||||
%AOAsset = AssetBrowser.addImportingAsset("Image", %targetFilePath, %materialItemId);
|
||||
%assetItem.AOImageAsset = %AOAsset;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(%assetItem.compositeImageAsset $= "")
|
||||
{
|
||||
//Composite
|
||||
%listCount = getTokenCount(ImportAssetWindow.activeImportConfig.CompositeTypeSuffixes, ",;");
|
||||
|
||||
%foundFile = 0;
|
||||
for(%i=0; %i < %listCount; %i++)
|
||||
{
|
||||
%entryText = getToken(ImportAssetWindow.activeImportConfig.CompositeTypeSuffixes, ",;", %i);
|
||||
|
||||
%targetFilePath = %fileDir @ "/" @ %filename @ %entryText @ %fileExt;
|
||||
%foundFile = isFile(%targetFilePath);
|
||||
|
||||
if(%foundFile)
|
||||
{
|
||||
%compositeAsset = AssetBrowser.addImportingAsset("Image", %targetFilePath, %materialItemId);
|
||||
%assetItem.compositeImageAsset = %compositeAsset;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function AssetBrowser::findMaterialMapFileWSuffix(%this, %fileDir, %filename, %fileExt, %suffixList)
|
||||
{
|
||||
//Now, iterate over our comma-delimited suffixes to see if we have any matches. We'll use the first match in each case, if any.
|
||||
//First, normal map
|
||||
%listCount = getTokenCount(%suffixList, ",;");
|
||||
|
||||
%foundFile = 0;
|
||||
for(%i=0; %i < %listCount; %i++)
|
||||
{
|
||||
%entryText = getToken(%suffixList, ",;", %i);
|
||||
|
||||
%targetFilePath = %fileDir @ "/" @ %filename @ %entryText @ %fileExt;
|
||||
%foundFile = isFile(%targetFilePath);
|
||||
|
||||
if(%foundFile)
|
||||
{
|
||||
return %targetFilePath;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
function AssetBrowser::importMaterialAsset(%this, %assetItem)
|
||||
{
|
||||
%moduleName = ImportAssetModuleList.getText();
|
||||
|
||||
%assetType = %assetItem.AssetType;
|
||||
%filePath = %assetItem.filePath;
|
||||
%assetName = %assetItem.assetName;
|
||||
%assetImportSuccessful = false;
|
||||
%assetId = %moduleName@":"@%assetName;
|
||||
|
||||
%assetPath = "data/" @ %moduleName @ "/materials";
|
||||
%tamlpath = %assetPath @ "/" @ %assetName @ ".asset.taml";
|
||||
%sgfPath = %assetPath @ "/" @ %assetName @ ".sgf";
|
||||
%scriptPath = %assetPath @ "/" @ %assetName @ ".cs";
|
||||
|
||||
%newAsset = new MaterialAsset()
|
||||
{
|
||||
assetName = %assetName;
|
||||
versionId = 1;
|
||||
shaderGraph = %sgfPath;
|
||||
scriptFile = %scriptPath;
|
||||
originalFilePath = %filePath;
|
||||
materialDefinitionName = %assetName;
|
||||
};
|
||||
|
||||
//check dependencies
|
||||
%importItem = ImportAssetTree.findItemByObjectId(%assetItem);
|
||||
if(ImportAssetTree.isParentItem(%importItem))
|
||||
{
|
||||
%imageSlot = 0;
|
||||
%childId = ImportAssetTree.getChild(%importItem);
|
||||
while(%childId > 0)
|
||||
{
|
||||
%dependencyAssetItem = ImportAssetTree.getItemObject(%childId);
|
||||
|
||||
%depAssetType = %dependencyAssetItem.assetType;
|
||||
if(%depAssetType $= "Image")
|
||||
{
|
||||
%matSet = "%newAsset.imageMap"@%imageSlot@"=\"@Asset="@%moduleName@":"@%dependencyAssetItem.assetName@"\";";
|
||||
eval(%matSet);
|
||||
}
|
||||
|
||||
%childId = ImportAssetTree.getNextSibling(%childId);
|
||||
%imageSlot++;
|
||||
}
|
||||
}
|
||||
|
||||
%assetImportSuccessful = TamlWrite(%newAsset, %tamlpath);
|
||||
|
||||
%file = new FileObject();
|
||||
|
||||
if(%file.openForWrite(%scriptPath))
|
||||
{
|
||||
%file.writeline("//--- OBJECT WRITE BEGIN ---");
|
||||
%file.writeline("singleton Material(" @ %assetName @ ") {");
|
||||
|
||||
//TODO: pass along the shape's target material for this just to be sure
|
||||
%file.writeLine(" mapTo = \"" @ %assetName @ "\";");
|
||||
|
||||
if(%assetItem.diffuseImageAsset !$= "")
|
||||
{
|
||||
%diffuseAssetPath = "data/" @ %moduleName @ "/Images/" @ fileName(%assetItem.diffuseImageAsset.filePath);
|
||||
%file.writeline(" DiffuseMap[0] = \"" @ %diffuseAssetPath @"\";");
|
||||
%file.writeline(" DiffuseMapAsset[0] = \"" @ %moduleName @ ":" @ %assetItem.diffuseImageAsset.assetName @"\";");
|
||||
}
|
||||
if(%assetItem.normalImageAsset)
|
||||
{
|
||||
%normalAssetPath = "data/" @ %moduleName @ "/Images/" @ fileName(%assetItem.normalImageAsset.filePath);
|
||||
%file.writeline(" NormalMap[0] = \"" @ %normalAssetPath @"\";");
|
||||
%file.writeline(" NormalMapAsset[0] = \"" @ %moduleName @ ":" @ %assetItem.normalImageAsset.assetName @"\";");
|
||||
}
|
||||
/*if(%assetItem.specularImageAsset)
|
||||
{
|
||||
%file.writeline(" SpecularMap[0] = \"" @ %assetItem.specularImageAsset.filePath @"\";");
|
||||
%file.writeline(" SpecularMapAsset[0] = \"" @ %moduleName @ ":" @ %assetItem.specularImageAsset.assetName @"\";");
|
||||
}*/
|
||||
if(%assetItem.roughnessImageAsset)
|
||||
{
|
||||
%file.writeline(" RoughMap[0] = \"" @ %assetItem.roughnessImageAsset.filePath @"\";");
|
||||
%file.writeline(" RoughMapAsset[0] = \"" @ %moduleName @ ":" @ %assetItem.roughnessImageAsset.assetName @"\";");
|
||||
}
|
||||
if(%assetItem.smoothnessImageAsset)
|
||||
{
|
||||
%file.writeline(" SmoothnessMap[0] = \"" @ %assetItem.smoothnessImageAsset.filePath @"\";");
|
||||
%file.writeline(" SmoothnessMapAsset[0] = \"" @ %moduleName @ ":" @ %assetItem.smoothnessImageAsset.assetName @"\";");
|
||||
}
|
||||
if(%assetItem.metalnessImageAsset)
|
||||
{
|
||||
%file.writeline(" MetalMap[0] = \"" @ %assetItem.metalnessImageAsset.filePath @"\";");
|
||||
%file.writeline(" MetalMapAsset[0] = \"" @ %moduleName @ ":" @ %assetItem.metalnessImageAsset.assetName @"\";");
|
||||
}
|
||||
if(%assetItem.AOImageAsset)
|
||||
{
|
||||
%file.writeline(" AOMap[0] = \"" @ %assetItem.AOImageAsset.filePath @"\";");
|
||||
%file.writeline(" AOMapAsset[0] = \"" @ %moduleName @ ":" @ %assetItem.AOImageAsset.assetName @"\";");
|
||||
}
|
||||
if(%assetItem.compositeImageAsset)
|
||||
{
|
||||
%file.writeline(" CompositeMap[0] = \"" @ %assetItem.compositeImageAsset.filePath @"\";");
|
||||
%file.writeline(" CompositeMapAsset[0] = \"" @ %moduleName @ ":" @ %assetItem.compositeImageAsset.assetName @"\";");
|
||||
}
|
||||
%file.writeline("};");
|
||||
%file.writeline("//--- OBJECT WRITE END ---");
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName,1);
|
||||
|
||||
if(!AssetBrowser.isAssetReImport)
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %assetPath @ "/" @ %assetName @ ".asset.taml");
|
||||
else
|
||||
AssetDatabase.refreshAsset(%assetId);
|
||||
}
|
||||
|
||||
function AssetBrowser::buildMaterialAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.materialDefinitionName;
|
||||
%previewData.assetPath = %assetDef.scriptFile;
|
||||
|
||||
//Lotta prepwork
|
||||
%previewData.doubleClickCommand = %assetDef@".materialDefinitionName.reload(); "
|
||||
@ "$Tools::materialEditorList = \"\";"
|
||||
@ "EWorldEditor.clearSelection();"
|
||||
@ "MaterialEditorGui.currentObject = 0;"
|
||||
@ "MaterialEditorGui.currentMode = \"asset\";"
|
||||
@ "MaterialEditorGui.currentMaterial = "@%assetDef@".materialDefinitionName;"
|
||||
@ "MaterialEditorGui.setActiveMaterial( "@%assetDef@".materialDefinitionName );"
|
||||
@ "EditorGui.setEditor(MaterialEditorPlugin); "
|
||||
@ "AssetBrowser.hideDialog();";
|
||||
|
||||
if(isFile(%assetDef.materialDefinitionName.diffuseMap[0]))
|
||||
%previewData.previewImage = %assetDef.materialDefinitionName.diffuseMap[0];
|
||||
else
|
||||
%previewData.previewImage = "tools/assetBrowser/art/materialIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.assetName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.friendlyName @ "\n" @ %assetDef;
|
||||
}
|
||||
|
||||
function GuiInspectorTypeMaterialAssetPtr::onControlDropped( %this, %payload, %position )
|
||||
{
|
||||
Canvas.popDialog(EditorDragAndDropLayer);
|
||||
|
||||
// Make sure this is a color swatch drag operation.
|
||||
if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) )
|
||||
return;
|
||||
|
||||
%assetType = %payload.dragSourceControl.parentGroup.assetType;
|
||||
%module = %payload.dragSourceControl.parentGroup.moduleName;
|
||||
%assetName = %payload.dragSourceControl.parentGroup.assetName;
|
||||
|
||||
if(%assetType $= "MaterialAsset")
|
||||
{
|
||||
echo("DROPPED A MATERIAL ON A MATERIAL ASSET COMPONENT FIELD!");
|
||||
//%assetDef = AssetDatabase.acquireAsset(%module @ ":" @ %assetName);
|
||||
|
||||
%this.setMaterialAsset(%module @ ":" @ %assetName);
|
||||
}
|
||||
|
||||
EWorldEditor.isDirty = true;
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
function AssetBrowser::createPostEffectAsset(%this)
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/postFXs/" @ %assetName @ ".asset.taml";
|
||||
%scriptPath = %modulePath @ "/postFXs/" @ %assetName @ ".cs";
|
||||
|
||||
%asset = new PostEffectAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
scriptFile = %assetName @ ".cs";
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "PostEffectAsset");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
%file = new FileObject();
|
||||
|
||||
if(%file.openForWrite(%scriptPath))
|
||||
{
|
||||
%file.close();
|
||||
}
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function AssetBrowser::buildPostEffectAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.scriptFilePath;
|
||||
%previewData.doubleClickCommand = "";
|
||||
|
||||
%previewData.previewImage = "tools/assetBrowser/art/postEffectIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.assetName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.assetName;
|
||||
}
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
function AssetBrowser::createScriptAsset(%this)
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/scripts/" @ %assetName @ ".asset.taml";
|
||||
%scriptPath = %modulePath @ "/scripts/" @ %assetName @ ".cs";
|
||||
|
||||
%asset = new ScriptAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
scriptFile = %assetName @ ".cs";
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "ScriptAsset");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
%file = new FileObject();
|
||||
|
||||
if(%file.openForWrite(%scriptPath))
|
||||
{
|
||||
%file.close();
|
||||
}
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function AssetBrowser::editScriptAsset(%this, %assetDef)
|
||||
{
|
||||
%scriptFile = %assetDef.scriptFile;
|
||||
|
||||
EditorOpenFileInTorsion(makeFullPath(%scriptFile), 0);
|
||||
}
|
||||
|
||||
function AssetBrowser::duplicateScriptAsset(%this, %assetDef, %targetModule)
|
||||
{
|
||||
}
|
||||
|
||||
function AssetBrowser::importScriptAsset(%this, %assetId)
|
||||
{
|
||||
}
|
||||
|
||||
function AssetBrowser::dragAndDropScriptAsset(%this, %assetDef, %dropTarget)
|
||||
{
|
||||
if(!isObject(%dropTarget))
|
||||
return;
|
||||
}
|
||||
|
||||
function AssetBrowser::renameScriptAsset(%this, %assetDef, %originalName, %newName)
|
||||
{
|
||||
}
|
||||
|
||||
function AssetBrowser::deleteScriptAsset(%this, %assetDef)
|
||||
{
|
||||
}
|
||||
|
||||
function AssetBrowser::buildScriptAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.scriptFile;
|
||||
%previewData.doubleClickCommand = "EditorOpenFileInTorsion( \""@%previewData.assetPath@"\", 0 );";
|
||||
|
||||
if(%assetDef.isServerSide)
|
||||
%previewData.previewImage = "tools/assetBrowser/art/serverScriptIcon";
|
||||
else
|
||||
%previewData.previewImage = "tools/assetBrowser/art/clientScriptIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.assetName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.assetName;
|
||||
}
|
||||
|
||||
function GuiInspectorTypeScriptAssetPtr::onClick( %this, %fieldName )
|
||||
{
|
||||
//Get our data
|
||||
%obj = %this.getInspector().getInspectObject(0);
|
||||
}
|
||||
|
|
@ -0,0 +1,266 @@
|
|||
function AssetBrowser::createShapeAsset(%this)
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/shapes/" @ %assetName @ ".asset.taml";
|
||||
%shapeFilePath = %modulePath @ "/shapes/" @ %assetName @ ".dae";
|
||||
|
||||
%asset = new ShapeAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
friendlyName = AssetBrowser.newAssetSettings.friendlyName;
|
||||
description = AssetBrowser.newAssetSettings.description;
|
||||
fileName = %assetName @ ".dae";
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
Canvas.popDialog(AssetBrowser_newComponentAsset);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "ShapeAsset");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function AssetBrowser::editShapeAsset(%this, %assetDef)
|
||||
{
|
||||
%this.hideDialog();
|
||||
ShapeEditorPlugin.openShapeAsset(%assetDef);
|
||||
}
|
||||
|
||||
function AssetBrowser::prepareImportShapeAsset(%this, %assetItem)
|
||||
{
|
||||
%fileExt = fileExt(%assetItem.filePath);
|
||||
if(%fileExt $= ".dae")
|
||||
{
|
||||
%shapeInfo = new GuiTreeViewCtrl();
|
||||
enumColladaForImport(%assetItem.filePath, %shapeInfo, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
%shapeInfo = GetShapeInfo(%assetItem.filePath);
|
||||
}
|
||||
|
||||
%assetItem.shapeInfo = %shapeInfo;
|
||||
|
||||
%shapeItem = %assetItem.shapeInfo.findItemByName("Shape");
|
||||
%shapeCount = %assetItem.shapeInfo.getItemValue(%shapeItem);
|
||||
|
||||
%shapeId = ImportAssetTree.findItemByObjectId(%assetItem);
|
||||
|
||||
if(ImportAssetWindow.activeImportConfig.ImportMesh == 1 && %shapeCount > 0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
%animItem = %assetItem.shapeInfo.findItemByName("Animations");
|
||||
%animCount = %assetItem.shapeInfo.getItemValue(%animItem);
|
||||
|
||||
if(ImportAssetWindow.activeImportConfig.ImportAnimations == 1 && %animCount > 0)
|
||||
{
|
||||
/*%animationItem = %assetItem.shapeInfo.getChild(%animItem);
|
||||
|
||||
%animName = %assetItem.shapeInfo.getItemText(%animationItem);
|
||||
|
||||
AssetBrowser.addImportingAsset("Animation", %animName, %shapeId);
|
||||
|
||||
%animationItem = %assetItem.shapeInfo.getNextSibling(%animationItem);
|
||||
while(%animationItem != 0)
|
||||
{
|
||||
%animName = %assetItem.shapeInfo.getItemText(%animationItem);
|
||||
//%animName = %assetItem.shapeInfo.getItemValue(%animationItem);
|
||||
|
||||
AssetBrowser.addImportingAsset("Animation", %animName, %shapeId);
|
||||
|
||||
%animationItem = %shapeInfo.getNextSibling(%animationItem);
|
||||
}*/
|
||||
}
|
||||
|
||||
%matItem = %assetItem.shapeInfo.findItemByName("Materials");
|
||||
%matCount = %assetItem.shapeInfo.getItemValue(%matItem);
|
||||
|
||||
if(ImportAssetWindow.activeImportConfig.importMaterials == 1 && %matCount > 0)
|
||||
{
|
||||
|
||||
|
||||
%materialItem = %assetItem.shapeInfo.getChild(%matItem);
|
||||
|
||||
%matName = %assetItem.shapeInfo.getItemText(%materialItem);
|
||||
|
||||
%filePath = %assetItem.shapeInfo.getItemValue(%materialItem);
|
||||
if(%filePath !$= "")
|
||||
{
|
||||
AssetBrowser.addImportingAsset("Material", %filePath, %shapeId);
|
||||
}
|
||||
else
|
||||
{
|
||||
//we need to try and find our material, since the shapeInfo wasn't able to find it automatically
|
||||
%filePath = findImageFile(filePath(%assetItem.filePath), %matName);
|
||||
if(%filePath !$= "")
|
||||
AssetBrowser.addImportingAsset("Material", %filePath, %shapeId);
|
||||
else
|
||||
AssetBrowser.addImportingAsset("Material", %matName, %shapeId);
|
||||
}
|
||||
|
||||
%materialItem = %assetItem.shapeInfo.getNextSibling(%materialItem);
|
||||
while(%materialItem != 0)
|
||||
{
|
||||
%matName = %assetItem.shapeInfo.getItemText(%materialItem);
|
||||
%filePath = %assetItem.shapeInfo.getItemValue(%materialItem);
|
||||
if(%filePath !$= "")
|
||||
{
|
||||
AssetBrowser.addImportingAsset("Material", %filePath, %shapeId);
|
||||
}
|
||||
else
|
||||
{
|
||||
//we need to try and find our material, since the shapeInfo wasn't able to find it automatically
|
||||
%filePath = findImageFile(filePath(%assetItem.filePath), %matName);
|
||||
if(%filePath !$= "")
|
||||
AssetBrowser.addImportingAsset("Material", %filePath, %shapeId);
|
||||
else
|
||||
AssetBrowser.addImportingAsset("Material", %matName, %shapeId);
|
||||
}
|
||||
|
||||
%materialItem = %shapeInfo.getNextSibling(%materialItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function AssetBrowser::importShapeAsset(%this, %assetItem)
|
||||
{
|
||||
%moduleName = ImportAssetModuleList.getText();
|
||||
|
||||
%assetType = %assetItem.AssetType;
|
||||
%filePath = %assetItem.filePath;
|
||||
%assetName = %assetItem.assetName;
|
||||
%assetImportSuccessful = false;
|
||||
%assetId = %moduleName@":"@%assetName;
|
||||
|
||||
%assetPath = "data/" @ %moduleName @ "/Shapes";
|
||||
%assetFullPath = %assetPath @ "/" @ fileName(%filePath);
|
||||
|
||||
%newAsset = new ShapeAsset()
|
||||
{
|
||||
assetName = %assetName;
|
||||
versionId = 1;
|
||||
fileName = fileName(%filePath);
|
||||
originalFilePath = %filePath;
|
||||
isNewShape = true;
|
||||
};
|
||||
|
||||
//check dependencies
|
||||
%importItem = ImportAssetTree.findItemByObjectId(%assetItem);
|
||||
if(ImportAssetTree.isParentItem(%importItem))
|
||||
{
|
||||
%matSlotId = 0;
|
||||
%childId = ImportAssetTree.getChild(%importItem);
|
||||
while(%childId > 0)
|
||||
{
|
||||
%dependencyAssetItem = ImportAssetTree.getItemObject(%childId);
|
||||
|
||||
%depAssetType = %dependencyAssetItem.assetType;
|
||||
if(%depAssetType $= "Material")
|
||||
{
|
||||
%matSet = "%newAsset.materialSlot"@%matSlotId@"=\"@Asset="@%moduleName@":"@%dependencyAssetItem.assetName@"\";";
|
||||
eval(%matSet);
|
||||
}
|
||||
if(%depAssetType $= "Animation")
|
||||
{
|
||||
%matSet = "%newAsset.animationSequence"@%matSlotId@"=\"@Asset="@%moduleName@":"@%dependencyAssetItem.assetName@"\";";
|
||||
eval(%matSet);
|
||||
}
|
||||
|
||||
%childId = ImportAssetTree.getNextSibling(%childId);
|
||||
%matSlotId++;
|
||||
}
|
||||
}
|
||||
|
||||
%assetImportSuccessful = TAMLWrite(%newAsset, %assetPath @ "/" @ %assetName @ ".asset.taml");
|
||||
|
||||
//and copy the file into the relevent directory
|
||||
%doOverwrite = !AssetBrowser.isAssetReImport;
|
||||
if(!pathCopy(%filePath, %assetFullPath, %doOverwrite))
|
||||
{
|
||||
error("Unable to import asset: " @ %filePath);
|
||||
}
|
||||
|
||||
%constructor = ShapeEditor.findConstructor( %assetFullPath );
|
||||
|
||||
if(!isObject(%constructor))
|
||||
%constructor = ShapeEditor.createConstructor(%assetFullPath);
|
||||
|
||||
//We'll update any relevent bits to the ShapeConstructor here
|
||||
$TSShapeConstructor::neverImportMat = "";
|
||||
|
||||
if(ImportAssetWindow.activeImportConfig.IgnoreMaterials !$= "")
|
||||
{
|
||||
%ignoredMatNamesCount = getTokenCount(ImportAssetWindow.activeImportConfig.IgnoreMaterials, ",;");
|
||||
for(%i=0; %i < %ignoredMatNamesCount; %i++)
|
||||
{
|
||||
if(%i==0)
|
||||
$TSShapeConstructor::neverImportMat = getToken(ImportAssetWindow.activeImportConfig.IgnoreMaterials, ",;", %i);
|
||||
else
|
||||
$TSShapeConstructor::neverImportMat = $TSShapeConstructor::neverImportMat TAB getToken(ImportAssetWindow.activeImportConfig.IgnoreMaterials, ",;", %i);
|
||||
}
|
||||
}
|
||||
|
||||
%constructor.neverImportMat = $TSShapeConstructor::neverImportMat;
|
||||
ShapeEditor.saveConstructor( %constructor );
|
||||
|
||||
//now, force-load the file if it's collada
|
||||
%fileExt = fileExt(%assetFullPath);
|
||||
if(isSupportedFormat(getSubStr(%fileExt,1)))
|
||||
{
|
||||
%tempShape = new TSStatic()
|
||||
{
|
||||
shapeName = %assetFullPath;
|
||||
};
|
||||
|
||||
%tempShape.delete();
|
||||
}
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName,1);
|
||||
|
||||
if(!AssetBrowser.isAssetReImport)
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %assetPath @ "/" @ %assetName @ ".asset.taml");
|
||||
else
|
||||
AssetDatabase.refreshAsset(%assetId);
|
||||
}
|
||||
|
||||
function GuiInspectorTypeShapeAssetPtr::onControlDropped( %this, %payload, %position )
|
||||
{
|
||||
Canvas.popDialog(EditorDragAndDropLayer);
|
||||
|
||||
// Make sure this is a color swatch drag operation.
|
||||
if( !%payload.parentGroup.isInNamespaceHierarchy( "AssetPreviewControlType_AssetDrop" ) )
|
||||
return;
|
||||
|
||||
%assetType = %payload.dragSourceControl.parentGroup.assetType;
|
||||
|
||||
if(%assetType $= "ShapeAsset")
|
||||
{
|
||||
echo("DROPPED A SHAPE ON A SHAPE ASSET COMPONENT FIELD!");
|
||||
|
||||
%module = %payload.dragSourceControl.parentGroup.moduleName;
|
||||
%asset = %payload.dragSourceControl.parentGroup.assetName;
|
||||
|
||||
%targetComponent = %this.ComponentOwner;
|
||||
%targetComponent.MeshAsset = %module @ ":" @ %asset;
|
||||
|
||||
//Inspector.refresh();
|
||||
}
|
||||
|
||||
EWorldEditor.isDirty= true;
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
function AssetBrowser::createShapeAnimationAsset(%this)
|
||||
{
|
||||
%dlg = new OpenFileDialog()
|
||||
{
|
||||
Filters = "Animation Files(*.dae, *.cached.dts)|*.dae;*.cached.dts";
|
||||
DefaultPath = $Pref::WorldEditor::LastPath;
|
||||
DefaultFile = "";
|
||||
ChangePath = false;
|
||||
OverwritePrompt = true;
|
||||
forceRelativePath = false;
|
||||
//MultipleFiles = true;
|
||||
};
|
||||
|
||||
%ret = %dlg.Execute();
|
||||
|
||||
if ( %ret )
|
||||
{
|
||||
$Pref::WorldEditor::LastPath = filePath( %dlg.FileName );
|
||||
%fullPath = %dlg.FileName;
|
||||
}
|
||||
|
||||
%dlg.delete();
|
||||
|
||||
if ( !%ret )
|
||||
return;
|
||||
}
|
||||
|
||||
function AssetBrowser::editShapeAnimationAsset(%this, %assetDef)
|
||||
{
|
||||
%this.hideDialog();
|
||||
ShapeEditorPlugin.openShapeAsset(%assetDef);
|
||||
}
|
||||
|
||||
function AssetBrowser::buildShapeAnimationAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.animationName;
|
||||
%previewData.assetPath = %assetDef.scriptFile;
|
||||
|
||||
//Lotta prepwork
|
||||
/*%previewData.doubleClickCommand = %assetDef@".materialDefinitionName.reload(); "
|
||||
@ "$Tools::materialEditorList = \"\";"
|
||||
@ "EWorldEditor.clearSelection();"
|
||||
@ "MaterialEditorGui.currentObject = 0;"
|
||||
@ "MaterialEditorGui.currentMode = \"asset\";"
|
||||
@ "MaterialEditorGui.currentMaterial = "@%assetDef@".materialDefinitionName;"
|
||||
@ "MaterialEditorGui.setActiveMaterial( "@%assetDef@".materialDefinitionName );"
|
||||
@ "EditorGui.setEditor(MaterialEditorPlugin); "
|
||||
@ "AssetBrowser.hideDialog();";*/
|
||||
|
||||
%previewData.previewImage = "tools/assetBrowser/art/animationIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.assetName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.friendlyName @ "\n" @ %assetDef;
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
function AssetBrowser::buildSoundAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.soundFilePath;
|
||||
//%previewData.doubleClickCommand = "EditorOpenFileInTorsion( "@%previewData.assetPath@", 0 );";
|
||||
|
||||
%previewData.previewImage = "tools/assetBrowser/art/soundIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.assetName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.assetName;
|
||||
}
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
function AssetBrowser::createStateMachineAsset(%this)
|
||||
{
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
%moduleName = AssetBrowser.selectedModule;
|
||||
|
||||
%assetQuery = new AssetQuery();
|
||||
|
||||
%matchingAssetCount = AssetDatabase.findAssetName(%assetQuery, %assetName);
|
||||
|
||||
%i=1;
|
||||
while(%matchingAssetCount > 0)
|
||||
{
|
||||
%newAssetName = %assetName @ %i;
|
||||
%i++;
|
||||
|
||||
%matchingAssetCount = AssetDatabase.findAssetName(%assetQuery, %newAssetName);
|
||||
}
|
||||
|
||||
%assetName = %newAssetName;
|
||||
|
||||
%assetQuery.delete();
|
||||
|
||||
%tamlpath = "data/" @ %moduleName @ "/stateMachines/" @ %assetName @ ".asset.taml";
|
||||
%smFilePath = "data/" @ %moduleName @ "/stateMachines/" @ %assetName @ ".xml";
|
||||
|
||||
%asset = new StateMachineAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
stateMachineFile = %assetName @ ".xml";
|
||||
};
|
||||
|
||||
%xmlDoc = new SimXMLDocument();
|
||||
%xmlDoc.saveFile(%smFilePath);
|
||||
%xmlDoc.delete();
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
//Now write our XML file
|
||||
%xmlFile = new FileObject();
|
||||
%xmlFile.openForWrite(%smFilePath);
|
||||
%xmlFile.writeLine("<StateMachine>");
|
||||
%xmlFile.writeLine("</StateMachine>");
|
||||
%xmlFile.close();
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "StateMachines");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function AssetBrowser::editStateMachineAsset(%this, %assetDef)
|
||||
{
|
||||
eval("AssetBrowser.tempAsset = new " @ %assetDef.getClassName() @ "();");
|
||||
AssetBrowser.tempAsset.assignFieldsFrom(%assetDef);
|
||||
|
||||
SMAssetEditInspector.inspect(AssetBrowser.tempAsset);
|
||||
AssetBrowser_editAsset.editedAssetId = EditAssetPopup.assetId;
|
||||
AssetBrowser_editAsset.editedAsset = AssetBrowser.tempAsset;
|
||||
|
||||
//remove some of the groups we don't need:
|
||||
for(%i=0; %i < SMAssetEditInspector.getCount(); %i++)
|
||||
{
|
||||
%caption = SMAssetEditInspector.getObject(%i).caption;
|
||||
|
||||
if(%caption $= "Ungrouped" || %caption $= "Object" || %caption $= "Editing"
|
||||
|| %caption $= "Persistence" || %caption $= "Dynamic Fields")
|
||||
{
|
||||
SMAssetEditInspector.remove(SMAssetEditInspector.getObject(%i));
|
||||
%i--;
|
||||
}
|
||||
}
|
||||
|
||||
Canvas.pushDialog(StateMachineEditor);
|
||||
StateMachineEditor.loadStateMachineAsset(EditAssetPopup.assetId);
|
||||
StateMachineEditor-->Window.text = "State Machine Editor ("@EditAssetPopup.assetId@")";
|
||||
}
|
||||
|
||||
function AssetBrowser::duplicateStateMachineAsset(%this, %assetDef)
|
||||
{
|
||||
//Check if we have a target module, if not we need to select one
|
||||
if(%targetModule $= "")
|
||||
{
|
||||
error("AssetBrowser::duplicateStateMachineAsset - No target module selected!");
|
||||
return;
|
||||
}
|
||||
|
||||
%assetId = %assetDef.getAssetId();
|
||||
%assetName = AssetDatabase.getAssetName(%assetId);
|
||||
|
||||
//First step, copy the files
|
||||
%modulePath = "data/" @ %targetModule @ "/stateMachines/";
|
||||
|
||||
if(!isDirectory(%modulePath))
|
||||
createPath(%modulePath);
|
||||
|
||||
%assetFile = AssetDatabase.getAssetFilePath(%assetId);
|
||||
%stateMachineFile = %assetDef.stateMachineFile;
|
||||
|
||||
echo("AssetBrowser::duplicateGameObjectAsset - duplicating! " @ %assetId @ " to " @ %targetModule);
|
||||
|
||||
%tamlPath = %modulePath @ fileName(%assetFile);
|
||||
|
||||
pathCopy(%assetFile, %tamlPath);
|
||||
pathCopy(%stateMachineFile, %modulePath @ fileName(%stateMachineFile));
|
||||
|
||||
echo("AssetBrowser::duplicateStateMachineAsset - duplicated!");
|
||||
|
||||
//Register the asset
|
||||
%moduleDef = ModuleDatabase.findModule(%targetModule, 1);
|
||||
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlPath);
|
||||
|
||||
//Refresh the browser
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
//Ensure our context is set
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%targetModule);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "StateMachineAsset");
|
||||
|
||||
AssetBrowserFilterTree.selectItem(%smItem);
|
||||
|
||||
//Rename it for convenience
|
||||
AssetBrowser.performRenameAsset(%assetName, "New" @ %assetName);
|
||||
|
||||
//Expand and refresh the target module
|
||||
AssetBrowserFilterTree.expandItem(%treeItemId,true);
|
||||
|
||||
AssetBrowserFilterTree.buildVisibleTree();
|
||||
}
|
||||
|
||||
function AssetBrowser::renameGameObjectAsset(%this, %assetDef, %newAssetId, %originalName, %newName)
|
||||
{
|
||||
%assetPath = AssetDatabase.getAssetFilePath(%newAssetId);
|
||||
|
||||
//rename the file to match
|
||||
%path = filePath(%assetPath);
|
||||
|
||||
%oldScriptFilePath = %assetDef.stateMachineFile;
|
||||
%scriptFilePath = filePath(%assetDef.stateMachineFile);
|
||||
%scriptExt = fileExt(%assetDef.stateMachineFile);
|
||||
|
||||
%newScriptFileName = %scriptFilePath @ "/" @ %newName @ %scriptExt;
|
||||
%newAssetFile = %path @ "/" @ %newName @ ".asset.taml";
|
||||
|
||||
%assetDef.stateMachineFile = %newScriptFileName;
|
||||
|
||||
TamlWrite(%assetDef, %newAssetFile);
|
||||
fileDelete(%assetPath);
|
||||
|
||||
pathCopy(%oldScriptFilePath, %newScriptFileName);
|
||||
fileDelete(%oldScriptFilePath);
|
||||
}
|
||||
|
||||
function AssetBrowser::buildStateMachineAssetPreview(%this, %assetDef, %previewData)
|
||||
{
|
||||
%previewData.assetName = %assetDef.assetName;
|
||||
%previewData.assetPath = %assetDef.scriptFile;
|
||||
%previewData.doubleClickCommand = "AssetBrowser.editStateMachineAsset( "@%assetDef@" );";
|
||||
|
||||
%previewData.previewImage = "tools/assetBrowser/art/stateMachineIcon";
|
||||
|
||||
%previewData.assetFriendlyName = %assetDef.friendlyName;
|
||||
%previewData.assetDesc = %assetDef.description;
|
||||
%previewData.tooltip = %assetDef.friendlyName @ "\n" @ %assetDef;
|
||||
}
|
||||
|
|
@ -8,103 +8,26 @@ function AssetBrowser_editAsset::saveAsset(%this)
|
|||
Canvas.popDialog(AssetBrowser_editAsset);
|
||||
}
|
||||
|
||||
function AssetBrowser::editAsset(%this)
|
||||
function AssetBrowser::editAsset(%this, %assetDef)
|
||||
{
|
||||
//Find out what type it is
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
//If the passed-in definition param is blank, then we're likely called via a popup
|
||||
if(%assetDef $= "")
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
|
||||
%assetType = %assetDef.getClassName();
|
||||
|
||||
if(%assetType $= "MaterialAsset")
|
||||
{
|
||||
//if(EditorSettings.materialEditMode $= "MaterialEditor")
|
||||
//{
|
||||
%assetDef.materialDefinitionName.reload();
|
||||
|
||||
EditorGui.setEditor(MaterialEditorPlugin);
|
||||
|
||||
MaterialEditorGui.currentMaterial = %assetDef.materialDefinitionName;
|
||||
MaterialEditorGui.setActiveMaterial( %assetDef.materialDefinitionName );
|
||||
|
||||
AssetBrowser.hideDialog();
|
||||
/*}
|
||||
else
|
||||
{
|
||||
Canvas.pushDialog(ShaderEditor);
|
||||
ShaderEditorGraph.loadGraph(%assetDef.shaderGraph);
|
||||
$ShaderGen::targetShaderFile = filePath(%assetDef.shaderGraph) @"/"@fileBase(%assetDef.shaderGraph);
|
||||
}*/
|
||||
}
|
||||
else if(%assetType $= "StateMachineAsset")
|
||||
{
|
||||
eval("AssetBrowser.tempAsset = new " @ %assetDef.getClassName() @ "();");
|
||||
AssetBrowser.tempAsset.assignFieldsFrom(%assetDef);
|
||||
//Build out the edit command
|
||||
%buildCommand = %this @ ".edit" @ %assetType @ "(" @ %assetDef @ ");";
|
||||
eval(%buildCommand);
|
||||
}
|
||||
|
||||
function AssetBrowser::appendSubLevel(%this)
|
||||
{
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
%assetType = %assetDef.getClassName();
|
||||
|
||||
SMAssetEditInspector.inspect(AssetBrowser.tempAsset);
|
||||
AssetBrowser_editAsset.editedAssetId = EditAssetPopup.assetId;
|
||||
AssetBrowser_editAsset.editedAsset = AssetBrowser.tempAsset;
|
||||
|
||||
//remove some of the groups we don't need:
|
||||
for(%i=0; %i < SMAssetEditInspector.getCount(); %i++)
|
||||
{
|
||||
%caption = SMAssetEditInspector.getObject(%i).caption;
|
||||
|
||||
if(%caption $= "Ungrouped" || %caption $= "Object" || %caption $= "Editing"
|
||||
|| %caption $= "Persistence" || %caption $= "Dynamic Fields")
|
||||
{
|
||||
SMAssetEditInspector.remove(SMAssetEditInspector.getObject(%i));
|
||||
%i--;
|
||||
}
|
||||
}
|
||||
|
||||
Canvas.pushDialog(StateMachineEditor);
|
||||
StateMachineEditor.loadStateMachineAsset(EditAssetPopup.assetId);
|
||||
StateMachineEditor-->Window.text = "State Machine Editor ("@EditAssetPopup.assetId@")";
|
||||
}
|
||||
else if(%assetType $= "ComponentAsset")
|
||||
{
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
%scriptFile = %assetDef.scriptFile;
|
||||
|
||||
EditorOpenFileInTorsion(makeFullPath(%scriptFile), 0);
|
||||
}
|
||||
else if(%assetType $= "GameObjectAsset")
|
||||
{
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
%scriptFile = %assetDef.scriptFilePath;
|
||||
|
||||
EditorOpenFileInTorsion(makeFullPath(%scriptFile), 0);
|
||||
}
|
||||
else if(%assetType $= "ScriptAsset")
|
||||
{
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
%scriptFile = %assetDef.scriptFilePath;
|
||||
|
||||
EditorOpenFileInTorsion(makeFullPath(%scriptFile), 0);
|
||||
}
|
||||
else if(%assetType $= "ShapeAsset")
|
||||
{
|
||||
%this.hideDialog();
|
||||
ShapeEditorPlugin.openShapeAsset(EditAssetPopup.assetId);
|
||||
}
|
||||
else if(%assetType $= "ShapeAnimationAsset")
|
||||
{
|
||||
%this.hideDialog();
|
||||
ShapeEditorPlugin.openShapeAsset(EditAssetPopup.assetId);
|
||||
}
|
||||
else if(%assetType $= "LevelAsset")
|
||||
{
|
||||
schedule( 1, 0, "EditorOpenMission", %assetDef.LevelFile);
|
||||
}
|
||||
else if(%assetType $= "GUIAsset")
|
||||
{
|
||||
if(!isObject(%assetDef.assetName))
|
||||
{
|
||||
exec(%assetDef.GUIFilePath);
|
||||
exec(%assetDef.mScriptFilePath);
|
||||
}
|
||||
|
||||
GuiEditContent(%assetDef.assetName);
|
||||
}
|
||||
schedule( 1, 0, "EditorOpenSceneAppend", %assetDef);
|
||||
}
|
||||
|
||||
function AssetBrowser::editAssetInfo(%this)
|
||||
|
|
@ -164,20 +87,24 @@ function AssetBrowser::renameAsset(%this)
|
|||
AssetBrowser.selectedAssetPreview-->AssetNameLabel.setFirstResponder();
|
||||
}
|
||||
|
||||
function AssetNameField::onReturn(%this)
|
||||
function AssetBrowser::performRenameAsset(%this, %originalAssetName, %newName)
|
||||
{
|
||||
//if the name is different to the asset's original name, rename it!
|
||||
%newName = %this.getText();
|
||||
if(%this.originalAssetName !$= %this.getText())
|
||||
if(%originalAssetName !$= %newName)
|
||||
{
|
||||
%moduleName = AssetBrowser.selectedModule;
|
||||
|
||||
//do a rename!
|
||||
%success = AssetDatabase.renameDeclaredAsset(%moduleName @ ":" @ %this.originalAssetName, %moduleName @ ":" @ %this.getText());
|
||||
%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)
|
||||
{
|
||||
%newAssetId = %moduleName @ ":" @ %this.getText();
|
||||
%newAssetId = %moduleName @ ":" @ %newName;
|
||||
%assetPath = AssetDatabase.getAssetFilePath(%newAssetId);
|
||||
|
||||
//Rename any associated files as well
|
||||
|
|
@ -187,160 +114,44 @@ function AssetNameField::onReturn(%this)
|
|||
//rename the file to match
|
||||
%path = filePath(%assetPath);
|
||||
|
||||
if(%assetType $= "ComponentAsset")
|
||||
{
|
||||
%oldScriptFilePath = %assetDef.scriptFile;
|
||||
%scriptFilePath = filePath(%assetDef.scriptFile);
|
||||
%scriptExt = fileExt(%assetDef.scriptFile);
|
||||
|
||||
%newScriptFileName = %scriptFilePath @ "/" @ %newName @ %scriptExt;
|
||||
%newAssetFile = %path @ "/" @ %this.getText() @ ".asset.taml";
|
||||
|
||||
%assetDef.componentName = %newName;
|
||||
%assetDef.scriptFile = %newScriptFileName;
|
||||
|
||||
TamlWrite(%assetDef, %newAssetFile);
|
||||
fileDelete(%assetPath);
|
||||
|
||||
pathCopy(%oldScriptFilePath, %newScriptFileName);
|
||||
fileDelete(%oldScriptFilePath);
|
||||
|
||||
//Go through our scriptfile and replace the old namespace with the new
|
||||
%editedFileContents = "";
|
||||
|
||||
%file = new FileObject();
|
||||
if ( %file.openForRead( %newScriptFileName ) )
|
||||
{
|
||||
while ( !%file.isEOF() )
|
||||
{
|
||||
%line = %file.readLine();
|
||||
%line = trim( %line );
|
||||
|
||||
%editedFileContents = %editedFileContents @ strreplace(%line, %this.originalAssetName, %newName) @ "\n";
|
||||
}
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
if(%editedFileContents !$= "")
|
||||
{
|
||||
%file.openForWrite(%newScriptFileName);
|
||||
|
||||
%file.writeline(%editedFileContents);
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
exec(%newScriptFileName);
|
||||
}
|
||||
else if(%assetType $= "StateMachineAsset")
|
||||
{
|
||||
%oldScriptFilePath = %assetDef.stateMachineFile;
|
||||
%scriptFilePath = filePath(%assetDef.stateMachineFile);
|
||||
%scriptExt = fileExt(%assetDef.stateMachineFile);
|
||||
|
||||
%newScriptFileName = %scriptFilePath @ "/" @ %newName @ %scriptExt;
|
||||
%newAssetFile = %path @ "/" @ %this.getText() @ ".asset.taml";
|
||||
|
||||
%assetDef.stateMachineFile = %newScriptFileName;
|
||||
|
||||
TamlWrite(%assetDef, %newAssetFile);
|
||||
fileDelete(%assetPath);
|
||||
|
||||
pathCopy(%oldScriptFilePath, %newScriptFileName);
|
||||
fileDelete(%oldScriptFilePath);
|
||||
}
|
||||
else if(%assetType $= "GameObjectAsset")
|
||||
{
|
||||
%oldScriptFilePath = %assetDef.scriptFilePath;
|
||||
%scriptFilePath = filePath(%assetDef.scriptFilePath);
|
||||
%scriptExt = fileExt(%assetDef.scriptFilePath);
|
||||
|
||||
%oldGOFilePath = %assetDef.TAMLFilePath;
|
||||
|
||||
%newScriptFileName = %scriptFilePath @ "/" @ %newName @ %scriptExt;
|
||||
%newAssetFile = %path @ "/" @ %this.getText() @ ".asset.taml";
|
||||
%newGOFile = %path @ "/" @ %this.getText() @ ".taml";
|
||||
|
||||
%assetDef.gameObjectName = %newName;
|
||||
%assetDef.scriptFilePath = %newScriptFileName;
|
||||
%assetDef.TAMLFilePath = %newGOFile;
|
||||
|
||||
TamlWrite(%assetDef, %newAssetFile);
|
||||
fileDelete(%assetPath);
|
||||
|
||||
pathCopy(%oldScriptFilePath, %newScriptFileName);
|
||||
fileDelete(%oldScriptFilePath);
|
||||
|
||||
pathCopy(%oldGOFilePath, %newGOFile);
|
||||
fileDelete(%oldGOFilePath);
|
||||
|
||||
//Go through our scriptfile and replace the old namespace with the new
|
||||
%editedFileContents = "";
|
||||
|
||||
%file = new FileObject();
|
||||
if ( %file.openForRead( %newScriptFileName ) )
|
||||
{
|
||||
while ( !%file.isEOF() )
|
||||
{
|
||||
%line = %file.readLine();
|
||||
%line = trim( %line );
|
||||
|
||||
%editedFileContents = %editedFileContents @ strreplace(%line, %this.originalAssetName, %newName) @ "\n";
|
||||
}
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
if(%editedFileContents !$= "")
|
||||
{
|
||||
%file.openForWrite(%newScriptFileName);
|
||||
|
||||
%file.writeline(%editedFileContents);
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
exec(%newScriptFileName);
|
||||
|
||||
//Rename in the TAML file as well
|
||||
%file = new FileObject();
|
||||
if ( %file.openForRead( %newGOFile ) )
|
||||
{
|
||||
while ( !%file.isEOF() )
|
||||
{
|
||||
%line = %file.readLine();
|
||||
%line = trim( %line );
|
||||
|
||||
%editedFileContents = %editedFileContents @ strreplace(%line, %this.originalAssetName, %newName) @ "\n";
|
||||
}
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
if(%editedFileContents !$= "")
|
||||
{
|
||||
%file.openForWrite(%newGOFile);
|
||||
|
||||
%file.writeline(%editedFileContents);
|
||||
|
||||
%file.close();
|
||||
}
|
||||
}
|
||||
//Do the rename command
|
||||
%buildCommand = %this @ ".rename" @ %assetType @ "(" @ %assetDef @ "," @ %newAssetId @ ");";
|
||||
eval(%buildCommand);
|
||||
}
|
||||
}
|
||||
|
||||
//Make sure everything is refreshed
|
||||
AssetBrowser.loadFilters();
|
||||
}
|
||||
|
||||
function AssetNameField::onReturn(%this)
|
||||
{
|
||||
%this.clearFirstResponder();
|
||||
%this.setActive(false);
|
||||
|
||||
AssetBrowser.performRenameAsset(%this.originalAssetName, %this.getText());
|
||||
}
|
||||
|
||||
//------------------------------------------------------------
|
||||
|
||||
function AssetBrowser::duplicateAsset(%this)
|
||||
function AssetBrowser::duplicateAsset(%this, %targetModule)
|
||||
{
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
if(%targetModule $= "")
|
||||
{
|
||||
//we need a module to duplicate to first
|
||||
Canvas.pushDialog(AssetBrowser_selectModule);
|
||||
AssetBrowser_selectModule.callback = "AssetBrowser.duplicateAsset";
|
||||
return;
|
||||
}
|
||||
|
||||
%this.setupCreateNewAsset(%assetDef.getClassName(), AssetBrowser.selectedModule);
|
||||
%assetDef = AssetDatabase.acquireAsset(EditAssetPopup.assetId);
|
||||
%assetType = AssetDatabase.getAssetType(EditAssetPopup.assetId);
|
||||
|
||||
//this acts as a redirect based on asset type and will enact the appropriate function
|
||||
//so for a GameObjectAsset, it'll become %this.duplicateGameObjectAsset(%assetDef, %targetModule);
|
||||
//and call to the tools/assetBrowser/scripts/assetTypes/gameObject.cs file for implementation
|
||||
if(%this.isMethod("duplicate"@%assetType))
|
||||
eval(%this @ ".duplicate"@%assetType@"("@%assetDef@","@%targetModule@");");
|
||||
}
|
||||
|
||||
function AssetBrowser::deleteAsset(%this)
|
||||
|
|
@ -358,8 +169,15 @@ function AssetBrowser::confirmDeleteAsset(%this)
|
|||
%currentSelectedItem = AssetBrowserFilterTree.getSelectedItem();
|
||||
%currentItemParent = AssetBrowserFilterTree.getParentItem(%currentSelectedItem);
|
||||
|
||||
AssetDatabase.deleteAsset(EditAssetPopup.assetId, false);
|
||||
%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);
|
||||
|
||||
%this.loadFilters();
|
||||
|
||||
if(!AssetBrowserFilterTree.selectItem(%currentSelectedItem))
|
||||
|
|
|
|||
|
|
@ -39,8 +39,7 @@ function GameObjectCreateBtn::onClick(%this)
|
|||
//also, exec any components that may exist
|
||||
//find all GameObjectAssets
|
||||
%assetQuery = new AssetQuery();
|
||||
if(!AssetDatabase.findAssetType(%assetQuery, "GameObjectAsset"))
|
||||
return; //if we didn't find ANY, just exit
|
||||
AssetDatabase.findAssetType(%assetQuery, "GameObjectAsset");
|
||||
|
||||
%count = %assetQuery.getCount();
|
||||
|
||||
|
|
@ -69,7 +68,7 @@ function GameObjectCreateBtn::onClick(%this)
|
|||
//get the selected module data
|
||||
%moduleName = GameObjectModuleList.getText();
|
||||
|
||||
%selectedEntity.gameObjectAsset = %moduleName @ ":" @ %className;
|
||||
%selectedEntity.gameObject = %moduleName @ ":" @ %className;
|
||||
|
||||
%path = "data/" @ %moduleName @ "/gameObjects/";
|
||||
|
||||
|
|
|
|||
|
|
@ -71,16 +71,18 @@ function NewAssetModuleBtn::onClick(%this)
|
|||
AssetBrowser_addModuleWindow.selectWindow();
|
||||
}
|
||||
|
||||
function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName)
|
||||
function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName, %callback)
|
||||
{
|
||||
Canvas.pushDialog(AssetBrowser_newAsset);
|
||||
|
||||
AssetBrowser_newAssetWindow.text = "New" SPC %assetType SPC "Asset";
|
||||
|
||||
NewAssetPropertiesInspector.clear();
|
||||
NewAssetPropertiesInspector.clearFields();
|
||||
|
||||
NewAssetModuleList.setText(%moduleName);
|
||||
|
||||
AssetBrowser_newAsset.callbackFunc = %callback;
|
||||
|
||||
//get rid of the old one if we had one.
|
||||
if(isObject(%this.newAssetSettings))
|
||||
%this.newAssetSettings.delete();
|
||||
|
|
@ -96,7 +98,7 @@ function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName)
|
|||
NewAssetPropertiesInspector.addField("assetName", "New Asset Name", "String", "Name of the new asset", "New" @ %shortAssetTypeName, "", %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.addField("friendlyName", "Friendly Name", "String", "Human-readable name of new asset", "", "", %this.newAssetSettings);
|
||||
|
||||
NewAssetPropertiesInspector.addField("description", "Description", "Command", "Description of the new asset", "", "", %this.newAssetSettings);
|
||||
NewAssetPropertiesInspector.endGroup();
|
||||
|
|
@ -112,7 +114,8 @@ function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName)
|
|||
else if(%assetType $= "LevelAsset")
|
||||
{
|
||||
NewAssetPropertiesInspector.startGroup("Level");
|
||||
NewAssetPropertiesInspector.addField("levelPreviewImage", "LevePreviewImage", "Image", "Preview Image for the level", "", "", %this.newAssetSettings);
|
||||
NewAssetPropertiesInspector.addField("levelName", "Level Name", "String", "Human-readable name of new level", "", "", %this.newAssetSettings);
|
||||
NewAssetPropertiesInspector.addField("levelPreviewImage", "Level Preview Image", "Image", "Preview Image for the level", "", "", %this.newAssetSettings);
|
||||
NewAssetPropertiesInspector.endGroup();
|
||||
}
|
||||
else if(%assetType $= "ScriptAsset")
|
||||
|
|
@ -121,6 +124,13 @@ function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName)
|
|||
NewAssetPropertiesInspector.addField("isServerScript", "Is Server Script", "bool", "Is this script used on the server?", "1", "", %this.newAssetSettings);
|
||||
NewAssetPropertiesInspector.endGroup();
|
||||
}
|
||||
//Special case, we only do this via internal means like baking
|
||||
/*else if(%assetType $= "ShapeAsset")
|
||||
{
|
||||
NewAssetPropertiesInspector.startGroup("Shape");
|
||||
NewAssetPropertiesInspector.addField("isServerScript", "Is Server Script", "bool", "Is this script used on the server?", "1", "", %this.newAssetSettings);
|
||||
NewAssetPropertiesInspector.endGroup();
|
||||
}*/
|
||||
/*else if(%assetType $= "ShapeAnimationAsset")
|
||||
{
|
||||
NewAssetPropertiesInspector.startGroup("Animation");
|
||||
|
|
@ -134,30 +144,6 @@ function AssetBrowser::setupCreateNewAsset(%this, %assetType, %moduleName)
|
|||
NewAssetPropertiesInspector.addField("padTransforms", "Pad Transforms", "bool", "Source file this animation will pull from", "0", "", %this.newAssetSettings);
|
||||
NewAssetPropertiesInspector.endGroup();
|
||||
}*/
|
||||
|
||||
return;
|
||||
|
||||
if(%moduleName $= "")
|
||||
{
|
||||
Canvas.pushDialog(AssetBrowser_selectModule);
|
||||
}
|
||||
else
|
||||
{
|
||||
AssetBrowser.SelectedModule = %moduleName;
|
||||
|
||||
if(%assetType $= "MaterialAsset")
|
||||
{
|
||||
createNewMaterialAsset("NewMaterial", %moduleName);
|
||||
}
|
||||
else if(%assetType $= "StateMachineAsset")
|
||||
{
|
||||
createNewStateMachineAsset("NewStateMachine", %moduleName);
|
||||
}
|
||||
else if(%assetType $= "ScriptAsset")
|
||||
{
|
||||
createNewScriptAsset("NewScriptAsset", %moduleName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//We do a quick validation that mandatory fields are filled in before passing along to the asset-type specific function
|
||||
|
|
@ -189,36 +175,7 @@ function CreateNewAsset()
|
|||
return;
|
||||
}
|
||||
|
||||
if(%assetType $= "ComponentAsset")
|
||||
{
|
||||
//Canvas.popDialog(AssetBrowser_newComponentAsset);
|
||||
//AssetBrowser_newComponentAsset-->AssetBrowserModuleList.setText(AssetBrowser.selectedModule);
|
||||
%assetFilePath = createNewComponentAsset(%assetName, %path);
|
||||
}
|
||||
else if(%assetType $= "MaterialAsset")
|
||||
{
|
||||
%assetFilePath = createNewMaterialAsset();
|
||||
}
|
||||
else if(%assetType $= "StateMachineAsset")
|
||||
{
|
||||
%assetFilePath = createNewStateMachineAsset();
|
||||
}
|
||||
else if(%assetType $= "GUIAsset")
|
||||
{
|
||||
%assetFilePath = createNewGUIAsset();
|
||||
}
|
||||
else if(%assetType $= "LevelAsset")
|
||||
{
|
||||
%assetFilePath = createNewLevelAsset();
|
||||
}
|
||||
else if(%assetType $= "ScriptAsset")
|
||||
{
|
||||
%assetFilePath = createNewScriptAsset();
|
||||
}
|
||||
else if(%assetType $= "ShapeAnimationAsset")
|
||||
{
|
||||
%assetFilePath = createShapeAnimationAsset();
|
||||
}
|
||||
%assetFilePath = eval(AssetBrowser @ ".create"@%assetType@"();");
|
||||
|
||||
Canvas.popDialog(AssetBrowser_newAsset);
|
||||
|
||||
|
|
@ -227,356 +184,12 @@ function CreateNewAsset()
|
|||
AssetDatabase.addDeclaredAsset(%moduleDef, %assetFilePath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
}
|
||||
|
||||
function createNewComponentAsset()
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/components/" @ %assetName @ ".asset.taml";
|
||||
%scriptPath = %modulePath @ "/components/" @ %assetName @ ".cs";
|
||||
|
||||
%asset = new ComponentAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
componentName = %assetName;
|
||||
componentClass = AssetBrowser.newAssetSettings.parentClass;
|
||||
friendlyName = AssetBrowser.newAssetSettings.friendlyName;
|
||||
componentType = AssetBrowser.newAssetSettings.componentGroup;
|
||||
description = AssetBrowser.newAssetSettings.description;
|
||||
scriptFile = %scriptPath;
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
%file = new FileObject();
|
||||
|
||||
if(%file.openForWrite(%scriptPath))
|
||||
if(AssetBrowser_newAsset.callbackFunc !$= "")
|
||||
{
|
||||
//TODO: enable ability to auto-embed a header for copyright or whatnot
|
||||
%file.writeline("//onAdd is called when the component is created and then added to it's owner entity.\n");
|
||||
%file.writeline("//You would also add any script-defined component fields via addComponentField().\n");
|
||||
%file.writeline("function " @ %assetName @ "::onAdd(%this)\n{\n\n}\n");
|
||||
%file.writeline("//onAdd is called when the component is removed and deleted from it's owner entity.");
|
||||
%file.writeline("function " @ %assetName @ "::onRemove(%this)\n{\n\n}\n");
|
||||
%file.writeline("//onClientConnect is called any time a new client connects to the server.");
|
||||
%file.writeline("function " @ %assetName @ "::onClientConnect(%this, %client)\n{\n\n}\n");
|
||||
%file.writeline("//onClientDisconnect is called any time a client disconnects from the server.");
|
||||
%file.writeline("function " @ %assetName @ "::onClientDisonnect(%this, %client)\n{\n\n}\n");
|
||||
%file.writeline("//update is called when the component does an update tick.\n");
|
||||
%file.writeline("function " @ %assetName @ "::Update(%this)\n{\n\n}\n");
|
||||
|
||||
%file.close();
|
||||
%callbackCommand = "" @ AssetBrowser_newAsset.callbackFunc @ "(\"" @ %moduleName @ ":" @ %assetName @ "\");";
|
||||
eval(%callbackCommand);
|
||||
}
|
||||
|
||||
Canvas.popDialog(AssetBrowser_newComponentAsset);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "Components");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function createNewMaterialAsset()
|
||||
{
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%tamlpath = %modulePath @ "/materials/" @ %assetName @ ".asset.taml";
|
||||
%sgfPath = %modulePath @ "/materials/" @ %assetName @ ".sgf";
|
||||
|
||||
%asset = new MaterialAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
shaderData = "";
|
||||
shaderGraph = %sgfPath;
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "Materials");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function createNewScriptAsset()
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/scripts/" @ %assetName @ ".asset.taml";
|
||||
%scriptPath = %modulePath @ "/scripts/" @ %assetName @ ".cs";
|
||||
|
||||
%asset = new ScriptAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
scriptFilePath = %scriptPath;
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "Scripts");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
%file = new FileObject();
|
||||
|
||||
if(%file.openForWrite(%scriptPath))
|
||||
{
|
||||
%file.close();
|
||||
}
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function createNewStateMachineAsset()
|
||||
{
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%assetQuery = new AssetQuery();
|
||||
|
||||
%matchingAssetCount = AssetDatabase.findAssetName(%assetQuery, %assetName);
|
||||
|
||||
%i=1;
|
||||
while(%matchingAssetCount > 0)
|
||||
{
|
||||
%newAssetName = %assetName @ %i;
|
||||
%i++;
|
||||
|
||||
%matchingAssetCount = AssetDatabase.findAssetName(%assetQuery, %newAssetName);
|
||||
}
|
||||
|
||||
%assetName = %newAssetName;
|
||||
|
||||
%assetQuery.delete();
|
||||
|
||||
%tamlpath = "data/" @ %moduleName @ "/stateMachines/" @ %assetName @ ".asset.taml";
|
||||
%smFilePath = "data/" @ %moduleName @ "/stateMachines/" @ %assetName @ ".xml";
|
||||
|
||||
%asset = new StateMachineAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
stateMachineFile = %smFilePath;
|
||||
};
|
||||
|
||||
%xmlDoc = new SimXMLDocument();
|
||||
%xmlDoc.saveFile(%smFilePath);
|
||||
%xmlDoc.delete();
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
//Now write our XML file
|
||||
%xmlFile = new FileObject();
|
||||
%xmlFile.openForWrite(%smFilePath);
|
||||
%xmlFile.writeLine("<StateMachine>");
|
||||
%xmlFile.writeLine("</StateMachine>");
|
||||
%xmlFile.close();
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "StateMachines");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function createNewGUIAsset()
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/GUIs/" @ %assetName @ ".asset.taml";
|
||||
%guipath = %modulePath @ "/GUIs/" @ %assetName @ ".gui";
|
||||
%scriptPath = %modulePath @ "/GUIs/" @ %assetName @ ".cs";
|
||||
|
||||
%asset = new GUIAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
scriptFilePath = %scriptPath;
|
||||
guiFilePath = %guipath;
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
%file = new FileObject();
|
||||
|
||||
if(%file.openForWrite(%guipath))
|
||||
{
|
||||
%file.writeline("//--- OBJECT WRITE BEGIN ---");
|
||||
%file.writeline("%guiContent = new GuiControl(" @ %assetName @ ") {");
|
||||
%file.writeline(" position = \"0 0\";");
|
||||
%file.writeline(" extent = \"100 100\";");
|
||||
%file.writeline("};");
|
||||
%file.writeline("//--- OBJECT WRITE END ---");
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
if(%file.openForWrite(%scriptPath))
|
||||
{
|
||||
%file.writeline("function " @ %assetName @ "::onWake(%this)\n{\n\n}\n");
|
||||
%file.writeline("function " @ %assetName @ "::onSleep(%this)\n{\n\n}\n");
|
||||
|
||||
%file.close();
|
||||
}
|
||||
|
||||
//load the gui
|
||||
exec(%guipath);
|
||||
exec(%scriptPath);
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "GUIs");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function createNewLevelAsset()
|
||||
{
|
||||
%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/levels/" @ %assetName @ ".asset.taml";
|
||||
%levelPath = %modulePath @ "/levels/" @ %assetName @ ".mis";
|
||||
|
||||
%asset = new LevelAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
LevelFile = %levelPath;
|
||||
LevelDescription = AssetBrowser.newAssetSettings.levelDescription;
|
||||
PreviewImage = AssetBrowser.newAssetSettings.levelPreviewImage;
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
if(!pathCopy("tools/levels/BlankRoom.mis", %levelPath, false))
|
||||
{
|
||||
echo("Unable to copy template level file!");
|
||||
}
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "Levels");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;
|
||||
}
|
||||
|
||||
function createNewShapeAnimationAsset()
|
||||
{
|
||||
%dlg = new OpenFileDialog()
|
||||
{
|
||||
Filters = "Animation Files(*.dae, *.cached.dts)|*.dae;*.cached.dts";
|
||||
DefaultPath = $Pref::WorldEditor::LastPath;
|
||||
DefaultFile = "";
|
||||
ChangePath = false;
|
||||
OverwritePrompt = true;
|
||||
forceRelativePath = false;
|
||||
//MultipleFiles = true;
|
||||
};
|
||||
|
||||
%ret = %dlg.Execute();
|
||||
|
||||
if ( %ret )
|
||||
{
|
||||
$Pref::WorldEditor::LastPath = filePath( %dlg.FileName );
|
||||
%fullPath = %dlg.FileName;
|
||||
}
|
||||
|
||||
%dlg.delete();
|
||||
|
||||
if ( !%ret )
|
||||
return;
|
||||
|
||||
/*%moduleName = AssetBrowser.newAssetSettings.moduleName;
|
||||
%modulePath = "data/" @ %moduleName;
|
||||
|
||||
%assetName = AssetBrowser.newAssetSettings.assetName;
|
||||
|
||||
%tamlpath = %modulePath @ "/levels/" @ %assetName @ ".asset.taml";
|
||||
%levelPath = %modulePath @ "/levels/" @ %assetName @ ".mis";
|
||||
|
||||
%asset = new ShapeAnimationAsset()
|
||||
{
|
||||
AssetName = %assetName;
|
||||
versionId = 1;
|
||||
LevelFile = %levelPath;
|
||||
LevelDescription = AssetBrowser.newAssetSettings.levelDescription;
|
||||
PreviewImage = AssetBrowser.newAssetSettings.levelPreviewImage;
|
||||
};
|
||||
|
||||
TamlWrite(%asset, %tamlpath);
|
||||
|
||||
if(!pathCopy("tools/levels/BlankRoom.mis", %levelPath, false))
|
||||
{
|
||||
echo("Unable to copy template level file!");
|
||||
}
|
||||
|
||||
%moduleDef = ModuleDatabase.findModule(%moduleName, 1);
|
||||
AssetDatabase.addDeclaredAsset(%moduleDef, %tamlpath);
|
||||
|
||||
AssetBrowser.loadFilters();
|
||||
|
||||
%treeItemId = AssetBrowserFilterTree.findItemByName(%moduleName);
|
||||
%smItem = AssetBrowserFilterTree.findChildItemByName(%treeItemId, "Levels");
|
||||
|
||||
AssetBrowserFilterTree.onSelect(%smItem);
|
||||
|
||||
return %tamlpath;*/
|
||||
}
|
||||
|
||||
function ParentComponentList::onWake(%this)
|
||||
|
|
@ -651,13 +264,5 @@ function ParentComponentList::refresh(%this)
|
|||
//----------------------------------------------------------
|
||||
function EWorldEditor::createGameObject( %this )
|
||||
{
|
||||
GameObjectCreatorObjectName.text = "";
|
||||
|
||||
%activeSelection = %this.getActiveSelection();
|
||||
if( %activeSelection.getCount() == 0 )
|
||||
return;
|
||||
|
||||
GameObjectCreator.selectedEntity = %activeSelection.getObject( 0 );
|
||||
|
||||
Canvas.pushDialog(GameObjectCreator);
|
||||
AssetBrowser.createGameObjectAsset();
|
||||
}
|
||||
|
|
@ -37,6 +37,31 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
};
|
||||
}
|
||||
|
||||
if( !isObject( EditLevelAssetPopup ) )
|
||||
{
|
||||
new PopupMenu( EditLevelAssetPopup )
|
||||
{
|
||||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
//isPopup = true;
|
||||
|
||||
item[ 0 ] = "Edit Level" TAB "" TAB "AssetBrowser.editAsset();";
|
||||
item[ 1 ] = "Append as Sublevel" TAB "" TAB "AssetBrowser.appendSublevel();";
|
||||
item[ 2 ] = "Rename Asset" TAB "" TAB "AssetBrowser.renameAsset();";
|
||||
item[ 3 ] = "Refresh Asset" TAB "" TAB "AssetBrowser.refreshAsset();";
|
||||
item[ 4 ] = "Asset Properties" TAB "" TAB "AssetBrowser.editAssetInfo();";
|
||||
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();";
|
||||
|
||||
jumpFileName = "";
|
||||
jumpLineNumber = "";
|
||||
};
|
||||
}
|
||||
|
||||
if( !isObject( AddNewComponentAssetPopup ) )
|
||||
{
|
||||
new PopupMenu( AddNewComponentAssetPopup )
|
||||
|
|
@ -92,6 +117,25 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
item[ 12 ] = "Create Particle Effect" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ParticleEffectAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewParticleEffectAsset(\"NewParticleEffect\", AssetBrowser.selectedModule);";
|
||||
};
|
||||
}
|
||||
|
||||
if( !isObject( AddNewCppAssetPopup ) )
|
||||
{
|
||||
%this.AddNewCppAssetPopup = new PopupMenu( AddNewCppAssetPopup )
|
||||
{
|
||||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
//isPopup = true;
|
||||
|
||||
/*item[ 0 ] = "Create Static Class" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CppStaticClassAsset\", AssetBrowser.selectedModule);";
|
||||
item[ 1 ] = "Create Regular Class" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CppRegularClassAsset\", AssetBrowser.selectedModule);";
|
||||
item[ 2 ] = "Create GameObject Class" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CppGameObjectAsset\", AssetBrowser.selectedModule);";
|
||||
item[ 3 ] = "Create Component Class" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CppComponentAsset\", AssetBrowser.selectedModule);";
|
||||
item[ 4 ] = "Create Script Class" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CppScriptClass\", AssetBrowser.selectedModule);";*/
|
||||
|
||||
item[ 0 ] = "Create C++ Class" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"CppAsset\", AssetBrowser.selectedModule);";
|
||||
};
|
||||
//%this.AddNewScriptAssetPopup.insertSubMenu(0, "Create Component", AddNewComponentAssetPopup);
|
||||
}
|
||||
|
||||
if( !isObject( AddNewAssetPopup ) )
|
||||
{
|
||||
|
|
@ -105,6 +149,9 @@ function AssetBrowser::buildPopupMenus(%this)
|
|||
item[2] = "Create Art Asset" TAB AddNewArtAssetPopup;
|
||||
item[3] = "-";
|
||||
item[4] = "Create Level" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"LevelAsset\", AssetBrowser.selectedModule);";//"AssetBrowser.createNewLevelAsset(\"NewLevel\", AssetBrowser.selectedModule);";
|
||||
item[5] = "-";
|
||||
item[6] = "Create C++ Asset" TAB AddNewCppAssetPopup;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -130,11 +177,89 @@ 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(8, false); //post effect
|
||||
AddNewArtAssetPopup.enableItem(10, false); //sound asset
|
||||
AddNewArtAssetPopup.enableItem(12, false); //particle effect
|
||||
|
||||
AddNewScriptAssetPopup.enableItem(2, false); //state machine
|
||||
if( !isObject( EditAssetCategoryPopup ) )
|
||||
{
|
||||
new PopupMenu( EditAssetCategoryPopup )
|
||||
{
|
||||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
//isPopup = true;
|
||||
|
||||
item[ 0 ] = "Toggle Autoloading of Script Assets" TAB "" TAB "AssetBrowser.toggleAutoloadAsset(\"Script\");";
|
||||
};
|
||||
}
|
||||
|
||||
//Browser visibility menu
|
||||
if( !isObject( BrowserVisibilityPopup ) )
|
||||
{
|
||||
new PopupMenu( BrowserVisibilityPopup )
|
||||
{
|
||||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
//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();";
|
||||
};
|
||||
}
|
||||
|
||||
//Import Legacy menus
|
||||
if( !isObject( ImportAssetsPopup ) )
|
||||
{
|
||||
new PopupMenu( ImportAssetsPopup )
|
||||
{
|
||||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
|
||||
item[ 0 ] = "Import Legacy Game" TAB "" TAB "AssetBrowser.importLegacyGame();";
|
||||
Item[ 1 ] = "-";
|
||||
item[ 2 ] = "Import new assets" TAB "" TAB "AssetBrowser.importNewAssetFile();";
|
||||
};
|
||||
}
|
||||
|
||||
if( !isObject( EditGameObjectAssetPopup ) )
|
||||
{
|
||||
new PopupMenu( EditGameObjectAssetPopup )
|
||||
{
|
||||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
//isPopup = true;
|
||||
|
||||
item[ 0 ] = "Open GameObject Editor" TAB "" TAB "echo(\"Not yet implemented.\");";
|
||||
item[ 1 ] = "Edit GameObject Script" TAB "" TAB "AssetBrowser.editGameObjectAssetScript(AssetDatabase.acquireAsset(EditGameObjectAssetPopup.assetId));";
|
||||
item[ 2 ] = "-";
|
||||
item[ 3 ] = "Apply Instance to GameObject" TAB "" TAB "AssetBrowser.applyInstanceToGameObject(AssetDatabase.acquireAsset(EditGameObjectAssetPopup.assetId));";
|
||||
item[ 4 ] = "Reset Instance to GameObject" TAB "" TAB "echo(\"Not yet implemented.\");";
|
||||
item[ 5 ] = "-";
|
||||
item[ 6 ] = "Create Child GameObject" TAB "" TAB "echo(\"Not yet implemented.\");";
|
||||
};
|
||||
}
|
||||
|
||||
//Asset Import Resolution menus
|
||||
if( !isObject( ImportAssetResolutionsPopup ) )
|
||||
{
|
||||
%this.ImportAssetResolutionsPopup = new PopupMenu( ImportAssetResolutionsPopup )
|
||||
{
|
||||
superClass = "MenuBuilder";
|
||||
class = "EditorWorldMenu";
|
||||
|
||||
item[0] = "Use original Asset for duplicates" TAB "" TAB "";
|
||||
item[1] = "Override duplicate with new Asset" TAB "" TAB "";
|
||||
item[2] = "-";
|
||||
item[3] = "Rename Asset" TAB "" TAB "";
|
||||
item[4] = "-";
|
||||
item[5] = "Find missing file" TAB "" TAB "ImportAssetWindow.findMissingFile(ImportAssetResolutionsPopup.assetItem);";
|
||||
item[6] = "-";
|
||||
item[7] = "Edit Asset properties" TAB "" TAB "";
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function AddNewScriptAssetPopupMenu::onSelectItem(%this, %id, %text)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,21 @@
|
|||
function AssetBrowser_selectModule::onWake(%this)
|
||||
function AssetBrowser_SelectModule::onWake(%this)
|
||||
{
|
||||
AssetBrowser_SelectModuleWindow-->ModuleList.refresh();
|
||||
}
|
||||
|
||||
function AssetBrowser_SelectModule::moduleSelected(%this)
|
||||
{
|
||||
Canvas.popDialog(AssetBrowser_SelectModule);
|
||||
|
||||
%module = AssetBrowser_SelectModuleWindow-->ModuleList.getText();
|
||||
echo("Module Selected: " @ %module);
|
||||
|
||||
if(%this.callback !$= "")
|
||||
eval(%this.callback @ "(" @ %module @ ");");
|
||||
else
|
||||
error("AssetBrowser_SelectModule - Invalid callback");
|
||||
}
|
||||
|
||||
function SelectModule_NewAssetModuleBtn::onClick(%this)
|
||||
{
|
||||
Canvas.pushDialog(AssetBrowser_AddModule);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
#include "core/module.h"
|
||||
#include "console/engineAPI.h"
|
||||
|
||||
MODULE_BEGIN(@_Module)
|
||||
|
||||
MODULE_INIT_AFTER(Sim)
|
||||
MODULE_SHUTDOWN_BEFORE(Sim)
|
||||
|
||||
MODULE_INIT
|
||||
{
|
||||
// Setup anything needed when the engine initializes here
|
||||
}
|
||||
MODULE_SHUTDOWN
|
||||
{
|
||||
// Cleanup anything that was initialized before here
|
||||
}
|
||||
MODULE_END;
|
||||
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
#include "@.h"
|
||||
|
||||
IMPLEMENT_STATIC_CLASS(@, , "Functions for maintaing a list of banned users.");
|
||||
|
||||
@* @::smInstance;
|
||||
|
||||
@::@()
|
||||
{
|
||||
smInstance = this;
|
||||
}
|
||||
|
||||
DefineEngineStaticMethod(@, doSomething, void, (), , "")
|
||||
{
|
||||
//@::instance()->doSomething();
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
#include "console/engineAPI.h"
|
||||
|
||||
class @
|
||||
{
|
||||
DECLARE_STATIC_CLASS(@);
|
||||
private:
|
||||
|
||||
protected:
|
||||
static @* smInstance;
|
||||
|
||||
public:
|
||||
@();
|
||||
|
||||
static @* instance() { return smInstance; }
|
||||
};
|
||||
BIN
Templates/BaseGame/game/tools/classIcons/ActiveScene.png
Normal file
BIN
Templates/BaseGame/game/tools/classIcons/ActiveScene.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 805 B |
BIN
Templates/BaseGame/game/tools/classIcons/Scene.png
Normal file
BIN
Templates/BaseGame/game/tools/classIcons/Scene.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 762 B |
|
|
@ -287,6 +287,30 @@ new GuiControlProfile( ToolsGuiTextEditProfile )
|
|||
category = "Tools";
|
||||
};
|
||||
|
||||
if( !isObject( ToolsGuiTextEditErrorProfile ) )
|
||||
new GuiControlProfile( ToolsGuiTextEditErrorProfile )
|
||||
{
|
||||
opaque = true;
|
||||
bitmap = "./images/textEditFrame";
|
||||
hasBitmapArray = true;
|
||||
border = -2; // fix to display textEdit img
|
||||
//borderWidth = "1"; // fix to display textEdit img
|
||||
//borderColor = "100 100 100";
|
||||
fillColor = "242 241 240 0";
|
||||
fillColorHL = "255 255 255";
|
||||
fontColor = "0 0 0";
|
||||
fontColorHL = "255 0 0";
|
||||
fontColorSEL = "98 100 137";
|
||||
fontColorNA = "200 200 200";
|
||||
textOffset = "4 2";
|
||||
autoSizeWidth = false;
|
||||
autoSizeHeight = true;
|
||||
justify = "left";
|
||||
tab = true;
|
||||
canKeyFocus = true;
|
||||
category = "Tools";
|
||||
};
|
||||
|
||||
if( !isObject( ToolsGuiTextEditCenterProfile ) )
|
||||
new GuiControlProfile (ToolsGuiTextEditCenterProfile)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -137,6 +137,8 @@ function MaterialEditorGui::open(%this)
|
|||
|
||||
if( MaterialEditorGui.currentMode $= "Mesh" )
|
||||
MaterialEditorGui.prepareActiveObject( true );
|
||||
else if( MaterialEditorGui.currentMode $= "asset" )
|
||||
MaterialEditorGui.prepareActiveMaterial( MaterialEditorGui.currentMaterial, true );
|
||||
else
|
||||
MaterialEditorGui.prepareActiveMaterial( "", true );
|
||||
|
||||
|
|
@ -288,7 +290,9 @@ function MaterialEditorGui::setMode( %this )
|
|||
}
|
||||
else
|
||||
{
|
||||
MaterialEditorGui.currentMode = "Material";
|
||||
if(MaterialEditorGui.currentMode !$= "asset")
|
||||
MaterialEditorGui.currentMode = "Material";
|
||||
|
||||
MatEdMaterialMode.setVisible(1);
|
||||
EWorldEditor.clearSelection();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -145,10 +145,9 @@ function ShapeEditorPlugin::onWorldEditorStartup(%this)
|
|||
}
|
||||
}
|
||||
|
||||
function ShapeEditorPlugin::openShapeAsset(%this, %assetId)
|
||||
function ShapeEditorPlugin::openShapeAsset(%this, %assetDef)
|
||||
{
|
||||
%this.selectedAssetId = %assetId;
|
||||
%this.selectedAssetDef = AssetDatabase.acquireAsset(%assetId);
|
||||
%this.selectedAssetDef = %assetDef;
|
||||
%this.open(%this.selectedAssetDef.fileName);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -613,7 +613,7 @@ function ShapeEdPropWindow::update_onShapeSelectionChanged( %this )
|
|||
ShapeEdThreadWindow.onAddThread(); // add thread 0
|
||||
|
||||
//Now, fetch any animation assets if we're utilizing a shape asset
|
||||
if(ShapeEditorPlugin.selectedAssetId !$= "")
|
||||
if(ShapeEditorPlugin.selectedAssetDef !$= "")
|
||||
{
|
||||
%animationAssetCount = ShapeEditorPlugin.selectedAssetDef.getAnimationCount();
|
||||
|
||||
|
|
|
|||
|
|
@ -319,7 +319,7 @@ function ShapeEditor::doAddSequence( %this, %seqName, %from, %start, %end )
|
|||
|
||||
function ActionAddSequence::doit( %this )
|
||||
{
|
||||
if(ShapeEditorPlugin.selectedAssetId $= "")
|
||||
if(ShapeEditorPlugin.selectedAssetDef $= "")
|
||||
{
|
||||
// If adding this sequence from an existing sequence, make a backup copy of
|
||||
// the existing sequence first, so we can edit the start/end frames later
|
||||
|
|
@ -346,8 +346,20 @@ function ActionAddSequence::doit( %this )
|
|||
%assetDef = AssetDatabase.acquireAsset(%this.seqName);
|
||||
%moduleName = getWord(getToken(%this.seqName, ":", 0),0);
|
||||
|
||||
//If we have <rootpose> or ambient, we'll want to ignore them for our idx values when embedding animation dependencies to our shape asset
|
||||
%idxOffset = 0;
|
||||
|
||||
if(ShapeEdSequenceList.findTextIndex("<rootpose>\t\t\t\t") != -1)
|
||||
%idxOffset++;
|
||||
|
||||
if(ShapeEdSequenceList.findTextIndex("ambient\t\t\t\t") != -1)
|
||||
%idxOffset++;
|
||||
|
||||
//TODO, properly ignore <rootpose> and ambient entries for our idx values, but only if they're there!
|
||||
%idx = ShapeEdSequenceList.rowCount() - 2;
|
||||
%idx = ShapeEdSequenceList.rowCount() - %idxOffset;
|
||||
|
||||
//We adjust due to the list "header" row as well
|
||||
%idx -= 1;
|
||||
|
||||
%animSet = "ShapeEditorPlugin.selectedAssetDef.animationSequence"@%idx@"=\"@Asset="@%moduleName@":"@%assetDef.assetName@"\";";
|
||||
eval(%animSet);
|
||||
|
|
|
|||
|
|
@ -1596,6 +1596,8 @@ function EditorTree::onRightMouseUp( %this, %itemId, %mouse, %obj )
|
|||
{
|
||||
%popup.item[ 0 ] = "Delete" TAB "" TAB "EditorMenuEditDelete();";
|
||||
%popup.item[ 1 ] = "Group" TAB "" TAB "EWorldEditor.addSimGroup( true );";
|
||||
%popup.item[ 2 ] = "-";
|
||||
%popup.item[ 1 ] = "Make select a Sub-Level" TAB "" TAB "MakeSelectionASublevel();";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1726,7 +1728,7 @@ function EditorTree::isValidDragTarget( %this, %id, %obj )
|
|||
if( %obj.name $= "CameraBookmarks" )
|
||||
return EWorldEditor.areAllSelectedObjectsOfType( "CameraBookmark" );
|
||||
else
|
||||
return ( %obj.getClassName() $= "SimGroup" );
|
||||
return ( %obj.getClassName() $= "SimGroup" || %obj.isMemberOfClass("Scene"));
|
||||
}
|
||||
|
||||
function EditorTree::onBeginReparenting( %this )
|
||||
|
|
|
|||
|
|
@ -237,7 +237,7 @@ function EditorNewLevel( %file )
|
|||
function EditorSaveMissionMenu()
|
||||
{
|
||||
if(EditorGui.saveAs)
|
||||
EditorSaveMissionAs();
|
||||
AssetBrowser.setupCreateNewAsset("LevelAsset", AssetBrowser.selectedModule, "EditorSaveMissionAs");
|
||||
else
|
||||
EditorSaveMission();
|
||||
}
|
||||
|
|
@ -299,123 +299,32 @@ function EditorSaveMission()
|
|||
return true;
|
||||
}
|
||||
|
||||
function EditorSaveMissionAs( %missionName )
|
||||
function EditorSaveMissionAs( %levelAsset )
|
||||
{
|
||||
// If we didn't get passed a new mission name then
|
||||
// prompt the user for one.
|
||||
if ( %missionName $= "" )
|
||||
if ( %levelAsset $= "" )
|
||||
return;
|
||||
|
||||
%levelAssetDef = AssetDatabase.acquireAsset(%levelAsset);
|
||||
%assetType = AssetDatabase.getAssetType(%levelAsset);
|
||||
|
||||
if(%assetType !$= "LevelAsset")
|
||||
{
|
||||
%dlg = new SaveFileDialog()
|
||||
{
|
||||
Filters = $Pref::WorldEditor::FileSpec;
|
||||
DefaultPath = EditorSettings.value("LevelInformation/levelsDirectory");
|
||||
ChangePath = false;
|
||||
OverwritePrompt = true;
|
||||
};
|
||||
|
||||
%ret = %dlg.Execute();
|
||||
if(%ret)
|
||||
{
|
||||
// Immediately override/set the levelsDirectory
|
||||
EditorSettings.setValue( "LevelInformation/levelsDirectory", collapseFilename(filePath( %dlg.FileName )) );
|
||||
|
||||
%missionName = %dlg.FileName;
|
||||
}
|
||||
|
||||
%dlg.delete();
|
||||
|
||||
if(! %ret)
|
||||
return;
|
||||
error("Somehow tried to save a non-level asset as a level? " @ %levelAsset);
|
||||
return;
|
||||
}
|
||||
|
||||
%missionName = %levelAssetDef.LevelFile;
|
||||
|
||||
if( fileExt( %missionName ) !$= ".mis" )
|
||||
%missionName = %missionName @ ".mis";
|
||||
|
||||
EWorldEditor.isDirty = true;
|
||||
%saveMissionFile = $Server::MissionFile;
|
||||
|
||||
$Server::MissionFile = %missionName;
|
||||
|
||||
%copyTerrainsFailed = false;
|
||||
|
||||
// Rename all the terrain files. Save all previous names so we can
|
||||
// reset them if saving fails.
|
||||
%newMissionName = fileBase(%missionName);
|
||||
%oldMissionName = fileBase(%saveMissionFile);
|
||||
|
||||
initContainerTypeSearch( $TypeMasks::TerrainObjectType );
|
||||
%savedTerrNames = new ScriptObject();
|
||||
for( %i = 0;; %i ++ )
|
||||
{
|
||||
%terrainObject = containerSearchNext();
|
||||
if( !%terrainObject )
|
||||
break;
|
||||
|
||||
%savedTerrNames.array[ %i ] = %terrainObject.terrainFile;
|
||||
|
||||
%terrainFilePath = makeRelativePath( filePath( %terrainObject.terrainFile ), getMainDotCsDir() );
|
||||
%terrainFileName = fileName( %terrainObject.terrainFile );
|
||||
|
||||
// Workaround to have terrains created in an unsaved "New Level..." mission
|
||||
// moved to the correct place.
|
||||
|
||||
if( EditorGui.saveAs && %terrainFilePath $= "tools/art/terrains" )
|
||||
%terrainFilePath = "art/terrains";
|
||||
|
||||
// Try and follow the existing naming convention.
|
||||
// If we can't, use systematic terrain file names.
|
||||
if( strstr( %terrainFileName, %oldMissionName ) >= 0 )
|
||||
%terrainFileName = strreplace( %terrainFileName, %oldMissionName, %newMissionName );
|
||||
else
|
||||
%terrainFileName = %newMissionName @ "_" @ %i @ ".ter";
|
||||
|
||||
%newTerrainFile = %terrainFilePath @ "/" @ %terrainFileName;
|
||||
|
||||
if (!isWriteableFileName(%newTerrainFile))
|
||||
{
|
||||
if (MessageBox("Error", "Terrain file \""@ %newTerrainFile @ "\" is read-only. Continue?", "Ok", "Stop") == $MROk)
|
||||
continue;
|
||||
else
|
||||
{
|
||||
%copyTerrainsFailed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( !%terrainObject.save( %newTerrainFile ) )
|
||||
{
|
||||
error( "Failed to save '" @ %newTerrainFile @ "'" );
|
||||
%copyTerrainsFailed = true;
|
||||
break;
|
||||
}
|
||||
|
||||
%terrainObject.terrainFile = %newTerrainFile;
|
||||
}
|
||||
|
||||
ETerrainEditor.isDirty = false;
|
||||
|
||||
// Save the mission.
|
||||
if(%copyTerrainsFailed || !EditorSaveMission())
|
||||
{
|
||||
// It failed, so restore the mission and terrain filenames.
|
||||
|
||||
$Server::MissionFile = %saveMissionFile;
|
||||
|
||||
initContainerTypeSearch( $TypeMasks::TerrainObjectType );
|
||||
for( %i = 0;; %i ++ )
|
||||
{
|
||||
%terrainObject = containerSearchNext();
|
||||
if( !%terrainObject )
|
||||
break;
|
||||
|
||||
%terrainObject.terrainFile = %savedTerrNames.array[ %i ];
|
||||
}
|
||||
}
|
||||
|
||||
%savedTerrNames.delete();
|
||||
//Make sure we have a selected module so we can create our module
|
||||
Canvas.pushDialog(AssetBrowser_selectModule);
|
||||
}
|
||||
|
||||
function EditorOpenMission(%filename)
|
||||
function EditorOpenMission(%levelAsset)
|
||||
{
|
||||
if( EditorIsDirty())
|
||||
{
|
||||
|
|
@ -428,28 +337,31 @@ function EditorOpenMission(%filename)
|
|||
}
|
||||
}
|
||||
|
||||
if(%filename $= "")
|
||||
if(%levelAsset $= "")
|
||||
{
|
||||
%dlg = new OpenFileDialog()
|
||||
AssetBrowser.showDialog("LevelAsset", "EditorOpenMission", "", "", "");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//If we got the actual assetdef, just roll with it
|
||||
if(isObject(%levelAsset))
|
||||
{
|
||||
Filters = $Pref::WorldEditor::FileSpec;
|
||||
DefaultPath = EditorSettings.value("LevelInformation/levelsDirectory");
|
||||
ChangePath = false;
|
||||
MustExist = true;
|
||||
};
|
||||
|
||||
%ret = %dlg.Execute();
|
||||
if(%ret)
|
||||
%assetDef = %levelAsset;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Immediately override/set the levelsDirectory
|
||||
EditorSettings.setValue( "LevelInformation/levelsDirectory", collapseFilename(filePath( %dlg.FileName )) );
|
||||
%filename = %dlg.FileName;
|
||||
//parse it out if its
|
||||
%assetDef = AssetDatabase.acquireAsset(%levelAsset);
|
||||
}
|
||||
|
||||
%dlg.delete();
|
||||
%filename = %assetDef.levelFile;
|
||||
|
||||
if(! %ret)
|
||||
if(%filename $= "")
|
||||
{
|
||||
error("Selected Level Asset doesn't have a valid levelFile path!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// close the current editor, it will get cleaned up by MissionCleanup
|
||||
|
|
@ -498,6 +410,22 @@ function EditorOpenSceneAppend(%levelAsset)
|
|||
}
|
||||
}
|
||||
|
||||
function MakeSelectionASublevel()
|
||||
{
|
||||
/*%size = EWorldEditor.getSelectionSize();
|
||||
if ( %size == 0 )
|
||||
return;
|
||||
|
||||
//Make a new Scene object
|
||||
|
||||
for(%i=0; %i < %size; %i++)
|
||||
{
|
||||
|
||||
}
|
||||
%a = EWorldEditor.getSelectedObject(0);
|
||||
%b = EWorldEditor.getSelectedObject(1);*/
|
||||
}
|
||||
|
||||
function EditorExportToCollada()
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ function EditorGui::buildMenus(%this)
|
|||
%fileMenu.appendItem("New Level" TAB "" TAB "schedule( 1, 0, \"EditorNewLevel\" );");
|
||||
%fileMenu.appendItem("Open Level..." TAB %cmdCtrl SPC "O" TAB "schedule( 1, 0, \"EditorOpenMission\" );");
|
||||
%fileMenu.appendItem("Save Level" TAB %cmdCtrl SPC "S" TAB "EditorSaveMissionMenu();");
|
||||
%fileMenu.appendItem("Save Level As..." TAB "" TAB "EditorSaveMissionAs();");
|
||||
%fileMenu.appendItem("Save Level As..." TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"LevelAsset\", AssetBrowser.selectedModule, \"EditorSaveMissionAs\");");
|
||||
%fileMenu.appendItem("-");
|
||||
|
||||
if( $platform $= "windows" )
|
||||
|
|
@ -339,7 +339,7 @@ function EditorGui::buildMenus(%this)
|
|||
item[0] = "Network Graph" TAB "n" TAB "toggleNetGraph();";
|
||||
item[1] = "Profiler" TAB "ctrl F2" TAB "showMetrics(true);";
|
||||
item[2] = "Torque SimView" TAB "" TAB "tree();";
|
||||
item[3] = "Make Selected a Mesh" TAB "" TAB "makeSelectedAMesh();";
|
||||
item[3] = "Make Selected a Mesh" TAB "" TAB "AssetBrowser.setupCreateNewAsset(\"ShapeAsset\", AssetBrowser.selectedModule, \"makeSelectedAMesh\");";
|
||||
};
|
||||
%this.menuBar.insert(%toolsMenu);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue