using System; using System.Collections.Generic; using BansheeEngine; namespace BansheeEditor { /// /// Entry point to the editor. /// class Program { private static EditorApplication app; /// /// Called by the runtime whenever the editor assembly is loaded. This means initially when editor is started /// and every time assembly refresh occurs. /// static void OnInitialize() { app = new EditorApplication(); } /// /// Called by the runtime when the editor is first started. Called after . /// static void OnEditorStartUp() { if (EditorSettings.AutoLoadLastProject) { string projectPath = EditorSettings.LastOpenProject; if (EditorApplication.IsValidProject(projectPath)) EditorApplication.LoadProject(projectPath); else ProjectWindow.Open(); } else ProjectWindow.Open(); CodeEditorType activeCodeEditor = (CodeEditorType)EditorSettings.GetInt(SettingsWindow.ActiveCodeEditorKey, (int) CodeEditorType.None); CodeEditorType[] availableEditors = CodeEditor.AvailableEditors; if (Array.Exists(availableEditors, x => x == activeCodeEditor)) CodeEditor.ActiveEditor = activeCodeEditor; else { if (availableEditors.Length > 0) CodeEditor.ActiveEditor = availableEditors[0]; } } /// /// Called 60 times per second by the runtime. /// static void OnEditorUpdate() { app.OnEditorUpdate(); } /// /// Attempts to save the current scene, and keeps retrying if failed or until user cancels. /// static void TrySaveScene() { Action success = () => { EditorApplication.SaveProject(); EditorApplication.Quit(); }; EditorApplication.SaveScene(success, TrySaveScene); } /// /// Called when the user requests that the editor shuts down. You must manually close the editor from this /// method if you choose to accept the users request. /// static void OnEditorQuitRequested() { Action dialogCallback = (result) => { if (result == DialogBox.ResultType.Yes) TrySaveScene(); else if (result == DialogBox.ResultType.No) { EditorApplication.SaveProject(); EditorApplication.Quit(); } }; if (EditorApplication.IsSceneModified()) { DialogBox.Open("Warning", "You current scene has modifications. Do you wish to save them first?", DialogBox.Type.YesNoCancel, dialogCallback); } else { EditorApplication.SaveProject(); EditorApplication.Quit(); } } } }