//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
//**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************//
using System;
using bs;
namespace bs.Editor
{
/** @addtogroup BansheeEditor
* Scripting API available in editor only, mainly used for extending the editor in various ways.
* @{
*/
/** @defgroup General General
* Various functionality that doesn't fit into any other category.
*/
/** @defgroup GUI-Editor GUI
* Editor specific GUI elements.
*/
/** @defgroup Input-Editor Input
* %Input handling for editor only (not affected by game pauses).
*/
/** @defgroup Inspectors Inspectors
* Implementations of inspectors for various engine types.
*/
/** @defgroup Settings Settings
* Editor and project settings, and related window.
*/
/** @defgroup Script Script
* Script code management and compilation.
*/
/** @defgroup Tests Tests
* Editor only unit tests
*/
/** @defgroup Utility-Editor Utility
* Various utility functionality.
*/
/** @defgroup Window Window
* Interface and tools for creating custom editor windows.
*/
/** @defgroup Windows Windows
* Implementations of various editor windows (for example Scene, Game, Library).
* @{
*/
/** @defgroup AnimationEditor Animation Editor
* Animation editor window and related functionality.
*/
/** @defgroup Build Build
* Build editor window and build manager.
*/
/** @defgroup Inspector Inspector
* Interface and utilities needed for implementing custom inspectors.
*/
/** @defgroup Library Library
* Managment of resources in the project (loading, saving, creating, querying, etc.).
*/
/** @defgroup Scene-Editor Scene
* Scene editor window and related functionality.
* @{
*/
/** @defgroup Gizmos Gizmos
* Interface for creating custom gizmos.
*/
/** @defgroup Handles Handles
* Interface for creating custom handles (2D/3D tools).
*/
/** @} */
/** @} */
/** @} */
/** @cond Interop */
///
/// 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 TrySaveSceneOnQuit()
{
Action success = () =>
{
EditorApplication.SaveProject();
EditorApplication.Quit();
};
EditorApplication.SaveScene(success, TrySaveSceneOnQuit);
}
///
/// 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)
TrySaveSceneOnQuit();
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();
}
}
}
/** @endcond */
}