Torque3D/Templates/BaseGame/game/tools/gui/materialSelector.ed.gui
Areloch 5b289bce5e Shifts the tools messageboxes to be distinct from any messageboxes in the main game
Reorged the canvas handling of gamepad inputs for the axis and triggers to use the SI_ versions in the right spots
Fixed issue where pause menu would be hidden and not display again
Made the pause menu active from the gamepad start button rather than back
2020-07-24 00:40:03 -05:00

2004 lines
66 KiB
Plaintext

new GuiControl(MaterialSelectorOverlay, EditorGuiGroup) {
canSaveDynamicFields = "0";
Profile = "GuiOverlayProfile";
Enabled = "1";
isContainer = "1";
HorizSizing = "right";
VertSizing = "bottom";
Position = "0 0";
Extent = "1024 768";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
new GuiWindowCtrl(MaterialSelector){
profile = "ToolsGuiWindowProfile";
HorizSizing = "center";
VertSizing = "center";
resizeWidth = "1";
resizeHeight = "1";
canClose = "1";
canMinimize = "0";
canMaximize = "0";
position = "72 98";
extent =" 766 550";
MinExtent = "383 274";
text = "Material Selector";
closeCommand = "MaterialSelector::hideDialog();";
EdgeSnap = "0";
canCollapse = "0";
visible = "0";
new GuiContainer(){
isContainer = "1";
HorizSizing = "right";
VertSizing = "bottom";
Position = "4 22";
Extent = "120 31";
Profile = "inspectorStyleRolloutDarkProfile";
};
new GuiTextCtrl(){
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "10 23";
extent = "30 16";
text = "Filters";
};
new GuiContainer(){
profile = "ToolsGuiDefaultProfile";
Position = "4 39";
Extent = "120 507";
HorizSizing = "right";
VertSizing = "height";
isContainer = "1";
new GuiScrollCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "1";
Profile = "GuiEditorScrollProfile";
HorizSizing = "width";
VertSizing = "height";
Position = "0 0";
Extent = "128 355";
MinExtent = "8 8";
canSave = "1";
isDecoy = "0";
Visible = "1";
tooltipprofile = "ToolsGuiDefaultProfile";
hovertime = "1000";
Docking = "Client";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
willFirstRespond = "1";
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
lockHorizScroll = true;
lockVertScroll = "false";
constantThumbHeight = "0";
childMargin = "0 0";
mouseWheelScrollSpeed = "-1";
new GuiDynamicCtrlArrayControl() {
canSaveDynamicFields = "0";
internalName = "filterArray";
Enabled = "1";
isContainer = "1";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "width";
VertSizing = "bottom";
Position = "18 0";
Extent = "128 195";
MinExtent = "8 8";
dynamicSize = "1";
rowSpacing = "2";
colSize = "128";
rowSize = "18";
};
};
};
new GuiContainer(){
Profile = "inspectorStyleRolloutDarkProfile";
Position = "128 22";
Extent = "480 31";
HorizSizing = "width";
VertSizing = "bottom";
isContainer = "1";
};
new GuiTextCtrl(){
profile = "ToolsGuiDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "133 23";
extent = "53 16";
text = "Materials";
};
// Create New Material
new GuiBitmapButtonCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "594 24";
Extent = "15 15";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "MaterialSelector.createNewMaterial();";
hovertime = "1000";
tooltip = "Create New Unmapped Material";
bitmap = "tools/gui/images/new";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
};
new GuiBitmapButtonCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "578 24";
Extent = "15 15";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "MaterialSelector.showDeleteDialog();";
hovertime = "1000";
tooltip = "Delete Material";
bitmap = "tools/gui/images/delete";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
};
new GuiContainer(){ // Materials
profile = "ToolsGuiDefaultProfile";
Position = "128 39";
Extent = "480 507";
HorizSizing = "width";
VertSizing = "height";
isContainer = "1";
new GuiScrollCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "1";
Profile = "GuiEditorScrollProfile";
HorizSizing = "width";
VertSizing = "height";
Position = "0 0";
Extent = "480 507";
MinExtent = "8 8";
canSave = "1";
isDecoy = "0";
Visible = "1";
tooltipprofile = "ToolsGuiDefaultProfile";
hovertime = "1000";
Docking = "Client";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
willFirstRespond = "1";
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
lockHorizScroll = "true";
lockVertScroll = "false";
constantThumbHeight = "0";
childMargin = "0 0";
mouseWheelScrollSpeed = "-1";
new GuiStackControl(){
HorizSizing = "width";
VertSizing = "bottom";
Position = "0 0";
Extent = "128 0";
changeChildPosition = 0;
changeChildSizeToFit = 1;
new GuiControl(){
Extent = "0 4";
};
new GuiDynamicCtrlArrayControl() {
canSaveDynamicFields = "0";
internalName = "materialSelection";
Enabled = "1";
isContainer = "1";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "width";
VertSizing = "bottom";
Position = "3 0";
Extent = "128 0";
MinExtent = "8 8";
dynamicSize = "1";
autoCellSize = "1";
rowSpacing = "2";
colSpacing = "2";
margin = "2";
};
};
};
new GuiContainer(){
internalName = "materialPreviewControlContainer";
profile = "ToolsGuiDefaultProfile";
Position = "0 0";
Extent = "480 20";
HorizSizing = "width";
VertSizing = "height";
isContainer = "1";
Docking = "Bottom";
new GuiTextCtrl(){
profile = "ToolsGuiDefaultProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 2";
extent = "100 16";
text = "Thumbnails per Page:";
};
new GuiPopupMenuCtrlEx(){
internalName = "materialPreviewCountPopup";
Profile = "ToolsGuiPopUpMenuProfile";
Position = "104 2";
Extent = "40 18";
HorizSizing = "right";
VertSizing = "bottom";
Command = "MaterialSelector.thumbnailCountUpdate();";
reverseTextList = "0";
Text = "16";
};
new GuiStackControl(){
internalName = "materialPreviewButtonStack";
HorizSizing = "left";
VertSizing = "bottom";
Position = "480 2";
Extent = "0 16";
dynamic = 1;
dynamicPos = 1;
stackingType = "Horizontal";
changeChildPosition = 1;
changeChildSizeToFit = 1;
padding = 2;
new GuiButtonCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "ToolsGuiButtonProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = "0 0";
Extent = "20 16";
MinExtent = "8 8";
canSave = "1";
isDecoy = "0";
Visible = "1";
Command = "MaterialSelector::firstPage();";
tooltipprofile = "ToolsGuiToolTipProfile";
tooltip = "First";
hovertime = "1000";
text = "|<";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "1";
};
new GuiButtonCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "ToolsGuiButtonProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = "0 0";
Extent = "20 16";
MinExtent = "8 8";
canSave = "1";
isDecoy = "0";
Visible = "1";
Command = "MaterialSelector::previousPage();";
tooltipprofile = "ToolsGuiToolTipProfile";
tooltip = "Previous";
hovertime = "1000";
text = "<";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "1";
};
new GuiStackControl(){
internalName = "materialPreviewPagesStack";
HorizSizing = "right";
VertSizing = "bottom";
Position = "0 0";
Extent = "0 16";
dynamic = 1;
stackingType = "Horizontal";
changeChildPosition = 1;
changeChildSizeToFit = 1;
padding = 2;
};
new GuiButtonCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "ToolsGuiButtonProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = "0 0";
Extent = "20 16";
MinExtent = "8 8";
canSave = "1";
isDecoy = "0";
Visible = "1";
Command = "MaterialSelector::nextPage();";
tooltipprofile = "ToolsGuiToolTipProfile";
tooltip = "Next";
hovertime = "1000";
text = ">";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "1";
};
new GuiButtonCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "ToolsGuiButtonProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = "0 0";
Extent = "20 16";
MinExtent = "8 8";
canSave = "1";
isDecoy = "0";
Visible = "1";
Command = "MaterialSelector::lastPage();";
tooltipprofile = "ToolsGuiToolTipProfile";
tooltip = "Last";
hovertime = "1000";
text = ">|";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "1";
};
};
};
};
new GuiContainer(){
Profile = "inspectorStyleRolloutDarkProfile";
Position = "612 206";
Extent = "150 31";
HorizSizing = "left";
VertSizing = "bottom";
isContainer = "1";
};
new GuiTextCtrl(){
profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "618 207";
extent = "84 16";
text = "Material Tags";
};
new GuiContainer(){ // Filter Selection
profile = "ToolsGuiDefaultProfile";
Position = "612 223";
Extent = "150 295";
HorizSizing = "left";
VertSizing = "height";
isContainer = "1";
new GuiScrollCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "1";
Profile = "GuiEditorScrollProfile";
HorizSizing = "width";
VertSizing = "height";
Position = "0 0";
Extent = "128 195";
MinExtent = "8 8";
canSave = "1";
isDecoy = "0";
Visible = "1";
tooltipprofile = "ToolsGuiDefaultProfile";
hovertime = "1000";
Docking = "Client";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
willFirstRespond = "1";
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
lockHorizScroll = "true";
lockVertScroll = "false";
constantThumbHeight = "0";
childMargin = "0 0";
mouseWheelScrollSpeed = "-1";
new GuiDynamicCtrlArrayControl() {
canSaveDynamicFields = "0";
internalName = "materialCategories";
Enabled = "1";
isContainer = "1";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "width";
VertSizing = "bottom";
Position = "0 0";
Extent = "128 195";
MinExtent = "8 8";
dynamicSize = "1";
rowSpacing = "2";
colSize = "128";
rowSize = "18";
};
};
};
new GuiContainer(){
Profile = "inspectorStyleRolloutDarkProfile";
Position = "612 22";
Extent = "150 167";
HorizSizing = "left";
VertSizing = "bottom";
isContainer = "1";
new GuiBitmapCtrl(){
internalName = "previewSelection";
HorizSizing = "left";
VertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
position = "1 18";
extent = "148 148";
bitmap = "";
};
};
new GuiTextCtrl(){
profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "618 23";
extent = "84 16";
text = "Diffuse Preview";
};
new GuiBitmapCtrl(){
HorizSizing = "left";
VertSizing = "bottom";
profile = "ToolsGuiDefaultProfile";
position = "612 39";
extent = "150 150";
bitmap = "tools/worldEditor/images/terrainpainter/terrain-painter-border-large";
visible = false;
};
new GuiTextCtrl(){
internalName = "previewSelectionText";
HorizSizing = "left";
VertSizing = "bottom";
profile = "ToolsGuiTextProfile";
position = "613 189";
extent = "149 16";
text = "";
};
new GuiButtonCtrl(){
internalName = "SelectButton";
HorizSizing = "left";
VertSizing = "top";
profile = "ToolsGuiButtonProfile";
position = "612 522";
extent = "94 24";
text = "Select";
command = "MaterialSelector.selectMaterial( MaterialSelector.selectedMaterial );";
};
new GuiButtonCtrl(){
HorizSizing = "left";
VertSizing = "top";
profile = "ToolsGuiButtonProfile";
position = "710 522";
extent = "52 24";
text = "Cancel";
command = "MaterialSelector.hideDialog();";
};
};
new GuiWindowCtrl(MaterialSelector_addFilterWindow) {
canSaveDynamicFields = "0";
isContainer = "1";
Profile = "ToolsGuiWindowProfile";
HorizSizing = "center";
VertSizing = "center";
position = "362 333";
Extent = "272 99";
MinExtent = "48 92";
canSave = "1";
Visible = "0";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
resizeWidth = "1";
resizeHeight = "1";
canMove = "1";
canClose = "0";
canMinimize = "0";
canMaximize = "0";
minSize = "50 50";
EdgeSnap = "1";
text = "Create New Tag";
new GuiTextEditCtrl() {
canSaveDynamicFields = "0";
internalName = "tagName";
isContainer = "0";
Profile = "ToolsGuiTextEditProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "64 35";
Extent = "196 18";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
maxLength = "1024";
historySize = "0";
password = "0";
tabComplete = "0";
sinkAllKeyEvents = "0";
passwordMask = "*";
};
new GuiTextCtrl() {
canSaveDynamicFields = "0";
isContainer = "0";
Profile = "ToolsGuiTextProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "12 35";
Extent = "52 16";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
Margin = "0 0 0 0";
Padding = "0 0 0 0";
AnchorTop = "1";
AnchorBottom = "0";
AnchorLeft = "1";
AnchorRight = "0";
maxLength = "1024";
text = "Tag Name";
};
new GuiButtonCtrl() {
canSaveDynamicFields = "0";
isContainer = "0";
Profile = "ToolsGuiButtonProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "64 68";
Extent = "126 22";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
text = "Create";
Command = "MaterialSelector.createFilter( MaterialSelector_addFilterWindow-->tagName.getText() );MaterialSelector_addFilterWindow.setVisible(0);";
};
new GuiButtonCtrl() {
canSaveDynamicFields = "0";
isContainer = "0";
Profile = "ToolsGuiButtonProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "196 68";
Extent = "64 22";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
text = "Cancel";
Command = "MaterialSelector_addFilterWindow.setVisible(0);";
};
};
};
$Pref::MaterialSelector::CurrentStaticFilter = "MaterialFilterAllArray";
$Pref::MaterialSelector::CurrentFilter = ""; //ALL
$Pref::MaterialSelector::ThumbnailCountIndex = 0;
new PersistenceManager(MaterialSelectorPerMan);
new ArrayObject(UnlistedMaterials);
UnlistedMaterials.add( "unlistedMaterials", WarningMaterial );
UnlistedMaterials.add( "unlistedMaterials", materialEd_previewMaterial );
UnlistedMaterials.add( "unlistedMaterials", notDirtyMaterial );
UnlistedMaterials.add( "unlistedMaterials", materialEd_cubemapEd_cubeMapPreview );
UnlistedMaterials.add( "unlistedMaterials", matEdCubeMapPreviewMat );
UnlistedMaterials.add( "unlistedMaterials", materialEd_justAlphaMaterial );
UnlistedMaterials.add( "unlistedMaterials", materialEd_justAlphaShader );
function MaterialSelector::selectMaterial( %this, %material )
{
%name = "";
if( MaterialSelector.terrainMaterials )
{
%name = %material;
%material = TerrainMaterialSet.findObjectByInternalName( %material );
}
else
{
%name = %material.getName();
}
// The callback function should be ready to intake the returned material
//eval("materialEd_previewMaterial." @ %propertyField @ " = " @ %value @ ";");
if( MaterialSelector.returnType $= "name" )
eval( "" @ MaterialSelector.selectCallback @ "(" @ %name @ ");");
else if( MaterialSelector.returnType $= "index" )
{
%index = -1;
if( MaterialSelector.terrainMaterials )
{
// Obtain the index into the terrain's material list
%mats = ETerrainEditor.getMaterials();
for(%i = 0; %i < getRecordCount( %mats ); %i++)
{
%matInternalName = getRecord( %mats, %i );
if( %matInternalName $= %name )
{
%index = %i;
break;
}
}
}
else
{
// Obtain the index into the material set
for(%i = 0; %i < materialSet.getCount(); %i++)
{
%obj = materialSet.getObject(%i);
if( %obj.getName() $= %name )
{
%index = %i;
break;
}
}
}
eval( "" @ MaterialSelector.selectCallback @ "(" @ %index @ ");");
}
else
eval( "" @ MaterialSelector.selectCallback @ "(" @ %material.getId() @ ");");
MaterialSelector.hideDialog();
}
function MaterialSelector::showDialog( %this, %selectCallback, %returnType)
{
if( MaterialSelector.isVisible() )
return;
%this.showDialogBase(%selectCallback, %returnType, false);
}
function MaterialSelector::showTerrainDialog( %this, %selectCallback, %returnType)
{
%this.showDialogBase(%selectCallback, %returnType, true);
}
function MaterialSelector::showDialogBase( %this, %selectCallback, %returnType, %useTerrainMaterials)
{
// Set the select callback
MaterialSelector.selectCallback = %selectCallback;
MaterialSelector.returnType = %returnType;
MaterialSelector.currentStaticFilter = $Pref::MaterialSelector::CurrentStaticFilter;
MaterialSelector.currentFilter = $Pref::MaterialSelector::CurrentFilter;
MaterialSelector.terrainMaterials = %useTerrainMaterials;
MaterialSelector-->materialPreviewCountPopup.clear();
MaterialSelector-->materialPreviewCountPopup.add( "10", 0 );
MaterialSelector-->materialPreviewCountPopup.add( "15", 1 );
MaterialSelector-->materialPreviewCountPopup.add( "25", 2 );
MaterialSelector-->materialPreviewCountPopup.add( "50", 3 );
MaterialSelector-->materialPreviewCountPopup.add( "75", 4 );
MaterialSelector-->materialPreviewCountPopup.add( "100", 5 );
MaterialSelector-->materialPreviewCountPopup.setSelected( $Pref::MaterialSelector::ThumbnailCountIndex );
Canvas.pushDialog(MaterialSelectorOverlay);
MaterialSelector.setVisible(1);
MaterialSelector.buildStaticFilters();
MaterialSelector.selectedMaterial = "";
MaterialSelector.loadMaterialFilters();
}
function MaterialSelector::hideDialog( %this )
{
MaterialSelector.breakdown();
MaterialSelector.setVisible(0);
Canvas.popDialog(MaterialSelectorOverlay);
}
function MaterialSelector::breakdown( %this )
{
$Pref::MaterialSelector::CurrentStaticFilter = MaterialSelector.currentStaticFilter;
$Pref::MaterialSelector::CurrentFilter = MaterialSelector.currentFilter;
MaterialSelector-->filterArray.deleteAllObjects();
MaterialSelector-->materialSelection.deleteAllObjects();
MatEdPreviewArray.delete();
MaterialSelector-->materialCategories.deleteAllObjects();
MaterialFilterAllArray.delete();
MaterialFilterMappedArray.delete();
MaterialFilterUnmappedArray.delete();
}
function MaterialSelector::buildStaticFilters( %this )
{
// if you want to add any more containers to staticFilterObjects, here's
// where to do it
%staticFilterContainer = new GuiControl (){
new GuiContainer(){
profile = "ToolsGuiDefaultProfile";
Position = "0 0";
Extent = "128 18";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
parentGroup = %filterArray;
new GuiContainer(){
profile = "inspectorStyleRolloutDarkProfile";
Position = "-1 0";
Extent = "128 32";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
};
new GuiTextCtrl(){
Profile = "EditorTextProfile";
position = "5 0";
Extent = "118 18";
text = "Types";
};
};
new GuiContainer(){ // All
profile = "ToolsGuiDefaultProfile";
Position = "415 191";
Extent = "128 18";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
parentGroup = %filterArray;
new GuiCheckBoxCtrl(MaterialFilterAllArrayCheckbox){
Profile = "ToolsGuiCheckBoxListProfile";
position = "5 2";
Extent = "118 18";
text = "All";
Command = "MaterialSelector.switchStaticFilters(\"MaterialFilterAllArray\");";
};
};
new GuiContainer(){ // Mapped
profile = "ToolsGuiDefaultProfile";
Position = "415 191";
Extent = "128 18";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
parentGroup = %filterArray;
new GuiCheckBoxCtrl(MaterialFilterMappedArrayCheckbox){
Profile = "ToolsGuiCheckBoxListProfile";
position = "5 2";
Extent = "118 18";
text = "Mapped";
Command = "MaterialSelector.switchStaticFilters(\"MaterialFilterMappedArray\");";
};
};
new GuiContainer(){ // Unmapped
profile = "ToolsGuiDefaultProfile";
Position = "415 191";
Extent = "128 18";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
parentGroup = %filterArray;
new GuiCheckBoxCtrl(MaterialFilterUnmappedArrayCheckbox){
Profile = "ToolsGuiCheckBoxListProfile";
position = "5 2";
Extent = "118 18";
text = "Unmapped";
Command = "MaterialSelector.switchStaticFilters(\"MaterialFilterUnmappedArray\");";
};
};
new GuiContainer(){
profile = "ToolsGuiDefaultProfile";
Position = "0 0";
Extent = "128 18";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
parentGroup = %filterArray;
new GuiContainer(){
profile = "inspectorStyleRolloutDarkProfile";
Position = "-1 0";
Extent = "128 32";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
};
new GuiTextCtrl(){
Profile = "EditorTextProfile";
position = "5 0";
Extent = "118 18";
text = "Tags";
};
// Create New Tag
new GuiBitmapButtonCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "105 2";
Extent = "15 15";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "MaterialSelector_addFilterWindow.setVisible(1); MaterialSelectorOverlay.pushToBack(MaterialSelector_addFilterWindow);";
hovertime = "1000";
tooltip = "Create New Tag";
bitmap = "tools/gui/images/new";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
};
new GuiBitmapButtonCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "ToolsGuiDefaultProfile";
HorizSizing = "left";
VertSizing = "bottom";
position = "89 2";
Extent = "13 13";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
Command = "MaterialSelector.clearMaterialFilters();";
hovertime = "1000";
tooltip = "Clear Selected Tag";
bitmap = "tools/gui/images/clear-btn";
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "0";
};
};
};
%i = %staticFilterContainer.getCount();
for( ; %i != 0; %i--)
MaterialSelector-->filterArray.addGuiControl(%staticFilterContainer.getObject(0));
MaterialSelector.staticFilterObjects = MaterialSelector-->filterArray.getCount();
%staticFilterContainer.delete();
// Create our category array used in the selector, this code should be taken out
// in order to make the material selector agnostic
new ArrayObject(MaterialFilterAllArray);
new ArrayObject(MaterialFilterMappedArray);
new ArrayObject(MaterialFilterUnmappedArray);
%mats = "";
%count = 0;
if( MaterialSelector.terrainMaterials )
{
%mats = ETerrainEditor.getTerrainBlocksMaterialList();
%count = getRecordCount( %mats );
}
else
{
%count = materialSet.getCount();
}
for(%i = 0; %i < %count; %i++)
{
// Process terrain materials
if( MaterialSelector.terrainMaterials )
{
%matInternalName = getRecord( %mats, %i );
%material = TerrainMaterialSet.findObjectByInternalName( %matInternalName );
// Is there no material info for this slot?
if ( !isObject( %material ) )
continue;
// Add to the appropriate filters
MaterialFilterMappedArray.add( "", %material );
MaterialFilterAllArray.add( "", %material );
continue;
}
// Process regular materials here
%material = materialSet.getObject(%i);
for( %k = 0; %k < UnlistedMaterials.count(); %k++ )
{
%unlistedFound = 0;
if( UnlistedMaterials.getValue(%k) $= %material.name )
{
%unlistedFound = 1;
break;
}
}
if( %unlistedFound )
continue;
if( %material.mapTo $= "" || %material.mapTo $= "unmapped_mat" )
{
MaterialFilterUnmappedArray.add( "", %material.name );
//running through the existing tag names
for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
MaterialFilterUnmappedArray.add( %material.getFieldValue("materialTag" @ %j), %material.name );
}
else
{
MaterialFilterMappedArray.add( "", %material.name );
for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
MaterialFilterMappedArray.add( %material.getFieldValue("materialTag" @ %j), %material.name );
}
MaterialFilterAllArray.add( "", %material.name );
for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
MaterialFilterAllArray.add( %material.getFieldValue("materialTag" @ %j), %material.name );
}
MaterialFilterAllArrayCheckbox.setText("All ( " @ MaterialFilterAllArray.count() @" ) ");
MaterialFilterMappedArrayCheckbox.setText("Mapped ( " @ MaterialFilterMappedArray.count() @" ) ");
MaterialFilterUnmappedArrayCheckbox.setText("Unmapped ( " @ MaterialFilterUnmappedArray.count() @" ) ");
}
function MaterialSelector::preloadFilter( %this )
{
%selectedFilter = "";
for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount(); %i++ )
{
if( MaterialSelector-->filterArray.getObject(%i).getObject(0).getValue() == 1 )
{
if( %selectedFilter $= "" )
%selectedFilter = MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
else
%selectedFilter = %selectedFilter @ " " @ MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
}
}
MaterialSelector.loadFilter( %selectedFilter );
}
function MaterialSelector::loadFilter( %this, %selectedFilter, %staticFilter )
{
// manage schedule array properly
if(!isObject(MatEdScheduleArray))
new ArrayObject(MatEdScheduleArray);
// if we select another list... delete all schedules that were created by
// previous load
for( %i = 0; %i < MatEdScheduleArray.count(); %i++ )
cancel(MatEdScheduleArray.getKey(%i));
// we have to empty out the list; so when we create new schedules, these dont linger
MatEdScheduleArray.empty();
// manage preview array
if(!isObject(MatEdPreviewArray))
new ArrayObject(MatEdPreviewArray);
// we have to empty out the list; so when we create new guicontrols, these dont linger
MatEdPreviewArray.empty();
MaterialSelector-->materialSelection.deleteAllObjects();
MaterialSelector-->materialPreviewPagesStack.deleteAllObjects();
// changed to accomadate tagging. dig through the array for each tag name,
// call unique value, sort, and we have a perfect set of materials
if( %staticFilter !$= "" )
MaterialSelector.currentStaticFilter = %staticFilter;
MaterialSelector.currentFilter = %selectedFilter;
%filteredObjectsArray = new ArrayObject();
%previewsPerPage = MaterialSelector-->materialPreviewCountPopup.getTextById( MaterialSelector-->materialPreviewCountPopup.getSelected() );
%tagCount = getWordCount( MaterialSelector.currentFilter );
if( %tagCount != 0 )
{
for( %j = 0; %j < %tagCount; %j++ )
{
for( %i = 0; %i < MaterialSelector.currentStaticFilter.count(); %i++ )
{
%currentTag = getWord( MaterialSelector.currentFilter, %j );
if( MaterialSelector.currentStaticFilter.getKey(%i) $= %currentTag)
%filteredObjectsArray.add( MaterialSelector.currentStaticFilter.getKey(%i), MaterialSelector.currentStaticFilter.getValue(%i) );
}
}
%filteredObjectsArray.uniqueValue();
%filteredObjectsArray.sortd();
MaterialSelector.totalPages = mCeil( %filteredObjectsArray.count() / %previewsPerPage );
//Can we maintain the current preview page, or should we go to page 1?
if( (MaterialSelector.currentPreviewPage * %previewsPerPage) >= %filteredObjectsArray.count() )
MaterialSelector.currentPreviewPage = 0;
// Build out the pages buttons
MaterialSelector.buildPagesButtons( MaterialSelector.currentPreviewPage, MaterialSelector.totalPages );
%previewCount = %previewsPerPage;
%possiblePreviewCount = %filteredObjectsArray.count() - MaterialSelector.currentPreviewPage * %previewsPerPage;
if( %possiblePreviewCount < %previewCount )
%previewCount = %possiblePreviewCount;
%start = MaterialSelector.currentPreviewPage * %previewsPerPage;
for( %i = %start; %i < %start + %previewCount; %i++ )
MaterialSelector.buildPreviewArray( %filteredObjectsArray.getValue(%i) );
%filteredObjectsArray.delete();
}
else
{
MaterialSelector.currentStaticFilter.sortd();
// Rebuild the static filter list without tagged materials
%noTagArray = new ArrayObject();
for( %i = 0; %i < MaterialSelector.currentStaticFilter.count(); %i++ )
{
if( MaterialSelector.currentStaticFilter.getKey(%i) !$= "")
continue;
%material = MaterialSelector.currentStaticFilter.getValue(%i);
// CustomMaterials are not available for selection
if ( !isObject( %material ) || %material.isMemberOfClass( "CustomMaterial" ) )
continue;
%noTagArray.add( "", %material );
}
MaterialSelector.totalPages = mCeil( %noTagArray.count() / %previewsPerPage );
//Can we maintain the current preview page, or should we go to page 1?
if( (MaterialSelector.currentPreviewPage * %previewsPerPage) >= %noTagArray.count() )
MaterialSelector.currentPreviewPage = 0;
// Build out the pages buttons
MaterialSelector.buildPagesButtons( MaterialSelector.currentPreviewPage, MaterialSelector.totalPages );
%previewCount = %previewsPerPage;
%possiblePreviewCount = %noTagArray.count() - MaterialSelector.currentPreviewPage * %previewsPerPage;
if( %possiblePreviewCount < %previewCount )
%previewCount = %possiblePreviewCount;
%start = MaterialSelector.currentPreviewPage * %previewsPerPage;
for( %i = %start; %i < %start + %previewCount; %i++ )
{
MaterialSelector.buildPreviewArray( %noTagArray.getValue(%i) );
}
}
MaterialSelector.loadImages( 0 );
}
function MaterialSelector::buildPreviewArray( %this, %material )
{
%matName = "";
// CustomMaterials are not available for selection
if ( !isObject( %material ) || %material.isMemberOfClass( "CustomMaterial" ) )
return;
if( %material.isMemberOfClass("TerrainMaterial") )
{
%matName = %material.getInternalName();
if( %material.diffuseMap $= "")
%previewImage = "core/images/warnmat";
else
%previewImage = %material.diffuseMap;
}
else if( %material.toneMap[0] $= "" && %material.diffuseMap[0] $= "" && !isObject(%material.cubemap) )
{
%matName = %material.name;
%previewImage = "core/images/warnmat";
}
else
{
%matName = %material.name;
if( %material.toneMap[0] !$= "" )
%previewImage = %material.toneMap[0];
else if( %material.diffuseMap[0] !$= "" )
%previewImage = %material.diffuseMap[0];
else if( %material.cubemap.cubeFace[0] !$= "" )
%previewImage = %material.cubemap.cubeFace[0];
//%previewImage = MaterialEditorGui.searchForTexture( %material, %previewImage );
// were going to use a couple of string commands in order to properly
// find out what the img src path is
// **NEW** this needs to be updated with the above, but has some timing issues
%materialDiffuse = %previewImage;
%materialPath = %material.getFilename();
if( strchr( %materialDiffuse, "/") $= "" )
{
%k = 0;
while( strpos( %materialPath, "/", %k ) != -1 )
{
%foo = strpos( %materialPath, "/", %k );
%k = %foo + 1;
}
%foobar = getSubStr( %materialPath , %k , 99 );
%previewImage = strreplace( %materialPath, %foobar, %previewImage );
}
else
%previewImage = strreplace( %materialPath, %materialPath, %previewImage );
}
// it may seem goofy why the checkbox can't be instanciated inside the container
// reason being its because we need to store the checkbox ctrl in order to make changes
// on it later in the function.
%container = new GuiControl(){
profile = "ToolsGuiDefaultProfile";
Position = "0 0";
Extent = "74 87";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
new GuiTextCtrl(){
position = "7 71";
profile = "ToolsGuiTextCenterProfile";
extent = "64 16";
text = %matName;
};
};
%previewButton = new GuiBitmapButtonCtrl(){
internalName = %matName;
HorizSizing = "right";
VertSizing = "bottom";
profile = "ToolsGuiButtonProfile";
position = "7 4";
extent = "64 64";
buttonType = "PushButton";
bitmap = "";
Command = "";
text = "Loading...";
useStates = false;
new GuiBitmapButtonCtrl(){
HorizSizing = "right";
VertSizing = "bottom";
profile = "ToolsGuiButtonProfile";
position = "0 0";
extent = "64 64";
Variable = "";
buttonType = "toggleButton";
bitmap = "tools/materialEditor/gui/cubemapBtnBorder";
groupNum = "0";
text = "";
};
};
%previewBorder = new GuiButtonCtrl(){
internalName = %matName@"Border";
HorizSizing = "right";
VertSizing = "bottom";
profile = "ToolsGuiThumbHighlightButtonProfile";
position = "3 0";
extent = "72 88";
Variable = "";
buttonType = "toggleButton";
tooltip = %matName;
Command = "MaterialSelector.updateSelection( $ThisControl.getParent().getObject(1).internalName, $ThisControl.getParent().getObject(1).bitmap );";
groupNum = "0";
text = "";
};
%container.add(%previewButton);
%container.add(%previewBorder);
// add to the gui control array
MaterialSelector-->materialSelection.add(%container);
// add to the array object for reference later
MatEdPreviewArray.add( %previewButton, %previewImage );
}
function MaterialSelector::loadImages( %this, %materialNum )
{
// this will save us from spinning our wheels in case we don't exist
if( !MaterialSelector.visible )
return;
// this schedule is here to dynamically load images
%previewButton = MatEdPreviewArray.getKey(%materialNum);
%previewImage = MatEdPreviewArray.getValue(%materialNum);
%previewButton.setBitmap(%previewImage);
%previewButton.setText("");
%materialNum++;
if( %materialNum < MatEdPreviewArray.count() )
{
%tempSchedule = %this.schedule(64, "loadImages", %materialNum);
MatEdScheduleArray.add( %tempSchedule, %materialNum );
}
}
function MaterialSelector::clearMaterialFilters( %this )
{
for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount(); %i++ )
MaterialSelector-->filterArray.getObject(%i).getObject(0).setStateOn(0);
MaterialSelector.loadFilter( "", "" );
}
function MaterialSelector::loadMaterialFilters( %this )
{
%filteredTypesArray = new ArrayObject();
%filteredTypesArray.duplicate( MaterialFilterAllArray );
%filteredTypesArray.uniqueKey();
// sort the the keys before we do anything
%filteredTypesArray.sortkd();
eval( MaterialSelector.currentStaticFilter @ "Checkbox.setStateOn(1);" );
// it may seem goofy why the checkbox can't be instanciated inside the container
// reason being its because we need to store the checkbox ctrl in order to make changes
// on it later in the function.
%selectedFilter = "";
for( %i = 0; %i < %filteredTypesArray.count(); %i++ )
{
%filter = %filteredTypesArray.getKey(%i);
if(%filter $= "")
continue;
%container = new GuiControl(){
profile = "ToolsGuiDefaultProfile";
Position = "0 0";
Extent = "128 18";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
};
%checkbox = new GuiCheckBoxCtrl(){
Profile = "ToolsGuiCheckBoxListProfile";
position = "5 1";
Extent = "118 18";
Command = "";
groupNum = "0";
buttonType = "ToggleButton";
text = %filter @ " ( " @ MaterialFilterAllArray.countKey(%filter) @ " )";
filter = %filter;
Command = "MaterialSelector.preloadFilter();";
};
%container.add( %checkbox );
MaterialSelector-->filterArray.add( %container );
%tagCount = getWordCount( MaterialSelector.currentFilter );
for( %j = 0; %j < %tagCount; %j++ )
{
if( %filter $= getWord( MaterialSelector.currentFilter, %j ) )
{
if( %selectedFilter $= "" )
%selectedFilter = %filter;
else
%selectedFilter = %selectedFilter @ " " @ %filter;
%checkbox.setStateOn(1);
}
}
}
MaterialSelector.loadFilter( %selectedFilter );
%filteredTypesArray.delete();
}
// create category and update current material if there is one
function MaterialSelector::createFilter( %this, %filter )
{
if( %filter $= %existingFilters )
{
toolsMessageBoxOK( "Error", "Can not create blank filter.");
return;
}
for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount() ; %i++ )
{
%existingFilters = MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
if( %filter $= %existingFilters )
{
toolsMessageBoxOK( "Error", "Can not create two filters of the same name.");
return;
}
}
%container = new GuiControl(){
profile = "ToolsGuiDefaultProfile";
Position = "0 0";
Extent = "128 18";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
new GuiCheckBoxCtrl(){
Profile = "ToolsGuiCheckBoxListProfile";
position = "5 1";
Extent = "118 18";
Command = "";
groupNum = "0";
buttonType = "ToggleButton";
text = %filter @ " ( " @ MaterialFilterAllArray.countKey(%filter) @ " )";
filter = %filter;
Command = "MaterialSelector.preloadFilter();";
};
};
MaterialSelector-->filterArray.add( %container );
// if selection exists, lets reselect it to refresh it
if( isObject(MaterialSelector.selectedMaterial) )
MaterialSelector.updateSelection( MaterialSelector.selectedMaterial, MaterialSelector.selectedPreviewImagePath );
// material category text field to blank
MaterialSelector_addFilterWindow-->tagName.setText("");
}
function MaterialSelector::updateSelection( %this, %material, %previewImagePath )
{
// the material selector will visually update per material information
// after we move away from the material. eg: if we remove a field from the material,
// the empty checkbox will still be there until you move fro and to the material again
%isMaterialBorder = 0;
eval("%isMaterialBorder = isObject(MaterialSelector-->"@%material@"Border);");
if( %isMaterialBorder )
{
eval( "MaterialSelector-->"@%material@"Border.setStateOn(1);");
}
%isMaterialBorderPrevious = 0;
eval("%isMaterialBorderPrevious = isObject(MaterialSelector-->"@$prevSelectedMaterialHL@"Border);");
if( %isMaterialBorderPrevious )
{
eval( "MaterialSelector-->"@$prevSelectedMaterialHL@"Border.setStateOn(0);");
}
MaterialSelector-->materialCategories.deleteAllObjects();
MaterialSelector.selectedMaterial = %material;
MaterialSelector.selectedPreviewImagePath = %previewImagePath;
MaterialSelector-->previewSelectionText.setText( %material );
MaterialSelector-->previewSelection.setBitmap( %previewImagePath );
// running through the existing list of categorynames in the left, so yes
// some might exist on the left only temporary if not given a home
for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount() ; %i++ )
{
%filter = MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
%checkbox = new GuiCheckBoxCtrl(){
materialName = %material.name;
Profile = "ToolsGuiCheckBoxListProfile";
position = "5 2";
Extent = "118 18";
Command = "MaterialSelector.updateMaterialTags( $ThisControl.materialName, $ThisControl.getText(), $ThisControl.getValue() );";
text = %filter;
};
MaterialSelector-->materialCategories.add( %checkbox );
// crawl through material for categories in order to check or not
%filterFound = 0;
for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
{
%tag = %material.getFieldValue("materialTag" @ %j);
if( %tag $= %filter )
{
%filterFound = 1;
break;
}
}
if( %filterFound )
%checkbox.setStateOn(1);
else
%checkbox.setStateOn(0);
}
$prevSelectedMaterialHL = %material;
}
function MaterialSelector::updateMaterialTags( %this, %material, %tag, %tagValue )
{
if( %tagValue == 1 )
{
MaterialFilterAllArray.add( %tag, %material );
if( %material.mapTo $= "" || %material.mapTo $= "unmapped_mat" )
%secondStaticFilter = MaterialFilterUnmappedArray;
else
%secondStaticFilter = MaterialFilterMappedArray;
%secondStaticFilter.add( %tag, %material );
%createdTag = 0;
for( %i = 0; %createdTag == 0; %i++ )
{
%materialTag = %material.getFieldValue("materialTag" @ %i);
if( %materialTag $= "" )
{
eval( %material @ ".materialTag" @ %i @ "=" @ %tag @ ";" );
%createdTag = 1;
for( %j = MaterialSelector.staticFilterObjects; %j < MaterialSelector-->filterArray.getCount() ; %j++ )
{
if( %tag $= MaterialSelector-->filterArray.getObject(%j).getObject(0).filter )
{
%count = getWord( MaterialSelector-->filterArray.getObject(%j).getObject(0).getText(), 2 );
%count++;
MaterialSelector-->filterArray.getObject(%j).getObject(0).setText( %tag @ " ( "@ %count @ " )");
}
}
break;
}
}
}
else
{
// Remove the material from the "all" category
for( %i = 0; %i < MaterialFilterAllArray.count(); %i++ )
{
if( MaterialFilterAllArray.getKey(%i) $= %tag )
{
if( MaterialFilterAllArray.getValue(%i) $= %material )
{
MaterialFilterAllArray.erase(%i);
break;
}
}
}
// Figure out what the material's other category is
if( %material.mapTo $= "" || %material.mapTo $= "unmapped_mat" )
%secondStaticFilter = MaterialFilterUnmappedArray;
else
%secondStaticFilter = MaterialFilterMappedArray;
// Remove the material from its other category
for( %i = 0; %i < %secondStaticFilter.count(); %i++ )
{
if( %secondStaticFilter.getKey(%i) $= %tag )
{
if( %secondStaticFilter.getValue(%i) $= %material )
{
%secondStaticFilter.erase( %i );
break;
}
}
}
MaterialSelector.updateFilterCount( %tag, false );
%tagField = MaterialSelector.getTagField( %material, %tag );
%lastTagField = MaterialSelector.getLastTagField( %material );
%lastValidTagField = MaterialSelector.getLastValidTagField( %material, %tag );
if( %tagField $= %lastValidTagField || %lastValidTagField $= "" )
{
MaterialSelectorPerMan.removeField( %material, %tagField );
}
else
{
// Replace the current tagFieldValue with the last tagFieldValue
%lastValidTag = %material.getFieldValue( %lastValidTagField );
%material.setFieldValue( %tagField, %lastValidTag );
// Remove the last tagFieldValue
MaterialSelectorPerMan.removeField( %material, %lastTagField );
}
}
// so were not going to save materials that dont current exist...
// technically all the data is stored in dynamic fields if the user feels like saving
// their auto-generated or new material
if( %material.getFilename() !$= "" &&
%material.getFilename() !$= "tools/gui/MaterialSelector.ed.gui" &&
%material.getFilename() !$= "tools/materialEditor/scripts/materialEditor.ed.cs" )
{
MaterialSelectorPerMan.setDirty( %material );
MaterialSelectorPerMan.saveDirty();
MaterialSelectorPerMan.removeDirty( %material );
if(!%tagValue)
%material.setFieldValue( %lastTagField, "" );
}
}
function MaterialSelector::updateFilterCount( %this, %tag, %add )
{
for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount() ; %i++ )
{
if( %tag $= MaterialSelector-->filterArray.getObject(%i).getObject(0).filter )
{
// Get the filter count and apply the operation
%idx = getWord( MaterialSelector-->filterArray.getObject(%i).getObject(0).getText(), 2 );
if( %add )
%idx++;
else
%idx--;
MaterialSelector-->filterArray.getObject(%i).getObject(0).setText( %tag @ " ( "@ %idx @ " )");
}
}
}
// this should create a new material pretty nicely
function MaterialSelector::createNewMaterial( %this )
{
// look for a newMaterial name to grab
%material = getUniqueName( "newMaterial" );
new Material(%material)
{
diffuseMap[0] = "core/images/warnmat";
mapTo = "unmapped_mat";
parentGroup = RootGroup;
};
// add one to All filter
MaterialFilterAllArray.add( "", %material.name );
MaterialFilterAllArrayCheckbox.setText("All ( " @ MaterialFilterAllArray.count() + 1 @ " ) ");
MaterialFilterUnmappedArray.add( "", %material.name );
MaterialFilterUnmappedArrayCheckbox.setText("Unmapped ( " @ MaterialFilterUnmappedArray.count() + 1 @ " ) ");
if( MaterialSelector.currentStaticFilter !$= "MaterialFilterMappedArray" )
{
// create the new material gui
%container = new GuiControl(){
profile = "ToolsGuiDefaultProfile";
Position = "0 0";
Extent = "74 85";
HorizSizing = "right";
VertSizing = "bottom";
isContainer = "1";
new GuiTextCtrl(){
position = "10 70";
profile = "ToolsGuiTextCenterProfile";
extent = "64 16";
text = %material.name;
};
};
%previewButton = new GuiBitmapButtonCtrl(){
internalName = %material.name;
HorizSizing = "right";
VertSizing = "bottom";
profile = "ToolsGuiButtonProfile";
position = "7 4";
extent = "64 64";
buttonType = "PushButton";
bitmap = "core/images/warnmat";
Command = "";
text = "Loading...";
useStates = false;
new GuiBitmapButtonCtrl(){
HorizSizing = "right";
VertSizing = "bottom";
profile = "ToolsGuiButtonProfile";
position = "0 0";
extent = "64 64";
Variable = "";
buttonType = "toggleButton";
bitmap = "tools/materialEditor/gui/cubemapBtnBorder";
groupNum = "0";
text = "";
};
};
%previewBorder = new GuiButtonCtrl(){
internalName = %material.name@"Border";
HorizSizing = "right";
VertSizing = "bottom";
profile = "ToolsGuiThumbHighlightButtonProfile";
position = "3 0";
extent = "72 88";
Variable = "";
buttonType = "toggleButton";
tooltip = %material.name;
Command = "MaterialSelector.updateSelection( $ThisControl.getParent().getObject(1).internalName, $ThisControl.getParent().getObject(1).bitmap );";
groupNum = "0";
text = "";
};
%container.add(%previewButton);
%container.add(%previewBorder);
// add to the gui control array
MaterialSelector-->materialSelection.add(%container);
}
// select me
MaterialSelector.updateSelection( %material, "core/images/warnmat.png" );
}
//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....
function MaterialSelector::showDeleteDialog( %this )
{
%material = MaterialSelector.selectedMaterial;
%secondFilter = "MaterialFilterMappedArray";
%secondFilterName = "Mapped";
for( %i = 0; %i < MaterialFilterUnmappedArray.count(); %i++ )
{
if( MaterialFilterUnmappedArray.getValue(%i) $= %material )
{
%secondFilter = "MaterialFilterUnmappedArray";
%secondFilterName = "Unmapped";
break;
}
}
if( isObject( %material ) )
{
toolsMessageBoxYesNoCancel("Delete Material?",
"Are you sure you want to delete<br><br>" @ %material.getName() @ "<br><br> Material deletion won't take affect until the engine is quit.",
"MaterialSelector.deleteMaterial( " @ %material @ ", " @ %secondFilter @ ", " @ %secondFilterName @" );",
"",
"" );
}
}
function MaterialSelector::deleteMaterial( %this, %materialName, %secondFilter, %secondFilterName )
{
if( !isObject( %materialName ) )
return;
for( %i = 0; %i <= MaterialFilterAllArray.countValue( %materialName ); %i++)
{
%index = MaterialFilterAllArray.getIndexFromValue( %materialName );
MaterialFilterAllArray.erase( %index );
}
MaterialFilterAllArrayCheckbox.setText("All ( " @ MaterialFilterAllArray.count() - 1 @ " ) ");
%checkbox = %secondFilter @ "Checkbox";
for( %k = 0; %k <= %secondFilter.countValue( %materialName ); %k++)
{
%index = %secondFilter.getIndexFromValue( %materialName );
%secondFilter.erase( %index );
}
%checkbox.setText( %secondFilterName @ " ( " @ %secondFilter.count() - 1 @ " ) ");
for( %i = 0; %materialName.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
{
%materialTag = %materialName.getFieldValue("materialTag" @ %i);
for( %j = MaterialSelector.staticFilterObjects; %j < MaterialSelector-->filterArray.getCount() ; %j++ )
{
if( %materialTag $= MaterialSelector-->filterArray.getObject(%j).getObject(0).filter )
{
%count = getWord( MaterialSelector-->filterArray.getObject(%j).getObject(0).getText(), 2 );
%count--;
MaterialSelector-->filterArray.getObject(%j).getObject(0).setText( %materialTag @ " ( "@ %count @ " )");
}
}
}
UnlistedMaterials.add( "unlistedMaterials", %materialName );
if( %materialName.getFilename() !$= "" &&
%materialName.getFilename() !$= "tools/gui/MaterialSelector.ed.gui" &&
%materialName.getFilename() !$= "tools/materialEditor/scripts/materialEditor.ed.cs" )
{
MaterialSelectorPerMan.removeObjectFromFile(%materialName);
MaterialSelectorPerMan.saveDirty();
}
MaterialSelector.preloadFilter();
//MaterialSelector.selectMaterial( "WarningMaterial" );
}
function MaterialSelector::switchStaticFilters( %this, %staticFilter)
{
switch$(%staticFilter)
{
case "MaterialFilterAllArray":
MaterialFilterAllArrayCheckbox.setStateOn(1);
MaterialFilterMappedArrayCheckbox.setStateOn(0);
MaterialFilterUnmappedArrayCheckbox.setStateOn(0);
case "MaterialFilterMappedArray":
MaterialFilterMappedArrayCheckbox.setStateOn(1);
MaterialFilterAllArrayCheckbox.setStateOn(0);
MaterialFilterUnmappedArrayCheckbox.setStateOn(0);
case "MaterialFilterUnmappedArray":
MaterialFilterUnmappedArrayCheckbox.setStateOn(1);
MaterialFilterAllArrayCheckbox.setStateOn(0);
MaterialFilterMappedArrayCheckbox.setStateOn(0);
}
// kinda goofy were passing a class variable... we can't do an empty check right now
// on load filter because we actually pass "" as a filter...
MaterialSelector.loadFilter( MaterialSelector.currentFilter, %staticFilter );
}
// Tagging Functionality
function MaterialSelector::getTagField( %this, %material, %tag )
{
for( %i = 0; %material.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
{
%loopTag = %material.getFieldValue("materialTag" @ %i);
if( %tag $= %loopTag )
{
%tagField = "materialTag" @ %i;
break;
}
}
return %tagField;
}
function MaterialSelector::getLastTagField( %this, %material )
{
for( %i = 0; %material.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
{
%tagField = "materialTag" @ %i;
}
return %tagField;
}
function MaterialSelector::getLastValidTagField( %this, %material, %invalidTag )
{
for( %i = 0; %material.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
{
%tag = %material.getFieldValue("materialTag" @ %i);
// Can't equal our invalid tag
if( %tag $= %invalidTag )
continue;
// Set our last found tag
%tagField = "materialTag" @ %i;
}
return %tagField;
}
// Preview Page Navigation
function MaterialSelector::firstPage(%this)
{
MaterialSelector.currentPreviewPage = 0;
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
}
function MaterialSelector::previousPage(%this)
{
MaterialSelector.currentPreviewPage--;
if( MaterialSelector.currentPreviewPage < 0)
MaterialSelector.currentPreviewPage = 0;
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
}
function MaterialSelector::nextPage(%this)
{
MaterialSelector.currentPreviewPage++;
if( MaterialSelector.currentPreviewPage >= MaterialSelector.totalPages)
MaterialSelector.currentPreviewPage = MaterialSelector.totalPages - 1;
if( MaterialSelector.currentPreviewPage < 0)
MaterialSelector.currentPreviewPage = 0;
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
}
function MaterialSelector::lastPage(%this)
{
MaterialSelector.currentPreviewPage = MaterialSelector.totalPages - 1;
if( MaterialSelector.currentPreviewPage < 0)
MaterialSelector.currentPreviewPage = 0;
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
}
function MaterialSelector::selectPage(%this, %page)
{
MaterialSelector.currentPreviewPage = %page;
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
}
function MaterialSelector::thumbnailCountUpdate(%this)
{
$Pref::MaterialSelector::ThumbnailCountIndex = MaterialSelector-->materialPreviewCountPopup.getSelected();
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
}
function MaterialSelector::buildPagesButtons(%this, %currentPage, %totalPages)
{
// We don't want any more than 8 pages at a time.
if( %totalPages > 8 )
{
// We attempt to display up to 2 pages before the current page
%start = %currentPage - 2;
if( %start <= 0 )
{
%start = 0;
%startbracket = false;
}
else
{
%startbracket = true;
}
if( (%totalPages - %start) < 8 )
{
// Move %start closer to the beginning to maintain 8 pages
%start = %totalPages - 8;
}
%end = %start + 8;
if( %end >= %totalPages )
{
%end = %totalPages;
%endbracket = false;
}
else
{
%endbracket = true;
}
}
else
{
%start = 0;
%end = %totalPages;
%startbracket = false;
%endbracket = false;
}
if( %startbracket )
{
%control = new GuiTextCtrl(){
profile = "ToolsGuiTextCenterProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 2";
extent = "14 16";
MinExtent = "8 8";
text = "...";
};
MaterialSelector-->materialPreviewPagesStack.add( %control );
}
for( %i = %start; %i < %end; %i++ )
{
if( %i != %currentPage )
{
%control = new GuiButtonCtrl() {
canSaveDynamicFields = "0";
Enabled = "1";
isContainer = "0";
Profile = "ToolsGuiTextCenterProfile";
HorizSizing = "right";
VertSizing = "bottom";
Position = "0 0";
Extent = "14 16";
MinExtent = "8 8";
canSave = "1";
isDecoy = "0";
Visible = "1";
Command = "MaterialSelector.schedule(0, selectPage, " @ %i @ ");";
tooltipprofile = "ToolsGuiToolTipProfile";
hovertime = "1000";
text = %i+1;
groupNum = "-1";
buttonType = "PushButton";
useMouseEvents = "1";
};
}
else
{
%control = new GuiTextCtrl(){
profile = "ToolsGuiTextBoldCenterProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 2";
extent = "14 16";
MinExtent = "8 8";
text = %i+1;
};
}
MaterialSelector-->materialPreviewPagesStack.add( %control );
}
if( %endbracket )
{
%control = new GuiTextCtrl(){
profile = "ToolsGuiTextCenterProfile";
HorizSizing = "right";
VertSizing = "bottom";
position = "0 2";
extent = "14 16";
MinExtent = "8 8";
text = "...";
};
MaterialSelector-->materialPreviewPagesStack.add( %control );
}
}