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; }
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(); }
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); }
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(); }
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); }
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); } } }
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(); }
// 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; }
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(); }
private void CloneMaterial(Engine.VPT.Material material) { var newMat = material.Clone(GetUniqueMaterialName(material.Name)); AddMaterialToTable("Clone Material", newMat); }
private void AddNewMaterial() { var newMat = new Engine.VPT.Material(GetUniqueMaterialName("New Material")); AddMaterialToTable("Clone Material", newMat); }
public RowData(int id, Engine.VPT.Material mat, bool inUse) : base(id, 0) { Material = mat; InUse = inUse; }