コード例 #1
0
        protected override void AddNewData(string undoName, string newName)
        {
            var newMat = new Engine.VPT.Material(newName);

            _tableAuthoring.Data.Materials    = _tableAuthoring.Data.Materials.Append(newMat).ToArray();
            _tableAuthoring.Data.NumMaterials = _tableAuthoring.Data.Materials.Length;
        }
コード例 #2
0
 private void MaterialSelected(List <Engine.VPT.Material> selectedMaterials)
 {
     _selectedMaterial = null;
     if (selectedMaterials.Count > 0)
     {
         _selectedMaterial = selectedMaterials[0];                 // not supporting multi select for now
         _renaming         = false;
     }
     Repaint();
 }
コード例 #3
0
 private bool IsNameInUse(string name, Engine.VPT.Material ignore = null)
 {
     foreach (var mat in _table.Item.Data.Materials)
     {
         if (mat != ignore && name == mat.Name)
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #4
0
        private void AddMaterialToTable(string undoName, Engine.VPT.Material material)
        {
            // use a serialized field to force material selection in the next gui pass
            // this way undo will cause it to happen again, and if its no there anymore, just deselect any
            _forceSelectMatWithName = material.Name;
            Undo.RecordObjects(new Object[] { this, _table }, undoName);

            _table.data.Materials    = _table.data.Materials.Append(material).ToArray();
            _table.data.NumMaterials = _table.data.Materials.Length;

            _listView.Reload();
        }
コード例 #5
0
        private string GetUniqueMaterialName(string desiredName, Engine.VPT.Material ignore = null)
        {
            string acceptedName = desiredName;
            int    appendNum    = 1;

            while (IsNameInUse(acceptedName, ignore))
            {
                acceptedName = desiredName + appendNum;
                appendNum++;
            }
            return(acceptedName);
        }
コード例 #6
0
        private void DirtyMeshesWithMaterial(string undoName, Engine.VPT.Material material)
        {
            string matName = material.Name.ToLower();

            foreach (var item in _table.GetComponentsInChildren <IEditableItemBehavior>())
            {
                if (item.UsedMaterials != null && item.UsedMaterials.Any(um => um.ToLower() == matName))
                {
                    item.MeshDirty = true;
                    Undo.RecordObject(item as Object, undoName);
                }
            }
        }
コード例 #7
0
        private void RemoveMaterial(Engine.VPT.Material material)
        {
            if (!EditorUtility.DisplayDialog("Delete Material", $"Are you sure want to delete \"{material.Name}\"?", "Delete", "Cancel"))
            {
                return;
            }

            _selectedMaterial = null;
            Undo.RecordObjects(new Object[] { this, _table }, "Remove Material");

            _table.data.Materials    = _table.data.Materials.Where(m => m != material).ToArray();
            _table.data.NumMaterials = _table.data.Materials.Length;

            _listView.Reload();
        }
コード例 #8
0
        // sets the name property of the material, checking for name collions and appending a number to avoid it
        private void RenameExistingMaterial(Engine.VPT.Material material, string desiredName)
        {
            if (string.IsNullOrEmpty(desiredName))               // don't allow empty names
            {
                return;
            }

            string oldName      = material.Name;
            string acceptedName = GetUniqueMaterialName(desiredName, material);

            // give each editable item a chance to update its fields
            string undoName = "Rename Material";

            foreach (var item in _table.GetComponentsInChildren <IEditableItemBehavior>())
            {
                item.HandleMaterialRenamed(undoName, oldName, acceptedName);
            }
            Undo.RecordObject(_table, undoName);

            material.Name = acceptedName;
        }
コード例 #9
0
        protected virtual void OnGUI()
        {
            // if the table went away, clear the selected material as well
            if (_table == null)
            {
                _selectedMaterial = null;
            }

            if (!string.IsNullOrEmpty(_forceSelectMatWithName))
            {
                _listView.SelectMaterialWithName(_forceSelectMatWithName);
                _forceSelectMatWithName = null;
            }

            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("Add", GUILayout.ExpandWidth(false)))
            {
                AddNewMaterial();
            }
            if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false)))
            {
                RemoveMaterial(_selectedMaterial);
            }
            if (GUILayout.Button("Clone", GUILayout.ExpandWidth(false)))
            {
                CloneMaterial(_selectedMaterial);
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();

            // list
            GUILayout.FlexibleSpace();
            var r        = GUILayoutUtility.GetLastRect();
            var listRect = new Rect(r.x, r.y, r.width, position.height - r.y);

            _listView.OnGUI(listRect);

            // options
            EditorGUILayout.BeginVertical(GUILayout.MaxWidth(300));
            if (_selectedMaterial != null)
            {
                EditorGUILayout.BeginHorizontal();
                if (_renaming)
                {
                    _renameBuffer = EditorGUILayout.TextField(_renameBuffer);
                    if (GUILayout.Button("Save"))
                    {
                        RenameExistingMaterial(_selectedMaterial, _renameBuffer);
                        _renaming = false;
                        _listView.Reload();
                    }
                    if (GUILayout.Button("Cancel"))
                    {
                        _renaming = false;
                        GUI.FocusControl("");                         // de-focus on cancel because unity will retain previous buffer text until focus changes
                    }
                }
                else
                {
                    EditorGUILayout.LabelField(_selectedMaterial.Name);
                    if (GUILayout.Button("Rename"))
                    {
                        _renaming     = true;
                        _renameBuffer = _selectedMaterial.Name;
                    }
                }
                EditorGUILayout.EndHorizontal();

                if (_foldoutPhysics = EditorGUILayout.BeginFoldoutHeaderGroup(_foldoutPhysics, "Physics"))
                {
                    EditorGUI.indentLevel++;
                    PhysicsOptions();
                    EditorGUI.indentLevel--;
                }
                EditorGUILayout.EndFoldoutHeaderGroup();

                if (_foldoutVisual = EditorGUILayout.BeginFoldoutHeaderGroup(_foldoutVisual, "Visual"))
                {
                    EditorGUI.indentLevel++;
                    VisualOptions();
                    EditorGUI.indentLevel--;
                }
                EditorGUILayout.EndFoldoutHeaderGroup();
            }
            else
            {
                EditorGUILayout.LabelField("Select material to edit");
            }
            EditorGUILayout.EndVertical();

            EditorGUILayout.EndHorizontal();
        }
コード例 #10
0
        private void CloneMaterial(Engine.VPT.Material material)
        {
            var newMat = material.Clone(GetUniqueMaterialName(material.Name));

            AddMaterialToTable("Clone Material", newMat);
        }
コード例 #11
0
        private void AddNewMaterial()
        {
            var newMat = new Engine.VPT.Material(GetUniqueMaterialName("New Material"));

            AddMaterialToTable("Clone Material", newMat);
        }
コード例 #12
0
 public RowData(int id, Engine.VPT.Material mat, bool inUse) : base(id, 0)
 {
     Material = mat;
     InUse    = inUse;
 }