Rewrite property panel to adapt to ruleset config.

This commit is contained in:
2023-07-27 22:07:20 +08:00
parent 9b091a0084
commit bc51a45df8
39 changed files with 825 additions and 298 deletions

View File

@@ -3,12 +3,12 @@ using System;
namespace Cryville.Common.ComponentModel {
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class RangeAttribute : Attribute {
public RangeAttribute(float min, float max) {
public RangeAttribute(double min, double max) {
Min = min;
Max = max;
}
public float Min { get; set; }
public float Max { get; set; }
public double Min { get; set; }
public double Max { get; set; }
}
}

View File

@@ -3,9 +3,9 @@ using System;
namespace Cryville.Common.ComponentModel {
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class StepAttribute : Attribute {
public StepAttribute(float step) {
public StepAttribute(double step) {
Step = step;
}
public float Step { get; set; }
public double Step { get; set; }
}
}

View File

@@ -1,76 +0,0 @@
using Cryville.Common.ComponentModel;
using System.Reflection;
using UnityEngine;
using UnityEngine.UI;
using RangeAttribute = Cryville.Common.ComponentModel.RangeAttribute;
namespace Cryville.Crtr.Browsing {
public class PropertyPanel : MonoBehaviour {
[SerializeField]
GameObject m_bool;
[SerializeField]
GameObject m_number;
[SerializeField]
GameObject m_string;
PropertyInfo _property;
object _target;
Text _key;
Transform _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(PropertyInfo prop, object target) {
_target = target;
_property = prop;
_key.text = prop.Name;
GameObject vp;
if (prop.PropertyType == typeof(bool)) vp = m_bool;
else if (prop.PropertyType == typeof(float) || prop.PropertyType == typeof(int)) vp = m_number;
else if (prop.PropertyType == typeof(string)) vp = m_string;
else return;
_value = GameObject.Instantiate(vp, _valueContainer, false).GetComponent<PropertyValuePanel>();
if (_value is PVPNumber) {
var t = (PVPNumber)_value;
t.IntegerMode = prop.PropertyType == typeof(int);
var attr = prop.GetCustomAttributes(typeof(RangeAttribute), true);
if (attr.Length > 0) {
var u = (RangeAttribute)attr[0];
t.Range = new Vector2(u.Min, u.Max);
}
attr = prop.GetCustomAttributes(typeof(PrecisionAttribute), true);
if (attr.Length > 0) {
var u = (PrecisionAttribute)attr[0];
t.Precision = u.Precision;
}
attr = prop.GetCustomAttributes(typeof(StepAttribute), true);
if (attr.Length > 0) {
var u = (StepAttribute)attr[0];
t.MaxStep = u.Step;
}
attr = prop.GetCustomAttributes(typeof(LogarithmicScaleAttribute), true);
if (attr.Length > 0) {
t.LogarithmicMode = true;
}
}
_value.Callback = SetValueToObject;
GetValueFromObject();
}
void GetValueFromObject() {
_value.Value = _property.GetValue(_target, null);
}
void SetValueToObject(object value) {
_property.SetValue(_target, value, null);
GetValueFromObject();
}
}
}

View File

@@ -1,9 +0,0 @@
using System;
using UnityEngine;
namespace Cryville.Crtr.Browsing {
public abstract class PropertyValuePanel : MonoBehaviour {
public Action<object> Callback { protected get; set; }
public abstract object Value { get; set; }
}
}

View File

@@ -14,7 +14,7 @@ namespace Cryville.Crtr.Config {
Transform m_content;
[SerializeField]
SettingsPanel m_genericConfigPanel;
PropertyMasterPanel m_genericConfigPanel;
[SerializeField]
InputConfigPanel m_inputConfigPanel;
@@ -56,7 +56,7 @@ namespace Cryville.Crtr.Config {
}
}
m_genericConfigPanel.Target = _rscfg.generic;
m_genericConfigPanel.Adapter = new DefaultPropertyMasterAdapter(_rscfg.generic);
var proxy = new InputProxy(ruleset.Root, null, new Vector2(Screen.width, Screen.height));
proxy.LoadFrom(_rscfg.inputs);

View File

@@ -0,0 +1,102 @@
using Cryville.Common.ComponentModel;
using System;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
namespace Cryville.Crtr.Config {
public interface IPropertyAdapter {
string Category { get; }
string Name { get; }
PropertyType Type { get; }
object[] Range { get; }
object GetValue();
void SetValue(object value);
object MapValue(object value);
bool SetMapped { get; }
object MapValueInverse(object value);
}
public enum PropertyType {
Unknown,
Number,
SteppedNumber,
Boolean,
String,
}
public class DefaultPropertyAdapter : IPropertyAdapter {
readonly object _target;
readonly PropertyInfo _prop;
readonly string m_category;
public string Category { get { return m_category; } }
readonly string m_name;
public string Name { get { return m_name; } }
readonly PropertyType m_type = PropertyType.Unknown;
public PropertyType Type { get { return m_type; } }
readonly object[] m_range;
public object[] Range { get { return m_range; } }
public object GetValue() { return _prop.GetValue(_target, null); }
public void SetValue(object value) { _prop.SetValue(_target, value, null); }
double _precision;
double _step;
bool _logarithmic;
public object MapValue(object value) {
if (Type == PropertyType.Number || Type == PropertyType.SteppedNumber) {
var result = (double)value;
if (_step != 0) result *= _step;
if (_logarithmic) result = Math.Pow(Math.E, result);
if (_precision != 0) result = Math.Round(result / _precision) * _precision;
return Convert.ChangeType(result, _prop.PropertyType);
}
return value;
}
public bool SetMapped { get { return true; } }
public object MapValueInverse(object value) {
if (Type == PropertyType.Number || Type == PropertyType.SteppedNumber) {
var result = Convert.ToDouble(value);
if (_logarithmic) result = Math.Log(result);
if (_step != 0) result /= _step;
return result;
}
return value;
}
public DefaultPropertyAdapter(object target, PropertyInfo prop) {
_target = target;
_prop = prop;
var attrs = prop.GetCustomAttributes(typeof(CategoryAttribute), true);
if (attrs.Length > 0) m_category = ((CategoryAttribute)attrs.Single()).Category;
m_name = prop.Name;
if (prop.PropertyType == typeof(bool)) m_type = PropertyType.Boolean;
else if (prop.PropertyType == typeof(char)) throw new NotSupportedException();
else if (prop.PropertyType.IsPrimitive) {
m_type = prop.GetCustomAttributes(typeof(StepAttribute), true).Length > 0
? PropertyType.SteppedNumber
: PropertyType.Number;
var attr = prop.GetCustomAttributes(typeof(RangeAttribute), true);
if (attr.Length > 0) {
var u = (RangeAttribute)attr.Single();
m_range = new object[] { u.Min, u.Max };
}
attr = prop.GetCustomAttributes(typeof(PrecisionAttribute), true);
if (attr.Length > 0) {
var u = (PrecisionAttribute)attr.Single();
_precision = u.Precision;
}
attr = prop.GetCustomAttributes(typeof(StepAttribute), true);
if (attr.Length > 0) {
var u = (StepAttribute)attr.Single();
_step = u.Step;
}
attr = prop.GetCustomAttributes(typeof(LogarithmicScaleAttribute), true);
if (attr.Length > 0) {
_logarithmic = true;
}
}
else if (prop.PropertyType == typeof(string)) m_type = PropertyType.String;
else return;
}
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 9653d5e145f2866439a0fcd1b27f49c4
guid: 9b3e9219783719544bcbceade34a1090
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace Cryville.Crtr.Config {
public interface IPropertyMasterAdapter {
string DefaultCategory { get; }
IEnumerable<IPropertyAdapter> GetProperties();
}
public class DefaultPropertyMasterAdapter : IPropertyMasterAdapter {
readonly object _target;
public DefaultPropertyMasterAdapter(object target) {
if (target == null) throw new ArgumentNullException("target");
_target = target;
}
public string DefaultCategory { get { return "miscellaneous"; } }
public IEnumerable<IPropertyAdapter> GetProperties() {
return _target.GetType().GetProperties().Where(p => {
var attrs = p.GetCustomAttributes(typeof(BrowsableAttribute), true);
if (attrs.Length == 0) return true;
else return ((BrowsableAttribute)attrs.Single()).Browsable;
}).Select(p => new DefaultPropertyAdapter(_target, p));
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4e0b160d43716cf4d8ba20b5a7eafd13
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,14 +1,8 @@
using UnityEngine;
using UnityEngine.EventSystems;
namespace Cryville.Crtr.Browsing {
namespace Cryville.Crtr.Config {
public class PVPBool : PropertyValuePanel, IPointerClickHandler {
bool _value;
public override object Value {
get { return _value; }
set { _value = (bool)value; }
}
[SerializeField]
RectTransform m_on;
[SerializeField]
@@ -16,21 +10,22 @@ namespace Cryville.Crtr.Browsing {
[SerializeField]
RectTransform m_handle;
protected override void OnValueUpdated() { }
public void Toggle() {
_value = !_value;
Callback(Value);
RawValue = !(bool)RawValue;
}
const float SPEED = 8;
float _ratio;
#pragma warning disable IDE0051
void Update() {
if (_value && _ratio != 1) {
if ((bool)RawValue && _ratio != 1) {
_ratio += SPEED * Time.deltaTime;
if (_ratio > 1) _ratio = 1;
UpdateGraphics();
}
else if (!_value && _ratio != 0) {
else if (!(bool)RawValue && _ratio != 0) {
_ratio -= SPEED * Time.deltaTime;
if (_ratio < 0) _ratio = 0;
UpdateGraphics();

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: b281561aca5d19f43ba8af035de8ec98
guid: 362a7cfafb57b9f46bbca9ed88d18c53
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -0,0 +1,18 @@
using System;
namespace Cryville.Crtr.Config {
public class PVPNumber : PVPNumberBase {
protected override void OnValueUpdated() {
base.OnValueUpdated();
if (Range != null && Range.Length == 2) {
var min = (double)Range[0];
var max = (double)Range[1];
SetRatio((float)((Convert.ToDouble(RawValue) - min) / (max - min)));
}
}
protected override double GetValue(double ratio, float deltaTime, double min, double max) {
// if (LogarithmicMode) throw new NotImplementedException();
return (1 - ratio) * min + ratio * max;
}
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 1eb74ffd69f934d4a8eca80aa3077b6c
guid: 5b5d86b95e0bf894b86c63127d5ac06c
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -1,44 +1,9 @@
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Cryville.Crtr.Browsing {
public class PVPNumber : PropertyValuePanel {
static Color _steppedTint = new Color(1.0f, 0.8f, 0.5f);
double m_value;
public override object Value {
get {
float s_value = GetDisplayValue();
return IntegerMode ? (int)s_value : (object)s_value;
}
set {
if (value is double) m_value = (double)value;
else m_value = IntegerMode ? (int)value : (double)(float)value;
float s_value = GetDisplayValue();
m_text.text = s_value.ToString();
if (Range != null && MaxStep == 0) {
SetRatio((float)(m_value - Range.Value.x) / (Range.Value.y - Range.Value.x));
}
}
}
float GetDisplayValue() {
double s_value = m_value;
if (Precision > 0)
s_value = Math.Round(s_value / Precision) * Precision;
if (IntegerMode)
s_value = Math.Round(s_value);
return (float)s_value;
}
public bool IntegerMode { get; set; }
public bool LogarithmicMode { get; set; }
public float MaxStep { get; set; }
public double Precision { get; set; }
public Vector2? Range { get; set; }
namespace Cryville.Crtr.Config {
public abstract class PVPNumberBase : PropertyValuePanel {
[SerializeField]
EventTrigger m_ctn;
[SerializeField]
@@ -48,7 +13,7 @@ namespace Cryville.Crtr.Browsing {
[SerializeField]
Text m_text;
#pragma warning disable IDE0051
void Start() {
protected void Start() {
var ev = new EventTrigger.Entry { eventID = EventTriggerType.InitializePotentialDrag };
ev.callback.AddListener(e => OnInitializePotentialDrag((PointerEventData)e));
m_ctn.triggers.Add(ev);
@@ -61,15 +26,17 @@ namespace Cryville.Crtr.Browsing {
ev = new EventTrigger.Entry { eventID = EventTriggerType.PointerClick };
ev.callback.AddListener(e => OnPointerClick((PointerEventData)e));
m_ctn.triggers.Add(ev);
if (MaxStep != 0) {
m_handle.color = _steppedTint;
SetRatio(0.5f);
}
OnIdle();
}
protected override void OnValueUpdated() {
m_text.text = MappedValue.ToString();
}
protected virtual void OnIdle() { }
void Update() {
if (use && MaxStep != 0) {
if (use) {
SetRatio(GetRatioFromPos(pp));
SetValueFromPos(pp);
}
@@ -99,7 +66,6 @@ namespace Cryville.Crtr.Browsing {
}
if (use) {
pp = eventData.position;
if (MaxStep == 0) SetValueFromPos(eventData.position);
eventData.Use();
}
}
@@ -107,8 +73,7 @@ namespace Cryville.Crtr.Browsing {
public void OnEndDrag(PointerEventData eventData) {
if (!nouse) {
SetValueFromPos(eventData.position);
Callback(Value);
if (MaxStep != 0) SetRatio(0.5f);
OnIdle();
eventData.Use();
use = false;
}
@@ -117,7 +82,6 @@ namespace Cryville.Crtr.Browsing {
public void OnPointerClick(PointerEventData eventData) {
SetValueFromPos(eventData.position);
Callback(Value);
eventData.Use();
}
@@ -131,25 +95,21 @@ namespace Cryville.Crtr.Browsing {
}
void SetValueFromPos(Vector2 pos) {
double min = double.NegativeInfinity, max = double.PositiveInfinity;
if (Range != null && Range.Length == 2) {
min = (double)Range[0];
max = (double)Range[1];
}
double ratio = GetRatioFromPos(pos);
double result;
if (MaxStep == 0) {
if (LogarithmicMode) throw new NotImplementedException();
else result = (1 - ratio) * Range.Value.x + ratio * Range.Value.y;
}
else {
double delta = (ratio > 0.5 ? 1 : -1) * Math.Pow((ratio - 0.5f) * 2, 2) * MaxStep * Time.deltaTime;
if (LogarithmicMode) result = Math.Pow(Math.E, Math.Log(m_value) + delta);
else result = m_value + delta;
}
if (Range != null) {
if (result < Range.Value.x) result = Range.Value.x;
else if (result > Range.Value.y) result = Range.Value.y;
}
Value = result;
double result = GetValue(ratio, Time.deltaTime, min, max);
if (result < min) result = min;
else if (result > max) result = max;
RawValue = result;
}
void SetRatio(float ratio) {
protected abstract double GetValue(double ratio, float deltaTime, double min, double max);
protected void SetRatio(float ratio) {
m_handle.rectTransform.anchorMin = new Vector2(ratio, m_handle.rectTransform.anchorMin.y);
m_handle.rectTransform.anchorMax = new Vector2(ratio, m_handle.rectTransform.anchorMax.y);
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 32fb9b8479cd8294296453d1aa651ff4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,14 @@
using System;
namespace Cryville.Crtr.Config {
public class PVPNumberStepped : PVPNumberBase {
protected override void OnIdle() {
SetRatio(0.5f);
}
protected override double GetValue(double ratio, float deltaTime, double min, double max) {
double delta = (ratio > 0.5 ? 1 : -1) * Math.Pow((ratio - 0.5f) * 2, 2) * deltaTime;
// if (LogarithmicMode) return Math.Pow(Math.E, Math.Log(m_value) + delta);
return Convert.ToDouble(RawValue) + delta;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f754d98e38098654a878fc9121db536d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,17 +1,8 @@
using UnityEngine.UI;
namespace Cryville.Crtr.Browsing {
namespace Cryville.Crtr.Config {
public class PVPString : PropertyValuePanel {
string m_value;
public override object Value {
get {
return m_value;
}
set {
m_value = (string)value;
_inputField.text = m_value;
}
}
protected override void OnValueUpdated() { _inputField.text = (string)MappedValue; }
InputField _inputField;
@@ -21,8 +12,7 @@ namespace Cryville.Crtr.Browsing {
}
void OnValueChanged(string value) {
m_value = value;
Callback(Value);
RawValue = value;
}
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: aadf11739189bc94e9cb4f702eb7ccd3
guid: 1b9a6e3b503784e4aa78215e9b004a8f
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -1,9 +1,8 @@
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEngine.UI;
namespace Cryville.Crtr.Browsing {
namespace Cryville.Crtr.Config {
public class PropertyCategoryPanel : MonoBehaviour {
[SerializeField]
private GameObject m_propertyPrefab;
@@ -29,11 +28,11 @@ namespace Cryville.Crtr.Browsing {
}
#pragma warning restore IDE0051
public void Load(string name, IEnumerable<PropertyInfo> props, object target) {
public void Load(string name, IEnumerable<IPropertyAdapter> props) {
Name = name.ToUpper();
foreach (var prop in props) {
var obj = GameObject.Instantiate<GameObject>(m_propertyPrefab, transform, false);
obj.GetComponent<PropertyPanel>().Load(prop, target);
var obj = Instantiate(m_propertyPrefab, transform, false);
obj.GetComponent<PropertyPanel>().Load(prop);
}
}

View File

@@ -1,8 +1,7 @@
fileFormatVersion: 2
guid: 3a13b7ea14b96e54ea8a7e6ba1275281
timeCreated: 1638435211
licenseType: Free
guid: 71da54f24b65d2f41a00c5a4bd0ff1bf
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0

View File

@@ -0,0 +1,51 @@
using System.Collections.Generic;
using UnityEngine;
namespace Cryville.Crtr.Config {
public class PropertyMasterPanel : MonoBehaviour {
[SerializeField]
GameObject m_categoryPrefab;
[SerializeField]
Transform m_container;
bool _invalidated = true;
public void Invalidate() {
_invalidated = true;
}
private IPropertyMasterAdapter m_adapter;
public IPropertyMasterAdapter Adapter {
get { return m_adapter; }
set {
m_adapter = value;
Invalidate();
}
}
public void Update() {
if (!_invalidated) return;
LoadProperties();
foreach (Transform c in m_container) Destroy(c.gameObject);
foreach (var c in _categories) {
var obj = Instantiate(m_categoryPrefab, m_container, false);
obj.GetComponent<PropertyCategoryPanel>().Load(c.Key, c.Value);
}
}
readonly Dictionary<string, List<IPropertyAdapter>> _categories = new Dictionary<string, List<IPropertyAdapter>>();
public void LoadProperties() {
_categories.Clear();
_invalidated = false;
if (Adapter == null) return;
foreach (var p in Adapter.GetProperties()) {
string category = p.Category;
if (category == null) category = Adapter.DefaultCategory;
if (!_categories.ContainsKey(category))
_categories.Add(category, new List<IPropertyAdapter>());
_categories[category].Add(p);
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4e6129746af547242bfa4e7404185936
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,40 @@
using UnityEngine;
using UnityEngine.UI;
namespace Cryville.Crtr.Config {
public class PropertyPanel : MonoBehaviour {
[SerializeField]
GameObject m_bool;
[SerializeField]
GameObject m_number;
[SerializeField]
GameObject m_steppedNumber;
[SerializeField]
GameObject m_string;
Text _key;
Transform _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;
GameObject vp;
switch (prop.Type) {
case PropertyType.Number: vp = m_number; break;
case PropertyType.SteppedNumber: vp = m_steppedNumber; break;
case PropertyType.Boolean: vp = m_bool; break;
case PropertyType.String: vp = m_string; break;
default: return;
}
_value = Instantiate(vp, _valueContainer, false).GetComponent<PropertyValuePanel>();
_value.Init(prop);
}
}
}

View File

@@ -1,8 +1,7 @@
fileFormatVersion: 2
guid: bcca29fea992ac24698a213f0e2baedc
timeCreated: 1638435590
licenseType: Free
guid: e47c05cfd69aa3f4d9886293e66877e9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0

View File

@@ -0,0 +1,39 @@
using UnityEngine;
namespace Cryville.Crtr.Config {
public abstract class PropertyValuePanel : MonoBehaviour {
IPropertyAdapter _property;
public void Init(IPropertyAdapter property) {
_property = property;
GetValue();
}
protected object[] Range { get { return _property.Range; } }
public object MappedValue { get; private set; }
private object m_rawValue;
public object RawValue {
get { return m_rawValue; }
set {
m_rawValue = value;
SetValue();
}
}
protected abstract void OnValueUpdated();
void GetValue() {
if (_property.SetMapped) {
MappedValue = _property.GetValue();
m_rawValue = _property.MapValueInverse(MappedValue);
}
else {
m_rawValue = _property.GetValue();
MappedValue = _property.MapValue(m_rawValue);
}
OnValueUpdated();
}
void SetValue() {
var outRaw = RawValue;
MappedValue = _property.MapValue(outRaw);
_property.SetValue(_property.SetMapped ? MappedValue : outRaw);
OnValueUpdated();
}
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: fca3da10a8b0677439885f6732ac3b6e
guid: c71cc11a0b1429c4fac91296bf8c5a63
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -14,13 +14,13 @@ namespace Cryville.Crtr.Config {
[Category("gameplay")]
[JsonProperty("sound_offset")]
[Step(0.04f)]
[Step(0.04)]
[Precision(1e-3)]
public float SoundOffset { get; set; }
[Category("deprecated")][Obsolete]
[JsonProperty("scroll_velocity")][DefaultValue(1)]
[LogarithmicScale][Step(0.5f)][Precision(1e-1)]
[LogarithmicScale][Step(0.5)][Precision(1e-1)]
public float ScrollVelocity { get; set; }
public Generic() {

View File

@@ -1,5 +1,6 @@
using Cryville.Common.Unity.UI;
using Cryville.Crtr.Browsing;
using Cryville.Crtr.Config;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
@@ -15,7 +16,7 @@ namespace Cryville.Crtr {
[SerializeField]
ProgressBar m_progressBar;
[SerializeField]
SettingsPanel m_settingsPanel;
PropertyMasterPanel m_settingsPanel;
[SerializeField]
TMP_Text m_title;
[SerializeField]
@@ -29,7 +30,7 @@ namespace Cryville.Crtr {
void Awake() {
Game.Init();
transform.parent.Find("Canvas/Contents").gameObject.SetActive(true);
m_settingsPanel.Target = Settings.Default;
m_settingsPanel.Adapter = new DefaultPropertyMasterAdapter(Settings.Default);
PushTitle("Chart Browser");
}
void Update() {

View File

@@ -6,7 +6,7 @@ using RangeAttribute = Cryville.Common.ComponentModel.RangeAttribute;
namespace Cryville.Crtr {
public class Settings {
[Category("gameplay")]
[Range(0f, 10f)][Precision(1)]
[Range(0, 10)][Precision(1)]
public int AreaJudgePrecision {
get {
return PlayerPrefs.GetInt("AreaJudgePrecision", 4);
@@ -17,7 +17,7 @@ namespace Cryville.Crtr {
}
[Category("graphics")]
[LogarithmicScale][Range(0.01f, 20f)][Step(1f)][Precision(1e-2)]
[LogarithmicScale][Range(-4.6, 3)][Step(1)][Precision(1e-2)]
public float BackwardClippingDistance {
get {
return PlayerPrefs.GetFloat("BackwardClippingDistance", 0.2f);
@@ -73,7 +73,7 @@ namespace Cryville.Crtr {
}
[Category("gameplay")]
[Step(0.02f)][Precision(1e-3)]
[Step(0.02)][Precision(1e-3)]
public float GraphicalOffset {
get {
return PlayerPrefs.GetFloat("GraphicalOffset", 0);
@@ -142,7 +142,7 @@ namespace Cryville.Crtr {
}
[Category("graphics")]
[LogarithmicScale][Range(0.1f, 200f)][Step(1f)][Precision(1e-1)]
[LogarithmicScale][Range(-2.3, 6)][Step(1)][Precision(1e-1)]
public float RenderDistance {
get {
return PlayerPrefs.GetFloat("RenderDistance", 4);
@@ -154,7 +154,7 @@ namespace Cryville.Crtr {
[Category("graphics")]
[Description("The span before the renderer fetches the object data again. Smaller value generates more detailed objects while increasing CPU load. Leave 0 to let the game decides the value automatically.")]
[Range(0, 0.1f)][Precision(1e-3)]
[Range(0, 0.1)][Precision(1e-3)]
public float RenderStep {
get {
return PlayerPrefs.GetFloat("RenderStep", 0f);
@@ -165,7 +165,7 @@ namespace Cryville.Crtr {
}
[Category("gameplay")]
[Step(0.1f)][Precision(1e-3)]
[Step(0.1)][Precision(1e-3)]
public float SoundOffset {
get {
return PlayerPrefs.GetFloat("SoundOffset", 0);
@@ -176,7 +176,7 @@ namespace Cryville.Crtr {
}
[Category("debug")]
[Range(0, float.PositiveInfinity)][Step(60f)][Precision(1e-1)]
[Range(0, double.PositiveInfinity)][Step(60)][Precision(1e-1)]
public float StartOffset {
get {
return PlayerPrefs.GetFloat("StartOffset", 0);
@@ -187,7 +187,7 @@ namespace Cryville.Crtr {
}
[Category("graphics")]
[LogarithmicScale][Range(15, 1024)][Step(2f)]
[LogarithmicScale][Range(1.15, 3.5)][Step(2)]
public int TargetFrameRate {
get {
return PlayerPrefs.GetInt("TargetFrameRate", 60);

View File

@@ -1,63 +0,0 @@
using Cryville.Crtr.Browsing;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using UnityEngine;
namespace Cryville.Crtr {
public class SettingsPanel : MonoBehaviour {
[SerializeField]
GameObject m_categoryPrefab;
[SerializeField]
Transform m_container;
bool _invalidated = true;
object m_target;
public object Target {
get {
return m_target;
}
set {
if (m_target != value) {
m_target = value;
_invalidated = true;
}
}
}
public void Update() {
if (!_invalidated) return;
LoadProperties();
foreach (Transform c in m_container) GameObject.Destroy(c.gameObject);
foreach (var c in _categories) {
var obj = GameObject.Instantiate<GameObject>(m_categoryPrefab, m_container, false);
obj.GetComponent<PropertyCategoryPanel>().Load(c.Key, c.Value, Target);
}
}
readonly Dictionary<string, List<PropertyInfo>> _categories = new Dictionary<string, List<PropertyInfo>>();
public void LoadProperties() {
_categories.Clear();
_invalidated = false;
if (Target == null) return;
foreach (var p in Target.GetType().GetProperties()) {
bool browsable = true;
string category = "miscellaneous";
foreach (var attr in p.GetCustomAttributes(true)) {
if (attr is BrowsableAttribute) {
browsable = ((BrowsableAttribute)attr).Browsable;
if (!browsable) break;
}
else if (attr is CategoryAttribute) {
category = ((CategoryAttribute)attr).Category;
}
}
if (!browsable) continue;
if (!_categories.ContainsKey(category))
_categories.Add(category, new List<PropertyInfo>());
_categories[category].Add(p);
}
}
}
}

View File

@@ -852,7 +852,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
m_IsActive: 1
--- !u!224 &221975152
RectTransform:
m_ObjectHideFlags: 0
@@ -2058,7 +2058,7 @@ MonoBehaviour:
m_GameObject: {fileID: 393496450}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9653d5e145f2866439a0fcd1b27f49c4, type: 3}
m_Script: {fileID: 11500000, guid: 4e6129746af547242bfa4e7404185936, type: 3}
m_Name:
m_EditorClassIdentifier:
m_categoryPrefab: {fileID: 146546, guid: da2cbd4e64356e448b1c9ff86b4fc1cb, type: 3}
@@ -2812,7 +2812,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 0.06}
m_AnchorMax: {x: 1, y: 0.46}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -24.483723, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &563043614
MonoBehaviour:
@@ -4685,7 +4685,7 @@ MonoBehaviour:
m_GameObject: {fileID: 885619953}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9653d5e145f2866439a0fcd1b27f49c4, type: 3}
m_Script: {fileID: 11500000, guid: 4e6129746af547242bfa4e7404185936, type: 3}
m_Name:
m_EditorClassIdentifier:
m_categoryPrefab: {fileID: 146546, guid: da2cbd4e64356e448b1c9ff86b4fc1cb, type: 3}
@@ -4829,7 +4829,7 @@ RectTransform:
m_AnchorMin: {x: 0.2, y: 0}
m_AnchorMax: {x: 0.8, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: -120.29024}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &888260407
MonoBehaviour:
@@ -5242,10 +5242,10 @@ RectTransform:
m_Father: {fileID: 1403805580}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 504.896, y: -176.40001}
m_SizeDelta: {x: 432.76797, y: 352.80002}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &968284699
MonoBehaviour:
@@ -6312,7 +6312,7 @@ RectTransform:
m_AnchorMin: {x: 1.02, y: 0.76}
m_AnchorMax: {x: 1.02, y: 1.02}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 111.004166, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 1, y: 0.5}
--- !u!114 &1359272827
MonoBehaviour:
@@ -7071,7 +7071,7 @@ RectTransform:
m_AnchorMin: {x: 0.2, y: 0}
m_AnchorMax: {x: 0.8, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: -120.290245}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1434469404
MonoBehaviour:
@@ -7500,7 +7500,7 @@ RectTransform:
m_AnchorMin: {x: -0.02, y: 0.4}
m_AnchorMax: {x: -0.02, y: 1.02}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 17.828012, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &1471998710
MonoBehaviour:
@@ -7920,7 +7920,7 @@ RectTransform:
m_AnchorMin: {x: 1.02, y: -0.02}
m_AnchorMax: {x: 1.02, y: 0.46}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 174.28836, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 1, y: 1}
--- !u!114 &1557938188
MonoBehaviour:
@@ -8313,7 +8313,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 0.42}
m_AnchorMax: {x: 1, y: 0.82}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -24.483719, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1655650689
MonoBehaviour:
@@ -9372,10 +9372,10 @@ RectTransform:
m_Father: {fileID: 950519998}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 25.96608, y: -31.751999}
m_SizeDelta: {x: 51.93216, y: 63.503998}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1900055153
GameObject:
@@ -9595,10 +9595,10 @@ RectTransform:
m_Father: {fileID: 1403805580}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 144.25598, y: -176.40001}
m_SizeDelta: {x: 288.512, y: 352.80002}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1989757280
MonoBehaviour:

View File

@@ -335,7 +335,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1470186229546822}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b281561aca5d19f43ba8af035de8ec98, type: 3}
m_Script: {fileID: 11500000, guid: 362a7cfafb57b9f46bbca9ed88d18c53, type: 3}
m_Name:
m_EditorClassIdentifier:
m_on: {fileID: 224839398696807804}

View File

@@ -376,7 +376,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1880403085839712}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1eb74ffd69f934d4a8eca80aa3077b6c, type: 3}
m_Script: {fileID: 11500000, guid: 5b5d86b95e0bf894b86c63127d5ac06c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ctn: {fileID: 114711521343559538}

View File

@@ -0,0 +1,385 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1293960940424714
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 224322010801419018}
- component: {fileID: 222565144279538310}
- component: {fileID: 114326201672791100}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &224322010801419018
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1293960940424714}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 224653211064760656}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.8, y: 0.1}
m_AnchorMax: {x: 1, y: 0.9}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222565144279538310
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1293960940424714}
m_CullTransparentMesh: 1
--- !u!114 &114326201672791100
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1293960940424714}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
m_FontStyle: 0
m_BestFit: 1
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 3
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: 4
--- !u!1 &1497667197614408
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 224019174924030892}
- component: {fileID: 222075825141302810}
- component: {fileID: 114173357929054556}
m_Layer: 5
m_Name: Background
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &224019174924030892
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1497667197614408}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 224101697062248844}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222075825141302810
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1497667197614408}
m_CullTransparentMesh: 1
--- !u!114 &114173357929054556
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1497667197614408}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7a17c6b12c477af44bbfd74a46ed0c72, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_sprite: {fileID: 21300000, guid: 25800dd96dfdc5a4cb51254a0c8e7eb2, type: 3}
m_compact: 5
--- !u!1 &1498335289241294
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 224546415986473210}
m_Layer: 5
m_Name: HandleArea
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &224546415986473210
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1498335289241294}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224224697565322868}
m_Father: {fileID: 224101697062248844}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -55.029804, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1577826420289738
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 224101697062248844}
- component: {fileID: 114711521343559538}
m_Layer: 5
m_Name: __container__
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &224101697062248844
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1577826420289738}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224019174924030892}
- {fileID: 224546415986473210}
m_Father: {fileID: 224653211064760656}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.28}
m_AnchorMax: {x: 0.78, y: 0.75}
m_AnchoredPosition: {x: 16, y: 0}
m_SizeDelta: {x: -32, y: 0}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &114711521343559538
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1577826420289738}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Delegates: []
--- !u!1 &1628857591852816
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 224224697565322868}
- component: {fileID: 222300804839943552}
- component: {fileID: 114706336791114340}
- component: {fileID: 114533540680025218}
m_Layer: 5
m_Name: Handle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &224224697565322868
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1628857591852816}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 224546415986473210}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: -0.6}
m_AnchorMax: {x: 0.5, y: 1.2}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222300804839943552
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1628857591852816}
m_CullTransparentMesh: 1
--- !u!114 &114706336791114340
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1628857591852816}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 0.8, b: 0.5, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: dc45dcebc56c4bf459d8099007e8a946, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &114533540680025218
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1628857591852816}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3}
m_Name:
m_EditorClassIdentifier:
m_AspectMode: 2
m_AspectRatio: 2.6764705
--- !u!1 &1880403085839712
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 224653211064760656}
- component: {fileID: -3063750884778366634}
m_Layer: 5
m_Name: PVNumberStepped
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &224653211064760656
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1880403085839712}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224101697062248844}
- {fileID: 224322010801419018}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &-3063750884778366634
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1880403085839712}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f754d98e38098654a878fc9121db536d, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ctn: {fileID: 114711521343559538}
m_handleArea: {fileID: 224546415986473210}
m_handle: {fileID: 114706336791114340}
m_text: {fileID: 114326201672791100}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c0445309ae827a644a4f2ff974ca9fe5
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 100100000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -309,6 +309,6 @@ MonoBehaviour:
m_GameObject: {fileID: 7940274472347270489}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: aadf11739189bc94e9cb4f702eb7ccd3, type: 3}
m_Script: {fileID: 11500000, guid: 1b9a6e3b503784e4aa78215e9b004a8f, type: 3}
m_Name:
m_EditorClassIdentifier:

View File

@@ -179,10 +179,12 @@ MonoBehaviour:
m_GameObject: {fileID: 184716}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: bcca29fea992ac24698a213f0e2baedc, type: 3}
m_Script: {fileID: 11500000, guid: e47c05cfd69aa3f4d9886293e66877e9, type: 3}
m_Name:
m_EditorClassIdentifier:
m_bool: {fileID: 1470186229546822, guid: a800312865d564c45a527666aecf4148, type: 3}
m_number: {fileID: 1880403085839712, guid: eac2dff5c86cca940a909d2a833beebe, type: 3}
m_steppedNumber: {fileID: 1880403085839712, guid: c0445309ae827a644a4f2ff974ca9fe5,
type: 3}
m_string: {fileID: 7940274472347270489, guid: d3142009b74dda042a75e9b808dde66d,
type: 3}

View File

@@ -291,7 +291,7 @@ MonoBehaviour:
m_GameObject: {fileID: 146546}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3a13b7ea14b96e54ea8a7e6ba1275281, type: 3}
m_Script: {fileID: 11500000, guid: 71da54f24b65d2f41a00c5a4bd0ff1bf, type: 3}
m_Name:
m_EditorClassIdentifier:
m_propertyPrefab: {fileID: 184716, guid: 32c94ddaa9280184eb9fa67692b906f6, type: 3}