ExporterWindow.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.IO;
  5. using JsonFx;
  6. using UnityEditor;
  7. using UnityEngine;
  8. using JsonFx.Json;
  9. namespace Unity3D2Babylon
  10. {
  11. public class ExporterWindow : EditorWindow
  12. {
  13. private static readonly List<string> logs = new List<string>();
  14. Vector2 scrollPos;
  15. ExportationOptions exportationOptions;
  16. public static void ReportProgress(float value, string message = "")
  17. {
  18. EditorUtility.DisplayProgressBar("Babylon.js", message, value);
  19. if (!string.IsNullOrEmpty(message))
  20. {
  21. logs.Add(message);
  22. }
  23. }
  24. public static void ShowMessage(string message, string title = "Babylon.js")
  25. {
  26. EditorUtility.DisplayDialog(title, message, "OK");
  27. }
  28. [MenuItem("BabylonJS/Export to .babylon")]
  29. public static void Init()
  30. {
  31. var window = (ExporterWindow)GetWindow(typeof(ExporterWindow));
  32. window.Initialize();
  33. }
  34. void Initialize()
  35. {
  36. title = "Babylon.js";
  37. }
  38. void OnGUI()
  39. {
  40. if (exportationOptions == null)
  41. {
  42. exportationOptions = new ExportationOptions();
  43. if (File.Exists("Unity3D2Babylon.ini"))
  44. {
  45. var readText = File.ReadAllText("Unity3D2Babylon.ini");
  46. var jsReader = new JsonReader();
  47. exportationOptions = jsReader.Read<ExportationOptions>(readText);
  48. }
  49. }
  50. GUILayout.Label("Exportation options", EditorStyles.boldLabel);
  51. exportationOptions.ReflectionDefaultLevel = EditorGUILayout.Slider("Reflection default level", exportationOptions.ReflectionDefaultLevel, 0, 1.0f);
  52. GUILayout.Label("Collisions options", EditorStyles.boldLabel);
  53. exportationOptions.ExportCollisions = EditorGUILayout.Toggle("Collisions", exportationOptions.ExportCollisions);
  54. exportationOptions.CameraEllipsoid = EditorGUILayout.Vector3Field("Camera's Ellipsoid:", exportationOptions.CameraEllipsoid);
  55. exportationOptions.Gravity = EditorGUILayout.Vector3Field("Gravity:", exportationOptions.Gravity);
  56. EditorGUILayout.Space();
  57. EditorGUILayout.Space();
  58. if (GUILayout.Button("Export"))
  59. {
  60. Export();
  61. }
  62. EditorGUILayout.Space();
  63. scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
  64. foreach (var log in logs)
  65. {
  66. var bold = log.StartsWith("*");
  67. GUILayout.Label(bold ? log.Remove(0, 1) : log, bold ? (EditorStyles.boldLabel) : EditorStyles.label);
  68. }
  69. EditorGUILayout.EndScrollView();
  70. Repaint();
  71. }
  72. public void Export()
  73. {
  74. try
  75. {
  76. int pos = EditorApplication.currentScene.LastIndexOf("/", StringComparison.Ordinal);
  77. string sceneName = EditorApplication.currentScene.Substring(pos + 1);
  78. exportationOptions.DefaultFolder = EditorUtility.SaveFolderPanel("Please select a folder", exportationOptions.DefaultFolder, "");
  79. if (string.IsNullOrEmpty(exportationOptions.DefaultFolder))
  80. {
  81. return;
  82. }
  83. Stopwatch watch = new Stopwatch();
  84. watch.Start();
  85. var jsWriter = new JsonWriter();
  86. File.WriteAllText("Unity3D2Babylon.ini", jsWriter.Write(exportationOptions));
  87. logs.Clear();
  88. ReportProgress(0);
  89. var sceneBuilder = new SceneBuilder(exportationOptions.DefaultFolder, sceneName, exportationOptions);
  90. sceneBuilder.ConvertFromUnity();
  91. ReportProgress(1, "Generating output file");
  92. sceneBuilder.WriteToBabylonFile();
  93. watch.Stop();
  94. ReportProgress(1, string.Format("Exportation done in {0:0.00}s", watch.Elapsed.TotalSeconds));
  95. EditorUtility.ClearProgressBar();
  96. sceneBuilder.GenerateStatus(logs);
  97. ShowMessage("Exportation done");
  98. }
  99. catch (Exception ex)
  100. {
  101. EditorUtility.ClearProgressBar();
  102. ShowMessage("A problem occurred: " + ex.Message + ex.StackTrace, "Error");
  103. }
  104. }
  105. }
  106. }