Merge branch 'ExpandedAssetsPR' of https://github.com/Areloch/Torque3D into development

This commit is contained in:
Areloch 2019-05-04 16:08:11 -05:00
commit ace58e2c28
73 changed files with 4468 additions and 1876 deletions

View file

@ -243,7 +243,7 @@ function ChooseLevelDlg::addLevelAsset( %this, %levelAsset )
%LevelInfoObject.delete();
}*/
%levelName = %levelAsset.friendlyName;
%levelName = %levelAsset.LevelName;
%levelDesc = %levelAsset.description;
%levelPreview = %levelAsset.levelPreviewImage;

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -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>

View file

@ -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";
};

View file

@ -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";

View file

@ -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";

View file

@ -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 )

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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 )
{
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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();
}
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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);
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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))

View file

@ -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/";

View file

@ -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();
}

View file

@ -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)

View file

@ -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);

View file

@ -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;

View file

@ -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();
}

View file

@ -0,0 +1,17 @@
#pragma once
#include "console/engineAPI.h"
class @
{
DECLARE_STATIC_CLASS(@);
private:
protected:
static @* smInstance;
public:
@();
static @* instance() { return smInstance; }
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 805 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

View file

@ -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)
{

View file

@ -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();
}

View file

@ -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);
}

View file

@ -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();

View file

@ -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);

View file

@ -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 )

View file

@ -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()
{

View file

@ -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);