using System.Collections.Generic; using BansheeEngine; namespace BansheeEditor { /// /// Renders an inspector for the resource. /// [CustomInspector(typeof(Mesh))] internal class MeshInspector : Inspector { private GUIToggleField normalsField = new GUIToggleField(new LocEdString("Import Normals")); private GUIToggleField tangentsField = new GUIToggleField(new LocEdString("Import Tangents")); private GUIToggleField skinField = new GUIToggleField(new LocEdString("Import Skin")); private GUIToggleField blendShapesField = new GUIToggleField(new LocEdString("Import Blend Shapes")); private GUIToggleField animationField = new GUIToggleField(new LocEdString("Import Animation")); private GUIFloatField scaleField = new GUIFloatField(new LocEdString("Scale")); private GUIToggleField cpuReadableField = new GUIToggleField(new LocEdString("CPU readable")); private GUIButton reimportButton = new GUIButton(new LocEdString("Reimport")); private MeshImportOptions importOptions; /// protected internal override void Initialize() { if (InspectedObject != null) { importOptions = GetImportOptions(); normalsField.OnChanged += x => importOptions.ImportNormals = x; tangentsField.OnChanged += x => importOptions.ImportTangents = x; skinField.OnChanged += x => importOptions.ImportSkin = x; blendShapesField.OnChanged += x => importOptions.ImportBlendShapes = x; animationField.OnChanged += x => importOptions.ImportAnimation = x; scaleField.OnChanged += x => importOptions.Scale = x; cpuReadableField.OnChanged += x => importOptions.CPUReadable = x; reimportButton.OnClick += TriggerReimport; Layout.AddElement(normalsField); Layout.AddElement(tangentsField); Layout.AddElement(skinField); Layout.AddElement(blendShapesField); Layout.AddElement(animationField); Layout.AddElement(scaleField); Layout.AddElement(cpuReadableField); Layout.AddSpace(10); GUILayout reimportButtonLayout = Layout.AddLayoutX(); reimportButtonLayout.AddFlexibleSpace(); reimportButtonLayout.AddElement(reimportButton); } } /// protected internal override InspectableState Refresh() { MeshImportOptions newImportOptions = GetImportOptions(); normalsField.Value = newImportOptions.ImportNormals; tangentsField.Value = newImportOptions.ImportTangents; skinField.Value = newImportOptions.ImportSkin; blendShapesField.Value = newImportOptions.ImportBlendShapes; animationField.Value = newImportOptions.ImportAnimation; scaleField.Value = newImportOptions.Scale; cpuReadableField.Value = newImportOptions.CPUReadable; importOptions = newImportOptions; return InspectableState.NotModified; } /// /// Retrieves import options for the mesh we're currently inspecting. /// /// Mesh import options object. private MeshImportOptions GetImportOptions() { Mesh mesh = InspectedObject as Mesh; MeshImportOptions output = null; if (mesh != null) { LibraryEntry meshEntry = ProjectLibrary.GetEntry(ProjectLibrary.GetPath(mesh)); if (meshEntry != null && meshEntry.Type == LibraryEntryType.File) { FileEntry meshFileEntry = (FileEntry)meshEntry; output = meshFileEntry.Options as MeshImportOptions; } } if (output == null) { if (importOptions == null) output = new MeshImportOptions(); else output = importOptions; } return output; } /// /// Reimports the texture resource according to the currently set import options. /// private void TriggerReimport() { Mesh mesh = (Mesh)InspectedObject; string resourcePath = ProjectLibrary.GetPath(mesh); ProjectLibrary.Reimport(resourcePath, importOptions, true); } } }