using System; using LE_LevelEditor.Core; using UnityEngine; namespace LE_LevelEditor.UI { public class LE_GUIInterface : MonoBehaviour { public class Delegates { public enum ETerrainUIMode { CREATE = 0, EDIT = 1 } public enum EDraggedObjectState { NONE = 0, IN_3D_PREVIEW = 1, NOT_PLACEABLE = 2 } public delegate bool GetBoolFunction(); public delegate float GetFloatFunction(); public GetBoolFunction IsCursorOverUI; public GetFloatFunction GetCameraPerspectiveGizmoRightPixelOffset; public GetFloatFunction GetObliqueCameraPerspectiveRightPixelOffset; public Action SetLevelIcon; public Action SetTerrainWidth; public Action SetTerrainLength; public Action SetTerrainHeight; public Action SetTerrainBaseTextures; public Action SetTerrainBrushes; public Action SetTerrainPaintTextures; public Action SetTerrainEditBrushSize; public Action SetTerrainEditBrushAmount; public Action SetTerrainEditBrushTargetValue; public Action SetTerrainEditBrushTextureTargetValue; public Action SetTerrainIsReadingPaintHeight; public Action SetTerrainUIMode; public Action SetObjects; public GetBoolFunction IsObjectDragged; public Action SetDraggableObjectMessage; public Action SetDraggableObjectState; public Action SetIsSelectedObjectFocusBtnInteractable; public Action SetIsSelectedObjectDuplicateBtnInteractable; public Action SetIsSelectedObjectDeleteBtnInteractable; public Action SetIsSelectedPrefabFindBtnInteractable; public Action SetIsSelectedObjectSleepPropertyInteractable; public Action SetSelectedObjectIsSleepOnStartPropertyValue; public Action SetIsSelectedObjectColorPropertyInteractable; public Action SetSelectedObjectColorPropertyValue; public Action SetSelectedObjectVariationPropertyValue; public Action> ShowPopupConfirmDeleteObject; public Action ShowWP8RenderLevelIconBugDialog; public void OnDestroy() { IsCursorOverUI = null; GetCameraPerspectiveGizmoRightPixelOffset = null; GetObliqueCameraPerspectiveRightPixelOffset = null; SetLevelIcon = null; SetTerrainWidth = null; SetTerrainLength = null; SetTerrainHeight = null; SetTerrainBaseTextures = null; SetTerrainBrushes = null; SetTerrainPaintTextures = null; SetTerrainEditBrushSize = null; SetTerrainEditBrushAmount = null; SetTerrainEditBrushTargetValue = null; SetTerrainEditBrushTextureTargetValue = null; SetTerrainIsReadingPaintHeight = null; SetTerrainUIMode = null; IsObjectDragged = null; SetObjects = null; SetDraggableObjectMessage = null; SetDraggableObjectState = null; SetIsSelectedObjectFocusBtnInteractable = null; SetIsSelectedObjectDuplicateBtnInteractable = null; SetIsSelectedObjectDeleteBtnInteractable = null; SetIsSelectedPrefabFindBtnInteractable = null; SetIsSelectedObjectSleepPropertyInteractable = null; SetSelectedObjectIsSleepOnStartPropertyValue = null; SetIsSelectedObjectColorPropertyInteractable = null; SetSelectedObjectColorPropertyValue = null; SetSelectedObjectVariationPropertyValue = null; ShowPopupConfirmDeleteObject = null; ShowWP8RenderLevelIconBugDialog = null; } } public class EventHandlers { public enum ETerrainChangeHeightMode { RAISE = 0, LOWER = 1 } public class BoolEventArgs : EventArgs { public readonly bool Value; public BoolEventArgs(bool p_value) { Value = p_value; } } public class IntEventArgs : EventArgs { public readonly int Value; public IntEventArgs(int p_value) { Value = p_value; } } public class FloatEventArgs : EventArgs { public readonly float Value; public FloatEventArgs(float p_value) { Value = p_value; } } public class StringEventArgs : EventArgs { public readonly string Value; public StringEventArgs(string p_value) { Value = p_value; } } public class ColorEventArgs : EventArgs { public readonly Color Value; public ColorEventArgs(Color p_value) { Value = p_value; } } public class TextureEventArgs : EventArgs { public readonly Texture2D Value; public TextureEventArgs(Texture2D p_value) { Value = p_value; } } public class EditModeEventArgs : EventArgs { public readonly LE_EEditMode EditMode; public EditModeEventArgs(LE_EEditMode p_editMode) { EditMode = p_editMode; } } public class TerrainEditModeEventArgs : EventArgs { public readonly LE_ETerrainEditMode EditMode; public TerrainEditModeEventArgs(LE_ETerrainEditMode p_editMode) { EditMode = p_editMode; } } public class TerrainChangeHeightModeEventArgs : EventArgs { public readonly ETerrainChangeHeightMode ChangeHeightMode; public TerrainChangeHeightModeEventArgs(ETerrainChangeHeightMode p_changeHeightMode) { ChangeHeightMode = p_changeHeightMode; } } public class ObjectEditSpaceEventArgs : EventArgs { public readonly LE_EObjectEditSpace EditSpace; public ObjectEditSpaceEventArgs(LE_EObjectEditSpace p_editSpace) { EditSpace = p_editSpace; } } public class ObjectEditModeEventArgs : EventArgs { public readonly LE_EObjectEditMode EditMode; public ObjectEditModeEventArgs(LE_EObjectEditMode p_editMode) { EditMode = p_editMode; } } public class ObjectSelectDraggableEventArgs : EventArgs { public readonly LE_Object ObjPrefab; public readonly string ResourcePath; public ObjectSelectDraggableEventArgs(LE_Object p_objPrefab, string p_resourcePath) { ObjPrefab = p_objPrefab; ResourcePath = p_resourcePath; } } public EventHandler OnEditModeBtn; public System.EventHandler OnUndoBtn; public System.EventHandler OnRedoBtn; public EventHandler OnTerrainWidthChanged; public EventHandler OnTerrainLengthChanged; public EventHandler OnTerrainHeightChanged; public EventHandler OnTerrainBaseTextureChanged; public EventHandler OnTerrainBrushChanged; public EventHandler OnTerrainPaintTextureChanged; public EventHandler OnTerrainPaintTextureAdded; public EventHandler OnTerrainEditBrushSizeChanged; public EventHandler OnTerrainEditBrushAmountChanged; public EventHandler OnTerrainEditBrushTargetValueChanged; public EventHandler OnTerrainEditBrushTextureTargetValueChanged; public EventHandler OnTerrainEditDirectionChanged; public EventHandler OnTerrainChangeHeightModeChanged; public EventHandler OnTerrainIsDirectedSmoothChanged; public System.EventHandler OnTerrainCreateBtn; public EventHandler OnTerrainEditModeBtn; public System.EventHandler OnTerrainReadPaintHeightBtn; public EventHandler OnObjectEditSpaceBtn; public EventHandler OnObjectEditModeBtn; public EventHandler OnObjectSelectDraggable; public System.EventHandler OnSelectedObjectFocusBtn; public System.EventHandler OnSelectedObjectDuplicateBtn; public System.EventHandler OnSelectedObjectDeleteBtn; public EventHandler OnSelectedObjectIsSleepOnStartChanged; public EventHandler OnSelectedObjectColorChanged; public EventHandler OnSelectedObjectVariationIndexChanged; public System.EventHandler OnSelectedPrefabFindBtn; public System.EventHandler OnLevelSaveBtn; public System.EventHandler OnLevelLoadBtn; public System.EventHandler OnLevelRenderIconBtn; public void OnDestroy() { OnEditModeBtn = null; OnUndoBtn = null; OnRedoBtn = null; OnTerrainWidthChanged = null; OnTerrainLengthChanged = null; OnTerrainHeightChanged = null; OnTerrainBaseTextureChanged = null; OnTerrainPaintTextureChanged = null; OnTerrainPaintTextureAdded = null; OnTerrainBrushChanged = null; OnTerrainEditBrushSizeChanged = null; OnTerrainEditBrushAmountChanged = null; OnTerrainEditBrushTargetValueChanged = null; OnTerrainEditBrushTextureTargetValueChanged = null; OnTerrainEditDirectionChanged = null; OnTerrainChangeHeightModeChanged = null; OnTerrainIsDirectedSmoothChanged = null; OnTerrainCreateBtn = null; OnTerrainEditModeBtn = null; OnTerrainReadPaintHeightBtn = null; OnObjectEditSpaceBtn = null; OnObjectEditModeBtn = null; OnObjectSelectDraggable = null; OnSelectedObjectFocusBtn = null; OnSelectedObjectDuplicateBtn = null; OnSelectedObjectDeleteBtn = null; OnSelectedObjectIsSleepOnStartChanged = null; OnSelectedObjectColorChanged = null; OnSelectedObjectVariationIndexChanged = null; OnSelectedPrefabFindBtn = null; OnLevelSaveBtn = null; OnLevelLoadBtn = null; OnLevelRenderIconBtn = null; } } private static LE_GUIInterface s_instance; public readonly Delegates delegates = new Delegates(); public readonly EventHandlers events = new EventHandlers(); public static LE_GUIInterface Instance { get { return s_instance; } } private void Awake() { if (s_instance != null) { Debug.LogError("LE_GUIInterface: there is already an instance of LE_GUIInterface in this scene!"); } s_instance = this; } private void OnDestroy() { if (s_instance == this) { s_instance = null; } events.OnDestroy(); delegates.OnDestroy(); } public void OnEditModeBtn(int p_editMode) { if (events.OnEditModeBtn != null) { events.OnEditModeBtn(this, new EventHandlers.EditModeEventArgs((LE_EEditMode)p_editMode)); } } public void OnUndoBtn() { if (events.OnUndoBtn != null) { events.OnUndoBtn(this, EventArgs.Empty); } } public void OnRedoBtn() { if (events.OnRedoBtn != null) { events.OnRedoBtn(this, EventArgs.Empty); } } public void OnTerrainWidthChanged(string p_widthIntegerValue) { if (events.OnTerrainWidthChanged != null) { events.OnTerrainWidthChanged(this, new EventHandlers.StringEventArgs(p_widthIntegerValue)); } } public void OnTerrainLengthChanged(string p_lengthIntegerValue) { if (events.OnTerrainLengthChanged != null) { events.OnTerrainLengthChanged(this, new EventHandlers.StringEventArgs(p_lengthIntegerValue)); } } public void OnTerrainHeightChanged(string p_heightIntegerValue) { if (events.OnTerrainHeightChanged != null) { events.OnTerrainHeightChanged(this, new EventHandlers.StringEventArgs(p_heightIntegerValue)); } } public void OnTerrainBaseTextureChanged(int p_baseTextureIndex) { if (events.OnTerrainBaseTextureChanged != null) { events.OnTerrainBaseTextureChanged(this, new EventHandlers.IntEventArgs(p_baseTextureIndex)); } } public void OnTerrainPaintTextureChanged(int p_paintTextureIndex) { if (events.OnTerrainPaintTextureChanged != null) { events.OnTerrainPaintTextureChanged(this, new EventHandlers.IntEventArgs(p_paintTextureIndex)); } } public void OnTerrainPaintTextureAdded(Texture2D p_texture) { if (events.OnTerrainPaintTextureAdded != null) { events.OnTerrainPaintTextureAdded(this, new EventHandlers.TextureEventArgs(p_texture)); } } public void OnTerrainBrushChanged(int p_brushIndex) { if (events.OnTerrainBrushChanged != null) { events.OnTerrainBrushChanged(this, new EventHandlers.IntEventArgs(p_brushIndex)); } } public void OnTerrainEditBrushSizeChanged(float p_brushSize) { if (events.OnTerrainEditBrushSizeChanged != null) { events.OnTerrainEditBrushSizeChanged(this, new EventHandlers.FloatEventArgs(p_brushSize)); } } public void OnTerrainEditBrushAmountChanged(float p_brushAmount) { if (events.OnTerrainEditBrushAmountChanged != null) { events.OnTerrainEditBrushAmountChanged(this, new EventHandlers.FloatEventArgs(p_brushAmount)); } } public void OnTerrainEditBrushTargetValueChanged(float p_brushTargetValue) { if (events.OnTerrainEditBrushTargetValueChanged != null) { events.OnTerrainEditBrushTargetValueChanged(this, new EventHandlers.FloatEventArgs(p_brushTargetValue)); } } public void OnTerrainEditBrushTextureTargetValueChanged(float p_brushTargetValue) { if (events.OnTerrainEditBrushTextureTargetValueChanged != null) { events.OnTerrainEditBrushTextureTargetValueChanged(this, new EventHandlers.FloatEventArgs(p_brushTargetValue)); } } public void OnTerrainEditDirectionChanged(float p_direction) { if (events.OnTerrainEditDirectionChanged != null) { events.OnTerrainEditDirectionChanged(this, new EventHandlers.FloatEventArgs(p_direction)); } } public void OnTerrainChangeHeightModeChanged(bool p_isRaiseHeight) { if (events.OnTerrainChangeHeightModeChanged != null) { events.OnTerrainChangeHeightModeChanged(this, new EventHandlers.TerrainChangeHeightModeEventArgs((!p_isRaiseHeight) ? EventHandlers.ETerrainChangeHeightMode.LOWER : EventHandlers.ETerrainChangeHeightMode.RAISE)); } } public void OnTerrainIsDirectedSmoothChanged(bool p_isDirectedSmooth) { if (events.OnTerrainIsDirectedSmoothChanged != null) { events.OnTerrainIsDirectedSmoothChanged(this, new EventHandlers.BoolEventArgs(p_isDirectedSmooth)); } } public void OnTerrainCreateBtn() { if (events.OnTerrainCreateBtn != null) { events.OnTerrainCreateBtn(this, EventArgs.Empty); } } public void OnTerrainEditModeBtn(int p_editMode) { if (events.OnTerrainEditModeBtn != null) { events.OnTerrainEditModeBtn(this, new EventHandlers.TerrainEditModeEventArgs((LE_ETerrainEditMode)p_editMode)); } } public void OnTerrainReadPaintHeightBtn() { if (events.OnTerrainReadPaintHeightBtn != null) { events.OnTerrainReadPaintHeightBtn(this, EventArgs.Empty); } } public void OnObjectEditSpaceBtn(bool p_falseForLocal_trueForGlobal) { if (events.OnObjectEditSpaceBtn != null) { events.OnObjectEditSpaceBtn(this, new EventHandlers.ObjectEditSpaceEventArgs(p_falseForLocal_trueForGlobal ? LE_EObjectEditSpace.WORLD : LE_EObjectEditSpace.SELF)); } } public void OnObjectEditModeBtn(int p_editMode) { if (events.OnObjectEditModeBtn != null) { events.OnObjectEditModeBtn(this, new EventHandlers.ObjectEditModeEventArgs((LE_EObjectEditMode)p_editMode)); } } public void OnObjectSelectDraggable(LE_Object p_objPrefab, string p_resourcePath) { if (events.OnObjectSelectDraggable != null) { events.OnObjectSelectDraggable(this, new EventHandlers.ObjectSelectDraggableEventArgs(p_objPrefab, p_resourcePath)); } } public void OnSelectedObjectFocusBtn() { if (events.OnSelectedObjectFocusBtn != null) { events.OnSelectedObjectFocusBtn(this, EventArgs.Empty); } } public void OnSelectedObjectDuplicateBtn() { if (events.OnSelectedObjectDuplicateBtn != null) { events.OnSelectedObjectDuplicateBtn(this, EventArgs.Empty); } } public void OnSelectedObjectDeleteBtn() { if (events.OnSelectedObjectDeleteBtn != null) { events.OnSelectedObjectDeleteBtn(this, EventArgs.Empty); } } public void OnSelectedObjectIsSleepOnStartChanged(bool p_isSleepingOnStart) { if (events.OnSelectedObjectIsSleepOnStartChanged != null) { events.OnSelectedObjectIsSleepOnStartChanged(this, new EventHandlers.BoolEventArgs(p_isSleepingOnStart)); } } public void OnSelectedObjectColorChanged(Color p_color) { if (events.OnSelectedObjectColorChanged != null) { events.OnSelectedObjectColorChanged(this, new EventHandlers.ColorEventArgs(p_color)); } } public void OnSelectedObjectVariationIndexChanged(int p_variationIndex) { if (events.OnSelectedObjectVariationIndexChanged != null) { events.OnSelectedObjectVariationIndexChanged(this, new EventHandlers.IntEventArgs(p_variationIndex)); } } public void OnSelectedPrefabFindBtn() { if (events.OnSelectedPrefabFindBtn != null) { events.OnSelectedPrefabFindBtn(this, EventArgs.Empty); } } public void OnLevelSaveBtn() { if (events.OnLevelSaveBtn != null) { events.OnLevelSaveBtn(this, EventArgs.Empty); } } public void OnLevelLoadBtn() { if (events.OnLevelLoadBtn != null) { events.OnLevelLoadBtn(this, EventArgs.Empty); } } public void OnLevelRenderIconBtn() { if (events.OnLevelRenderIconBtn != null) { events.OnLevelRenderIconBtn(this, EventArgs.Empty); } } } }