//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using bs; namespace bs.Editor { /** @addtogroup Settings * @{ */ /// /// Contains various settings that are applied globally to the editor. Settings will persist through editor sessions. /// internal static class EditorSettings { /// /// Determines if snapping for move handle is active. When active the move handle can only be moved in increments /// specified by . /// public static bool MoveHandleSnapActive { get { return Internal_GetMoveHandleSnapActive(); } set { Internal_SetMoveHandleSnapActive(value); } } /// /// Determines if snapping for rotate handle is active. When active the rotate handle can only be rotated in /// increments specified by . /// public static bool RotateHandleSnapActive { get { return Internal_GetRotateHandleSnapActive(); } set { Internal_SetRotateHandleSnapActive(value); } } /// /// Determines size of the increments the move handle can be moved when is /// active. /// public static float MoveHandleSnapAmount { get { return Internal_GetMoveHandleSnapAmount(); } set { Internal_SetMoveHandleSnapAmount(value); } } /// /// Determines size of the increments the rotate handle can be moved when is /// active. /// public static Degree RotateHandleSnapAmount { get { return (Degree)Internal_GetRotateHandleSnapAmount(); } set { Internal_SetRotateHandleSnapAmount(value.Degrees); } } /// /// Determines the default size for all handles. /// public static float DefaultHandleSize { get { return Internal_GetDefaultHandleSize(); } set { Internal_SetDefaultHandleSize(value); } } /// /// Determines the active tool shown in the scene view. /// public static SceneViewTool ActiveSceneTool { get { return (SceneViewTool)Internal_GetActiveSceneTool(); } set { Internal_SetActiveSceneTool((int)value); } } /// /// Determines the coordinate mode used by the tools in the scene view. /// public static HandleCoordinateMode ActiveCoordinateMode { get { return (HandleCoordinateMode)Internal_GetActiveCoordinateMode(); } set { Internal_SetActiveCoordinateMode((int)value); } } /// /// Determines the pivot mode used by the tools in the scene view. /// public static HandlePivotMode ActivePivotMode { get { return (HandlePivotMode)Internal_GetActivePivotMode(); } set { Internal_SetActivePivotMode((int)value); } } /// /// Maximum number of frames per second the editor is allowed to execute. Zero means infinite. /// public static int FPSLimit { get { return Internal_GetFPSLimit(); } set { Internal_SetFPSLimit(value); } } /// /// Controls sensitivity of mouse movements in the editor. This doesn't apply to mouse cursor. /// Default value is 1.0f. /// public static float MouseSensitivity { get { return Internal_GetMouseSensitivity(); } set { Internal_SetMouseSensitivity(value); } } /// /// Contains the absolute path to the last open project, if any. /// public static string LastOpenProject { get { return Internal_GetLastOpenProject(); } set { Internal_SetLastOpenProject(value); } } /// /// Determines should the last open project be automatically loaded on editor startup. /// public static bool AutoLoadLastProject { get { return Internal_GetAutoLoadLastProject(); } set { Internal_SetAutoLoadLastProject(value); } } /// /// Contains a list of most recently loaded projects. /// public static RecentProject[] RecentProjects { get { string[] paths; UInt64[] timeStamps; Internal_GetRecentProjects(out paths, out timeStamps); RecentProject[] output = new RecentProject[paths.Length]; for (int i = 0; i < paths.Length; i++) output[i] = new RecentProject(paths[i], timeStamps[i]); return output; } set { int numEntries = 0; if (value != null) numEntries = value.Length; string[] paths = new string[numEntries]; UInt64[] timeStamps = new UInt64[numEntries]; for (int i = 0; i < numEntries; i++) { paths[i] = value[i].path; timeStamps[i] = value[i].accessTimestamp; } Internal_SetRecentProjects(paths, timeStamps); } } /// /// Contains a hash value that is updated whenever one of the properties in this object is updated. This allows /// external systems to track when they might need to reload the settings. /// public static int Hash { get { return Internal_GetHash(); } } /// /// Sets a generic floating point property. /// /// Name to record the property under. /// Value of the property. public static void SetFloat(string name, float value) { Internal_SetFloat(name, value); } /// /// Sets a generic integer property. /// /// Name to record the property under. /// Value of the property. public static void SetInt(string name, int value) { Internal_SetInt(name, value); } /// /// Sets a generic boolean property. /// /// Name to record the property under. /// Value of the property. public static void SetBool(string name, bool value) { Internal_SetBool(name, value); } /// /// Sets a generic string property. /// /// Name to record the property under. /// Value of the property. public static void SetString(string name, string value) { Internal_SetString(name, value); } /// /// Sets a generic object property. Any object marked with attribute can be provided, /// excluding components and resources. /// /// Name to record the property under. /// Value of the property. public static void SetObject(string name, object value) { Internal_SetObject(name, value); } /// /// Retrieves a generic floating point property. /// /// Name of the property to retrieve. /// Default value to return if property cannot be found. /// Value of the property if it exists, otherwise the default value. public static float GetFloat(string name, float defaultValue = 0.0f) { return Internal_GetFloat(name, defaultValue); } /// /// Retrieves a generic integer property. /// /// Name of the property to retrieve. /// Default value to return if property cannot be found. /// Value of the property if it exists, otherwise the default value. public static int GetInt(string name, int defaultValue = 0) { return Internal_GetInt(name, defaultValue); } /// /// Retrieves a generic boolean property. /// /// Name of the property to retrieve. /// Default value to return if property cannot be found. /// Value of the property if it exists, otherwise the default value. public static bool GetBool(string name, bool defaultValue = false) { return Internal_GetBool(name, defaultValue); } /// /// Retrieves a generic string property. /// /// Name of the property to retrieve. /// Default value to return if property cannot be found. /// Value of the property if it exists, otherwise the default value. public static string GetString(string name, string defaultValue = "") { return Internal_GetString(name, defaultValue); } /// /// Retrieves a generic object property. /// /// Name of the property to retrieve. /// /// Value of the property if it exists, otherwise an empty instance of the object. Returns null if the tyoe of /// the stored object doesn't match the requested type. /// public static T GetObject(string name) where T : class, new() { object obj = Internal_GetObject(name); if (obj == null) return new T(); return obj as T; } /// /// Checks does a generic property with the specified name exists. /// /// Name of the property to check. /// True if the property exists, false otherwise. public static bool HasKey(string name) { return Internal_HasKey(name); } /// /// Deletes a generic property with the specified name. /// /// Name of the property to delete. public static void DeleteKey(string name) { Internal_DeleteKey(name); } /// /// Deletes all generic properties. /// public static void DeleteAllKeys() { Internal_DeleteAllKeys(); } /// /// Saves editor settings to the disk. /// public static void Save() { Internal_Save(); } [MethodImpl(MethodImplOptions.InternalCall)] private static extern bool Internal_GetMoveHandleSnapActive(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetMoveHandleSnapActive(bool value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern bool Internal_GetRotateHandleSnapActive(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetRotateHandleSnapActive(bool value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_GetMoveHandleSnapAmount(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetMoveHandleSnapAmount(float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_GetRotateHandleSnapAmount(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetRotateHandleSnapAmount(float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_GetDefaultHandleSize(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetDefaultHandleSize(float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern int Internal_GetActiveSceneTool(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetActiveSceneTool(int value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern int Internal_GetActiveCoordinateMode(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetActiveCoordinateMode(int value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern int Internal_GetActivePivotMode(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetActivePivotMode(int value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern int Internal_GetFPSLimit(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetFPSLimit(int value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_GetMouseSensitivity(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetMouseSensitivity(float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern string Internal_GetLastOpenProject(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetLastOpenProject(string value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern bool Internal_GetAutoLoadLastProject(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetAutoLoadLastProject(bool value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_GetRecentProjects(out string[] paths, out UInt64[] timestamps); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetRecentProjects(string[] paths, UInt64[] timestamps); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetFloat(string name, float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetInt(string name, int value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetBool(string name, bool value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetString(string name, string value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetObject(string name, object value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_GetFloat(string name, float defaultValue); [MethodImpl(MethodImplOptions.InternalCall)] private static extern int Internal_GetInt(string name, int defaultValue); [MethodImpl(MethodImplOptions.InternalCall)] private static extern bool Internal_GetBool(string name, bool defaultValue); [MethodImpl(MethodImplOptions.InternalCall)] private static extern string Internal_GetString(string name, string defaultValue); [MethodImpl(MethodImplOptions.InternalCall)] private static extern object Internal_GetObject(string name); [MethodImpl(MethodImplOptions.InternalCall)] private static extern bool Internal_HasKey(string name); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_DeleteKey(string name); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_DeleteAllKeys(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern int Internal_GetHash(); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_Save(); } /// /// Contains data about a recently opened project. /// [StructLayout(LayoutKind.Sequential)] public struct RecentProject // Note: Must match C++ struct RecentProject { /// /// Constructs a new recently opened project object. /// /// Absolute path to the project. /// Timestamp when the project was last opened. public RecentProject(string path, UInt64 timestamp) { this.path = path; this.accessTimestamp = timestamp; } public string path; public UInt64 accessTimestamp; } /** @} */ }