Implement the new settings browser.
This commit is contained in:
@@ -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() {
|
||||
|
@@ -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();
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user