//********************************** 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;
}
/** @} */
}