Add custom editor
This commit is contained in:
parent
c0dd3dfdc5
commit
8fe292818e
@ -14,8 +14,8 @@ namespace NEG.Utils.Serialization
|
|||||||
{
|
{
|
||||||
return @this.FindPropertyRelative(GetBackingFieldName(name));
|
return @this.FindPropertyRelative(GetBackingFieldName(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetBackingFieldName(string name)
|
public static string GetBackingFieldName(string name)
|
||||||
{
|
{
|
||||||
#if NET_STANDARD || NET_STANDARD_2_1
|
#if NET_STANDARD || NET_STANDARD_2_1
|
||||||
return string.Create(1/*<*/ + name.Length + 16/*>k__BackingField*/, name, static (span, name) =>
|
return string.Create(1/*<*/ + name.Length + 16/*>k__BackingField*/, name, static (span, name) =>
|
||||||
|
|||||||
@ -10,9 +10,9 @@ using UnityEngine;
|
|||||||
namespace NEG.UI
|
namespace NEG.UI
|
||||||
{
|
{
|
||||||
[PublicAPI]
|
[PublicAPI]
|
||||||
public abstract class UiManager
|
public abstract class UiManager : IDisposable
|
||||||
{
|
{
|
||||||
public static UiManager Instance { get; private set; }
|
public static UiManager Instance { get; protected set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Current area shown on screen.
|
/// Current area shown on screen.
|
||||||
@ -131,7 +131,9 @@ namespace NEG.UI
|
|||||||
return;
|
return;
|
||||||
UpdatePopupsState(false);
|
UpdatePopupsState(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual void Dispose() => Instance = null;
|
||||||
|
|
||||||
protected void PopupClosed(PopupData data)
|
protected void PopupClosed(PopupData data)
|
||||||
{
|
{
|
||||||
if (currentShownPopup.data != data)
|
if (currentShownPopup.data != data)
|
||||||
@ -141,9 +143,10 @@ namespace NEG.UI
|
|||||||
}
|
}
|
||||||
UpdatePopupsState(false);
|
UpdatePopupsState(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void SetDefaultPopup(IDefaultPopup popup) => currentDefaultPopup = popup;
|
protected void SetDefaultPopup(IDefaultPopup popup) => currentDefaultPopup = popup;
|
||||||
|
|
||||||
|
|
||||||
private void UpdatePopupsState(bool forceShow, int priority = 0, PopupData data = null)
|
private void UpdatePopupsState(bool forceShow, int priority = 0, PopupData data = null)
|
||||||
{
|
{
|
||||||
if (forceShow)
|
if (forceShow)
|
||||||
|
|||||||
@ -2,7 +2,8 @@
|
|||||||
"name": "NEG.UI.UnityUi.Editor",
|
"name": "NEG.UI.UnityUi.Editor",
|
||||||
"rootNamespace": "",
|
"rootNamespace": "",
|
||||||
"references": [
|
"references": [
|
||||||
"GUID:e2aaf8effe1c9634d87b2edda6988a6a"
|
"GUID:e2aaf8effe1c9634d87b2edda6988a6a",
|
||||||
|
"GUID:5928dc8d9173fd348aa77d4593ca3fd8"
|
||||||
],
|
],
|
||||||
"includePlatforms": [
|
"includePlatforms": [
|
||||||
"Editor"
|
"Editor"
|
||||||
|
|||||||
94
NEG/UI/UnityUi/Editor/OverridableNavigationDrawer.cs
Normal file
94
NEG/UI/UnityUi/Editor/OverridableNavigationDrawer.cs
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
using NEG.UI.UnityUi.Buttons;
|
||||||
|
using NEG.Utils.Serialization;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditor.UIElements;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using UnityEngine.UIElements;
|
||||||
|
using ObjectField = UnityEditor.Search.ObjectField;
|
||||||
|
|
||||||
|
using Toggle = UnityEngine.UIElements.Toggle;
|
||||||
|
|
||||||
|
namespace NEG.UI.UnityUi.Editor
|
||||||
|
{
|
||||||
|
[CustomPropertyDrawer(typeof(OverridableNavigation))]
|
||||||
|
public class OverridableNavigationDrawer: PropertyDrawer
|
||||||
|
{
|
||||||
|
public override VisualElement CreatePropertyGUI(SerializedProperty property)
|
||||||
|
{
|
||||||
|
var container = new VisualElement()
|
||||||
|
{
|
||||||
|
style =
|
||||||
|
{
|
||||||
|
paddingLeft = 3,
|
||||||
|
paddingRight = -2,
|
||||||
|
flexDirection = FlexDirection.Row,
|
||||||
|
justifyContent = Justify.SpaceBetween
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
string name = property.name;
|
||||||
|
if (name.Length > 0)
|
||||||
|
{
|
||||||
|
name = $"{char.ToUpper(name[0])}{name[1..]}";
|
||||||
|
}
|
||||||
|
|
||||||
|
var innerContainer = new VisualElement()
|
||||||
|
{
|
||||||
|
style =
|
||||||
|
{
|
||||||
|
flexDirection = FlexDirection.Row,
|
||||||
|
justifyContent = Justify.SpaceBetween,
|
||||||
|
marginRight = 2,
|
||||||
|
flexGrow = 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var label = new Label(name)
|
||||||
|
{
|
||||||
|
style =
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var enabler = new Toggle();
|
||||||
|
enabler.BindProperty(property.FindPropertyRelative("<Override>k__BackingField"));
|
||||||
|
|
||||||
|
var field = new ObjectField()
|
||||||
|
{
|
||||||
|
style =
|
||||||
|
{
|
||||||
|
flexGrow = 100
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var selectableField = property.FindAutoPropertyRelative(nameof(OverridableNavigation.Selectable));
|
||||||
|
|
||||||
|
field.BindProperty(selectableField);
|
||||||
|
field.objectType = typeof(Selectable);
|
||||||
|
|
||||||
|
innerContainer.Add(label);
|
||||||
|
innerContainer.Add(enabler);
|
||||||
|
|
||||||
|
container.Add(innerContainer);
|
||||||
|
container.Add(field);
|
||||||
|
|
||||||
|
container.RegisterCallback<GeometryChangedEvent>(_ =>
|
||||||
|
{
|
||||||
|
var panel = container.panel;
|
||||||
|
var size = panel.visualTree.contentRect.size;
|
||||||
|
|
||||||
|
// magic value measured with ruler, may change in the future!
|
||||||
|
field.style.maxWidth = size.x * 0.55f + 15;
|
||||||
|
});
|
||||||
|
|
||||||
|
field.SetEnabled(enabler.value);
|
||||||
|
enabler.RegisterValueChangedCallback(v =>
|
||||||
|
{
|
||||||
|
field.SetEnabled(v.newValue);
|
||||||
|
});
|
||||||
|
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 63ba4de7f1a04763bf035b4a88317a7d
|
||||||
|
timeCreated: 1685212390
|
||||||
@ -19,7 +19,7 @@ namespace NEG.UI.UnityUi
|
|||||||
/// <para> - UI/PopupCanvas - prefab with canvas to create popups (will be created on every scene)</para>
|
/// <para> - UI/PopupCanvas - prefab with canvas to create popups (will be created on every scene)</para>
|
||||||
/// <para> - UI/DefaultPopupPrefab - prefab of default popup with 2 options (has to have <see cref="MonoDefaultPopup"/> component)</para>
|
/// <para> - UI/DefaultPopupPrefab - prefab of default popup with 2 options (has to have <see cref="MonoDefaultPopup"/> component)</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class MonoUiManager : UiManager
|
public class MonoUiManager : UiManager, IDisposable
|
||||||
{
|
{
|
||||||
//TODO: use default unity selection
|
//TODO: use default unity selection
|
||||||
//TODO: window snaping to slots
|
//TODO: window snaping to slots
|
||||||
@ -60,6 +60,12 @@ namespace NEG.UI.UnityUi
|
|||||||
inputModule = (UiInputModule)Activator.CreateInstance(inputModuleType);
|
inputModule = (UiInputModule)Activator.CreateInstance(inputModuleType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Dispose()
|
||||||
|
{
|
||||||
|
base.Dispose();
|
||||||
|
Instance = null;
|
||||||
|
}
|
||||||
|
|
||||||
private void SpawnDefaultPopup()
|
private void SpawnDefaultPopup()
|
||||||
{
|
{
|
||||||
var canvas = Object.Instantiate(canvasPrefab);
|
var canvas = Object.Instantiate(canvasPrefab);
|
||||||
@ -67,6 +73,5 @@ namespace NEG.UI.UnityUi
|
|||||||
SetDefaultPopup(Object.Instantiate(defaultPopupPrefab, canvas.transform));
|
SetDefaultPopup(Object.Instantiate(defaultPopupPrefab, canvas.transform));
|
||||||
currentDefaultPopup.Close(true);
|
currentDefaultPopup.Close(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,6 +91,8 @@ namespace NEG.Utils
|
|||||||
|
|
||||||
public static Vector3 zzz(this Vector3 a) { return new Vector3(a.z, a.z, a.z); }
|
public static Vector3 zzz(this Vector3 a) { return new Vector3(a.z, a.z, a.z); }
|
||||||
|
|
||||||
|
public static Vector3 x0y(this Vector2 a) { return new Vector3(a.x, 0f, a.y);}
|
||||||
|
|
||||||
//swizzles of size 4
|
//swizzles of size 4
|
||||||
public static Vector4 xxxx(this Vector3 a) { return new Vector4(a.x, a.x, a.x, a.x); }
|
public static Vector4 xxxx(this Vector3 a) { return new Vector4(a.x, a.x, a.x, a.x); }
|
||||||
public static Vector4 yxxx(this Vector3 a) { return new Vector4(a.y, a.x, a.x, a.x); }
|
public static Vector4 yxxx(this Vector3 a) { return new Vector4(a.y, a.x, a.x, a.x); }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user