mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-24 05:45:40 +00:00
Converts the ad-hoc design of the Material Editor to utilize the same inspector interface as most everything else does.
- Overhauls the material editor to simplify and streamline the logic behind it since the inspector does most of the work - Tweak a few order positions of materialdefinition fields to work better - Sets AO, Rough and Metal channel fields to use an enum type for human readability - Updates the MaterialPreview gui control to work with assetIds - MatEd now supports setting of parent material to inherit from - Creating a new material now can prompt selecting an existing material to inherit from - Can now edit the mapTo value of a material in the matEd - New standalone Composite Texture Editor window for convering AO, Roughness and Metalness maps in a material to an ORMMap - Can also star the creation of a composite texture via RMB context menu in AB on an image asset - Moved logic of CubemapEditor from MatEd to it's own stuff - Made ImageAsset fields now be more clear when they have nothing assigned, and also have a clear button to empty the field's value so it's consistent across the board - Reorganized the layout of the gui and image files for the MatEd to be easier to navigate - MaterialEditor now overlays the EditorGUI instead of being forcefully embedded in it, allowing easy editing of the MatEd Gui via the Gui editor
This commit is contained in:
parent
8e93753b15
commit
f3cad0d77e
173 changed files with 3713 additions and 6977 deletions
192
Templates/BaseGame/game/tools/gui/compositeTextureEditor.tscript
Normal file
192
Templates/BaseGame/game/tools/gui/compositeTextureEditor.tscript
Normal file
|
|
@ -0,0 +1,192 @@
|
|||
function CompositeTextureEditor::buildComposite(%this, %sourceTex0, %sourceTex1, %sourceTex2, %sourceTex3, %sourceChan0, %sourceChan1, %sourceChan2, %sourceChan3, %callback)
|
||||
{
|
||||
Canvas.pushDialog(%this);
|
||||
|
||||
CompTextureEd_RedChan.setChannelData(%sourceTex0, %sourceChan0);
|
||||
CompTextureEd_GreenChan.setChannelData(%sourceTex1, %sourceChan1);
|
||||
CompTextureEd_BlueChan.setChannelData(%sourceTex2, %sourceChan2);
|
||||
CompTextureEd_AlphaChan.setChannelData(%sourceTex3, %sourceChan3);
|
||||
|
||||
%this.callbackFunc = %callback;
|
||||
}
|
||||
|
||||
function CompositeTextureSlotContainer::onWake(%this)
|
||||
{
|
||||
%this-->InputMode.clear();
|
||||
%this-->InputMode.add("Raw Value");
|
||||
%this-->InputMode.add("Texture");
|
||||
%this-->InputMode.setSelected(1);
|
||||
%this-->InputMode.active = false;
|
||||
|
||||
%this-->sourceChannel.clear();
|
||||
%this-->sourceChannel.add("Red");
|
||||
%this-->sourceChannel.add("Green");
|
||||
%this-->sourceChannel.add("Blue");
|
||||
%this-->sourceChannel.add("Alpha");
|
||||
}
|
||||
|
||||
function CompositeTextureSlotContainer::setChannelData(%this, %sourceValue, %sourceChannel)
|
||||
{
|
||||
//for now, hard-force Texture mode
|
||||
%this-->InputMode.setSelected(1);
|
||||
|
||||
if(AssetDatabase.isDeclaredAsset(%sourceValue))
|
||||
{
|
||||
%this-->InputMode.setSelected(1);
|
||||
|
||||
%this-->bitmap.setBitmap(%sourceValue);
|
||||
|
||||
if(%sourceChannel $= "")
|
||||
%sourceChannel = "Red";
|
||||
|
||||
%this-->sourceChannel.setText(%sourceChannel);
|
||||
}
|
||||
/*else
|
||||
{
|
||||
%this-->InputMode.setSelected(0);
|
||||
|
||||
%value = 0;
|
||||
if(%sourceValue !$= "" && (isFloat(%sourceValue) || isFloat(%sourceValue)))
|
||||
{
|
||||
%value = %sourceValue;
|
||||
}
|
||||
|
||||
%this-->RawValueTxtEdit.setText(%value);
|
||||
%this-->RawValueSlider.setValue(%value);
|
||||
}*/
|
||||
}
|
||||
|
||||
function CompositeTextureSlotContainer::getChannelData(%this)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
function CompositeTextureChannelMode::onSelect(%this, %id, %text)
|
||||
{
|
||||
%isRawValueMode = %text $= "Raw Value";
|
||||
%this.getParent()-->RawValueContainer.setVisible(%isRawValueMode);
|
||||
%this.getParent()-->TextureContainer.setVisible(!%isRawValueMode);
|
||||
}
|
||||
|
||||
function CompositeTextureEditor::setSourceTex(%this, %assetId)
|
||||
{
|
||||
if($CompTexSourceChannel $= "")
|
||||
$CompTexSourceChannel = 0;
|
||||
|
||||
%channelContainer = CompositeTextureEditorWindow.getObject($CompTexSourceChannel);
|
||||
%channelContainer-->bitmap.setBitmap(%assetId);
|
||||
}
|
||||
|
||||
function CompositeTextureEditor::saveComposite(%this)
|
||||
{
|
||||
%cubemap = CubemapEditor.currentCubemap;
|
||||
|
||||
%aoMap = CompTextureEd_RedChan-->Bitmap.getBitmap();
|
||||
%roughMap = CompTextureEd_GreenChan-->Bitmap.getBitmap();
|
||||
%metalMap = CompTextureEd_BlueChan-->Bitmap.getBitmap();
|
||||
|
||||
if(%aoMap $= "ToolsModule:unknownImage_image")
|
||||
%aoMap = "";
|
||||
if(%roughMap $= "ToolsModule:unknownImage_image")
|
||||
%roughMap = "";
|
||||
if(%metalMap $= "ToolsModule:unknownImage_image")
|
||||
%metalMap = "";
|
||||
|
||||
if(%aoMap $= "" && %roughMap $= "" && %metalMap $= "")
|
||||
{
|
||||
toolsMessageBoxOK("Error", "Saving a composite map requires at least one channel slot to have source data!");
|
||||
return;
|
||||
}
|
||||
|
||||
AssetBrowser.setupCreateNewAsset("ImageAsset", AssetBrowser.selectedModule, "CompositeEditorDoSaveComposite");
|
||||
}
|
||||
|
||||
function CompositeEditorDoSaveComposite(%assetId)
|
||||
{
|
||||
%assetDef = AssetDatabase.acquireAsset(%assetId);
|
||||
if(!isObject(%assetDef))
|
||||
{
|
||||
toolsMessageBoxOK("Error", "We somehow failed to successfully create a new ImageAsset!");
|
||||
return;
|
||||
}
|
||||
|
||||
%targetFilePath = %assetDef.getImagePath();
|
||||
|
||||
%aoMapAsset = CompTextureEd_RedChan-->Bitmap.getBitmap();
|
||||
%roughMapAsset = CompTextureEd_GreenChan-->Bitmap.getBitmap();
|
||||
%metalMapAsset = CompTextureEd_BlueChan-->Bitmap.getBitmap();
|
||||
|
||||
|
||||
if(%aoMapAsset $= "ToolsModule:unknownImage_image")
|
||||
{
|
||||
%aoMap = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
%aoAssetDef = AssetDatabase.acquireAsset(%aoMapAsset);
|
||||
%aoMap = %aoAssetDef.getImagePath();
|
||||
}
|
||||
if(%roughMapAsset $= "ToolsModule:unknownImage_image")
|
||||
{
|
||||
%roughMap = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
%roughAssetDef = AssetDatabase.acquireAsset(%roughMapAsset);
|
||||
%roughMap = %roughAssetDef.getImagePath();
|
||||
}
|
||||
if(%metalMapAsset $= "ToolsModule:unknownImage_image")
|
||||
{
|
||||
%metalMap = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
%metalAssetDef = AssetDatabase.acquireAsset(%metalMapAsset);
|
||||
%metalMap = %roughAssetDef.getImagePath();
|
||||
}
|
||||
|
||||
if(%aoMap $= "" && %roughMap $= "" && %metalMap $= "")
|
||||
{
|
||||
toolsMessageBoxOK("Error", "Attempted to create a composite texture but all three source textures are blank or invalid!");
|
||||
return;
|
||||
}
|
||||
|
||||
%redChanSource = CompTextureEd_RedChan-->sourceChannel;
|
||||
%greenChanSource = CompTextureEd_GreenChan-->sourceChannel;
|
||||
%blueChanSource = CompTextureEd_BlueChan-->sourceChannel;
|
||||
|
||||
%aoChan = %redChanSource.findText(%redChanSource.getText());
|
||||
%aoChan = %aoChan == -1 ? 0 : %aoChan;
|
||||
|
||||
%roughChan = %greenChanSource.findText(%greenChanSource.getText());
|
||||
%roughChan = %roughChan == -1 ? 1 : %roughChan;
|
||||
|
||||
%metalChan = %blueChanSource.findText(%blueChanSource.getText());
|
||||
%metalChan = %metalChan == -1 ? 2 : %metalChan;
|
||||
|
||||
%channelKey = %aoChan SPC %roughChan SPC %metalChan SPC 3;
|
||||
error("Storing: \"" @ %aoMap @"\" \""@ %roughMap @"\" \""@ %metalMap @"\" \""@ %channelKey @"\" \""@ %targetFilePath @"\"");
|
||||
saveCompositeTexture(%aoMap, %roughMap, %metalMap, "", %channelKey, %targetFilePath);
|
||||
|
||||
%assetDef.refreshAsset();
|
||||
|
||||
%command = CompositeTextureEditor.callbackFunc @ "(\"" @ %assetId @ "\");";
|
||||
if(CompositeTextureEditor.callbackFunc !$= "")
|
||||
{
|
||||
eval(%command);
|
||||
CompositeTextureEditor.callbackFunc = "";
|
||||
}
|
||||
|
||||
Canvas.popDialog(CompositeTextureEditor);
|
||||
}
|
||||
|
||||
function CompositeTextureRawValueEdit::onReturn(%this)
|
||||
{
|
||||
%this.getParent()-->RawValueSlider.setValue(%this.getText());
|
||||
}
|
||||
|
||||
function CompositeTextureRawValueSlider::onDragComplete(%this)
|
||||
{
|
||||
%value = %this.getValue();
|
||||
%this.getParent()-->RawValueTxtEdit.setText(%value);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue