Implement the new settings browser.

This commit is contained in:
2023-11-11 11:56:36 +08:00
parent 166478e4bb
commit 1803e1dee7
30 changed files with 3775 additions and 459 deletions

View File

@@ -6,8 +6,6 @@ namespace Cryville.Crtr.Config.UI {
[SerializeField]
RectTransform m_on;
[SerializeField]
RectTransform m_handleArea;
[SerializeField]
RectTransform m_handle;
protected override void OnValueUpdated() { }
@@ -31,10 +29,6 @@ namespace Cryville.Crtr.Config.UI {
UpdateGraphics();
}
}
void OnRectTransformDimensionsChange() {
m_handleArea.sizeDelta = new Vector2(m_handle.rect.height - m_handle.rect.width, 0);
}
#pragma warning restore IDE0051
void UpdateGraphics() {

View File

@@ -1,23 +1,20 @@
using System;
using UnityEngine;
namespace Cryville.Crtr.Config.UI {
public class PVPNumber : PVPNumberBase {
[SerializeField]
RectTransform m_on;
protected override void OnValueUpdated() {
base.OnValueUpdated();
if (Range != null && Range.Length == 2) {
var min = (double)Range[0];
var max = (double)Range[1];
var value = Convert.ToDouble(RawValue);
if (value < min) {
value = min;
RawValue = value;
}
else if (value > max) {
value = max;
RawValue = value;
}
SetRatio((float)((value - min) / (max - min)));
}
if (Range == null || Range.Length != 2) return;
var min = (double)Range[0];
var max = (double)Range[1];
var value = Convert.ToDouble(RawValue);
float ratio = (float)((value - min) / (max - min));
SetRatio(ratio);
m_on.anchorMax = new Vector2(ratio, m_on.anchorMax.y);
}
protected override double GetValue(double ratio, float deltaTime, double min, double max) {
// if (LogarithmicMode) throw new NotImplementedException();

View File

@@ -1,57 +1,69 @@
using System;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Cryville.Crtr.Config.UI {
public abstract class PVPNumberBase : PropertyValuePanel {
[SerializeField]
EventTrigger m_ctn;
public abstract class PVPNumberBase : PropertyValuePanel, IInitializePotentialDragHandler, IDragHandler, IEndDragHandler, IPointerClickHandler {
[SerializeField]
RectTransform m_handleArea;
[SerializeField]
Image m_handle;
[SerializeField]
Text m_text;
#pragma warning disable IDE0051
TMP_InputField m_text;
protected void Start() {
var ev = new EventTrigger.Entry { eventID = EventTriggerType.InitializePotentialDrag };
ev.callback.AddListener(e => OnInitializePotentialDrag((PointerEventData)e));
m_ctn.triggers.Add(ev);
ev = new EventTrigger.Entry { eventID = EventTriggerType.Drag };
ev.callback.AddListener(e => OnDrag((PointerEventData)e));
m_ctn.triggers.Add(ev);
ev = new EventTrigger.Entry { eventID = EventTriggerType.EndDrag };
ev.callback.AddListener(e => OnEndDrag((PointerEventData)e));
m_ctn.triggers.Add(ev);
ev = new EventTrigger.Entry { eventID = EventTriggerType.PointerClick };
ev.callback.AddListener(e => OnPointerClick((PointerEventData)e));
m_ctn.triggers.Add(ev);
m_text.interactable = SetMapped;
m_text.onValueChanged.AddListener(OnTextEdited);
m_text.onDeselect.AddListener(OnTextDeselected);
OnIdle();
}
void OnTextEdited(string value) {
if (!m_text.isFocused) return;
if (double.TryParse(value, out var result)) {
try { MappedValue = result; }
catch (Exception) { }
}
}
void OnTextDeselected(string value) {
OnValueUpdated();
}
protected override void OnValueUpdated() {
m_text.text = MappedValue.ToString();
if (Range != null && Range.Length == 2) {
var min = (double)Range[0];
var max = (double)Range[1];
var value = Convert.ToDouble(RawValue);
if (value < min) {
value = min;
RawValue = value;
}
else if (value > max) {
value = max;
RawValue = value;
}
}
if (!m_text.isFocused) {
m_text.text = MappedValue.ToString();
}
}
protected virtual void OnIdle() { }
void Update() {
protected virtual void Update() {
if (use) {
SetRatio(GetRatioFromPos(pp));
SetValueFromPos(pp);
}
}
void OnRectTransformDimensionsChange() {
m_handleArea.sizeDelta = new Vector2(m_handle.rectTransform.rect.height - m_handle.rectTransform.rect.width, 0);
}
#pragma warning restore IDE0051
Camera cam;
Vector2 pp;
bool use, nouse;
public void OnInitializePotentialDrag(PointerEventData eventData) {
eventData.useDragThreshold = false;
// eventData.useDragThreshold = false;
pp = eventData.position;
}

View File

@@ -1,33 +1,27 @@
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Cryville.Crtr.Config.UI {
public class PropertyCategoryPanel : MonoBehaviour {
[SerializeField]
private GameObject m_propertyPrefab;
GameObject m_propertyPrefab;
Text _nameLabel = null;
[SerializeField]
TextMeshProUGUI m_nameLabel;
string _name;
string m_name;
public string Name {
get { return _name; }
set { _name = value; UpdateName(); }
get { return m_name; }
set { m_name = value; UpdateName(); }
}
bool _collapsed = false;
bool m_collapsed = false;
public bool Collapsed {
get { return _collapsed; }
set { _collapsed = value; UpdateName(); }
get { return m_collapsed; }
set { m_collapsed = value; UpdateName(); }
}
#pragma warning disable IDE0051
void Awake() {
_nameLabel = transform.Find("Name/__text__").GetComponent<Text>();
transform.Find("Name").GetComponent<Button>().onClick.AddListener(ToggleCollapsed);
}
#pragma warning restore IDE0051
public void Load(string name, IEnumerable<IPropertyAdapter> props) {
Name = name.ToUpper();
foreach (var prop in props) {
@@ -36,7 +30,7 @@ namespace Cryville.Crtr.Config.UI {
}
}
void ToggleCollapsed() {
public void ToggleCollapsed() {
Collapsed = !Collapsed;
for (int i = 1; i < transform.childCount; i++) {
transform.GetChild(i).gameObject.SetActive(!Collapsed);
@@ -44,7 +38,7 @@ namespace Cryville.Crtr.Config.UI {
}
private void UpdateName() {
_nameLabel.text = (Collapsed ? "+ " : "- ") + Name;
m_nameLabel.text = (Collapsed ? "+ " : "- ") + Name;
}
}
}

View File

@@ -1,5 +1,5 @@
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Cryville.Crtr.Config.UI {
public class PropertyPanel : MonoBehaviour {
@@ -12,18 +12,15 @@ namespace Cryville.Crtr.Config.UI {
[SerializeField]
GameObject m_string;
Text _key;
Transform _valueContainer;
[SerializeField]
TextMeshProUGUI m_key;
[SerializeField]
Transform m_valueContainer;
PropertyValuePanel _value;
#pragma warning disable IDE0051
void Awake() {
_key = transform.Find("Key").GetComponent<Text>();
_valueContainer = transform.Find("Value");
}
#pragma warning restore IDE0051
public void Load(IPropertyAdapter prop) {
_key.text = prop.Name;
m_key.text = prop.Name;
GameObject vp;
switch (prop.Type) {
@@ -33,7 +30,7 @@ namespace Cryville.Crtr.Config.UI {
case PropertyType.String: vp = m_string; break;
default: return;
}
_value = Instantiate(vp, _valueContainer, false).GetComponent<PropertyValuePanel>();
_value = Instantiate(vp, m_valueContainer, false).GetComponent<PropertyValuePanel>();
_value.Init(prop);
}
}

View File

@@ -8,8 +8,16 @@ namespace Cryville.Crtr.Config.UI {
_property.ValueChanged += GetValue;
GetValue();
}
protected bool SetMapped { get { return _property.SetMapped; } }
protected object[] Range { get { return _property.Range; } }
public object MappedValue { get; private set; }
private object m_mappedValue;
public object MappedValue {
get { return m_mappedValue; }
set {
m_rawValue = _property.MapValueInverse(value);
SetValue();
}
}
private object m_rawValue;
public object RawValue {
get { return m_rawValue; }
@@ -21,19 +29,19 @@ namespace Cryville.Crtr.Config.UI {
protected abstract void OnValueUpdated();
void GetValue() {
if (_property.SetMapped) {
MappedValue = _property.GetValue();
m_rawValue = _property.MapValueInverse(MappedValue);
m_mappedValue = _property.GetValue();
m_rawValue = _property.MapValueInverse(m_mappedValue);
}
else {
m_rawValue = _property.GetValue();
MappedValue = _property.MapValue(m_rawValue);
m_mappedValue = _property.MapValue(m_rawValue);
}
OnValueUpdated();
}
void SetValue() {
var outRaw = RawValue;
MappedValue = _property.MapValue(outRaw);
_property.SetValue(_property.SetMapped ? MappedValue : outRaw);
m_mappedValue = _property.MapValue(outRaw);
_property.SetValue(_property.SetMapped ? m_mappedValue : outRaw);
OnValueUpdated();
}
}