mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-23 06:04:44 +00:00
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
2004 lines
66 KiB
Plaintext
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 );
|
|
}
|
|
}
|