using System; using NodeCanvas.Framework; using ParadoxNotion.Serialization.FullSerializer; using UnityEngine; namespace Reset.Core{ [Serializable] public abstract class ValueGroup{ public interface ISmoothable{ public BBParameter changeEasing{ get; set; } public BBParameter changeSmoothing{ get; set; } public BBParameter Smoothing { get; set; } public BBParameter Easing{ get; set; } } public static void ChangeSmoothingEasing(ISmoothable valueGroup, SettingValue settingValue){ switch (valueGroup.changeSmoothing.value) { case ValueChangeAction.NewValue: settingValue.targetSmoothing = valueGroup.Smoothing.value; settingValue.currentSmoothing = valueGroup.Smoothing.value; break; case ValueChangeAction.ResetValue: settingValue.targetSmoothing = settingValue.defaultSmoothing; break; } switch (valueGroup.changeEasing.value) { case ValueChangeAction.NewValue: settingValue.targetEasing = valueGroup.Easing.value; break; case ValueChangeAction.ResetValue: settingValue.targetEasing = settingValue.defaultEasing; break; } } } // Enum options for individual settings public enum ValueChangeAction{ NoChange, NewValue, ResetValue, RelativeValue, // Placeholder for using as altering existing value } // Individual bool setting for each ring. Three of these will be used. public class OrbitalFollowValueGroup : ValueGroup.ISmoothable{ public string label; public BBParameter changeHeight; public BBParameter height; public BBParameter changeRadius; public BBParameter radius; // Smoothing [SerializeField] private BBParameter _changeSmoothing; [SerializeField] public BBParameter _smoothing; public BBParameter changeSmoothing{ get => _changeSmoothing; set => _changeSmoothing = value.value; } public BBParameter Smoothing{ get => _smoothing; set => _smoothing = value.value; } // Easing [SerializeField] private BBParameter _changeEasing; [SerializeField] public BBParameter _easing; public BBParameter changeEasing{ get => _changeEasing; set => _changeEasing = value.value; } public BBParameter Easing{ get => _easing; set => _easing = value.value; } public OrbitalFollowValueGroup(string newLabel){ label = newLabel; changeHeight = ValueChangeAction.NoChange; height = 0f; changeRadius = ValueChangeAction.NoChange; radius = 0f; changeSmoothing = new BBParameter(); Smoothing = new BBParameter().value = 0f; changeEasing = new BBParameter(); Easing = new BBParameter().value = 0f; } public static void UpdateValue(OrbitalFollowValueGroup valueGroup, SettingValue heightSetting, SettingValue radiusSetting){ switch (valueGroup.changeHeight.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: heightSetting.Value = valueGroup.height.value; break; case ValueChangeAction.ResetValue: heightSetting.Value = heightSetting.defaultValue; break; case ValueChangeAction.RelativeValue: heightSetting.Value += valueGroup.height.value; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } switch (valueGroup.changeRadius.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: radiusSetting.Value = valueGroup.radius.value; break; case ValueChangeAction.ResetValue: radiusSetting.Value = radiusSetting.defaultValue; break; case ValueChangeAction.RelativeValue: radiusSetting.Value += valueGroup.radius.value; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } ValueGroup.ChangeSmoothingEasing(valueGroup, heightSetting); // Debug.Log($"{heightSetting.targetSmoothing} {valueGroup.Smoothing.value}"); ValueGroup.ChangeSmoothingEasing(valueGroup, radiusSetting); } [Obsolete] public static void UpdateValue(OrbitalFollowValueGroup valueGroup, ref float targetProperty, ref float defaultProperty){ switch (valueGroup.changeHeight.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: targetProperty = valueGroup.height.value; break; case ValueChangeAction.ResetValue: targetProperty = defaultProperty; break; } switch (valueGroup.changeRadius.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: targetProperty = valueGroup.radius.value; break; case ValueChangeAction.ResetValue: targetProperty = defaultProperty; break; } } } public struct CurveValueGroup{ // Done public string label; public BBParameter value; public BBParameter changeValue; public CurveValueGroup(string newLabel){ changeValue = ValueChangeAction.NoChange; value = new AnimationCurve(); label = newLabel; } public static void UpdateValue(CurveValueGroup valueGroup, SettingValue settingValue){ switch (valueGroup.changeValue.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: settingValue.Value = valueGroup.value.value; break; case ValueChangeAction.ResetValue: settingValue.Value = settingValue.defaultValue; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } } } public struct EnumValueGroup{ // Done public string label; public BBParameter value; public BBParameter changeValue; public EnumValueGroup(string newLabel, Enum enumType){ changeValue = ValueChangeAction.NoChange; value = enumType; label = newLabel; } public static void UpdateValue(EnumValueGroup valueGroup, SettingValue settingValue){ switch (valueGroup.changeValue.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: settingValue.Value = (T)(object)valueGroup.value.value; break; case ValueChangeAction.ResetValue: settingValue.Value = settingValue.defaultValue; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } } } public class Vector3ValueGroup : ValueGroup.ISmoothable{ // Done public string label; // Value public BBParameter value; public BBParameter changeX; public BBParameter changeY; public BBParameter changeZ; // Smoothing [SerializeField] private BBParameter _changeSmoothing; [SerializeField] public BBParameter _smoothing; public BBParameter changeSmoothing{ get => _changeSmoothing; set => _changeSmoothing = value.value; } public BBParameter Smoothing{ get => _smoothing; set => _smoothing = value.value; } // Easing [SerializeField] private BBParameter _changeEasing; [SerializeField] public BBParameter _easing; public BBParameter changeEasing{ get => _changeEasing; set => _changeEasing = value.value; } public BBParameter Easing{ get => _easing; set => _easing = value.value; } // Constructor public Vector3ValueGroup(string newLabel){ changeX = ValueChangeAction.NoChange; changeY = ValueChangeAction.NoChange; changeZ = ValueChangeAction.NoChange; value = new BBParameter{ value = Vector3.zero }; label = newLabel; changeSmoothing = new BBParameter(); Smoothing = new BBParameter().value = 0f; changeEasing = new BBParameter(); Easing = new BBParameter().value = 0f; } public static void UpdateValue(Vector3ValueGroup valueGroup, SettingValue settingValue){ Vector3 newValue = settingValue.Value; switch (valueGroup.changeX.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: newValue.x = valueGroup.value.value.x; break; case ValueChangeAction.ResetValue: newValue.x = settingValue.defaultValue.x; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } switch (valueGroup.changeY.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: newValue.y = valueGroup.value.value.y; break; case ValueChangeAction.ResetValue: newValue.y = settingValue.defaultValue.y; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } switch (valueGroup.changeZ.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: newValue.z = valueGroup.value.value.z; break; case ValueChangeAction.ResetValue: newValue.z = settingValue.defaultValue.z; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } settingValue.Value = newValue; ValueGroup.ChangeSmoothingEasing(valueGroup, settingValue); } [Obsolete] public static void UpdateValue(Vector3ValueGroup valueGroup, ref Vector3 targetProperty, ref Vector3 defaultProperty){ switch (valueGroup.changeX.value) { case ValueChangeAction.NewValue: targetProperty.x = valueGroup.value.value.x; break; case ValueChangeAction.ResetValue: targetProperty.x = defaultProperty.x; break; } switch (valueGroup.changeY.value) { case ValueChangeAction.NewValue: targetProperty.y = valueGroup.value.value.y; break; case ValueChangeAction.ResetValue: targetProperty.y = defaultProperty.y; break; } switch (valueGroup.changeZ.value) { case ValueChangeAction.NewValue: targetProperty.z = valueGroup.value.value.z; break; case ValueChangeAction.ResetValue: targetProperty.z = defaultProperty.z; break; } } } [Serializable] public class Vector2ValueGroup : ValueGroup.ISmoothable{ // Done public string label; // Value public BBParameter value; public BBParameter changeX; public BBParameter changeY; // Smoothing [SerializeField] private BBParameter _changeSmoothing; [SerializeField] public BBParameter _smoothing; public BBParameter changeSmoothing{ get => _changeSmoothing; set => _changeSmoothing = value.value; } public BBParameter Smoothing{ get => _smoothing; set => _smoothing = value.value; } // Easing [SerializeField] private BBParameter _changeEasing; [SerializeField] public BBParameter _easing; public BBParameter changeEasing{ get => _changeEasing; set => _changeEasing = value.value; } public BBParameter Easing{ get => _easing; set => _easing = value.value; } // Constructor public Vector2ValueGroup(string newLabel){ changeX = new BBParameter().value = ValueChangeAction.NoChange; changeY = new BBParameter().value = ValueChangeAction.NoChange; value = new BBParameter{ value = Vector2.zero }; label = newLabel; changeSmoothing = new BBParameter(); Smoothing = new BBParameter().value = 0f; changeEasing = new BBParameter(); Easing = new BBParameter().value = 0f; } public static void UpdateValue(Vector2ValueGroup valueGroup, SettingValue settingValue){ Vector2 newValue = settingValue.Value; switch (valueGroup.changeX.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: newValue.x = valueGroup.value.value.x; break; case ValueChangeAction.ResetValue: newValue.x = settingValue.defaultValue.x; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } switch (valueGroup.changeY.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: newValue.y = valueGroup.value.value.y; break; case ValueChangeAction.ResetValue: newValue.y = settingValue.defaultValue.y; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } settingValue.Value = newValue; ValueGroup.ChangeSmoothingEasing(valueGroup, settingValue); } [Obsolete] public static void UpdateValue(Vector2ValueGroup valueGroup, ref Vector2 targetProperty, ref Vector2 defaultProperty){ switch (valueGroup.changeX.value) { case ValueChangeAction.NewValue: targetProperty.x = valueGroup.value.value.x; break; case ValueChangeAction.ResetValue: targetProperty.x = defaultProperty.x; break; } switch (valueGroup.changeY.value) { case ValueChangeAction.NewValue: targetProperty.y = valueGroup.value.value.y; break; case ValueChangeAction.ResetValue: targetProperty.y = defaultProperty.y; break; } } } [Serializable] public class FloatValueGroup : ValueGroup.ISmoothable{ // Done, fixed public string label; // Value public BBParameter changeValue; public BBParameter value; // Smoothing [SerializeField] private BBParameter _changeSmoothing; [SerializeField] public BBParameter _smoothing; public BBParameter changeSmoothing{ get => _changeSmoothing; set => _changeSmoothing = value.value; } public BBParameter Smoothing{ get => _smoothing; set => _smoothing = value.value; } // Easing [SerializeField] private BBParameter _changeEasing; [SerializeField] public BBParameter _easing; public BBParameter changeEasing{ get => _changeEasing; set => _changeEasing = value.value; } public BBParameter Easing{ get => _easing; set => _easing = value.value; } // Constructor public FloatValueGroup(string newLabel){ label = newLabel; value = new BBParameter().value = 0f; changeValue = new BBParameter(); changeSmoothing = new BBParameter(); Smoothing = new BBParameter().value = 0f; changeEasing = new BBParameter(); Easing = new BBParameter().value = 0f; } public static void UpdateValue(FloatValueGroup valueGroup, SettingValue settingValue){ switch (valueGroup.changeValue.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: settingValue.Value = valueGroup.value.value; break; case ValueChangeAction.ResetValue: settingValue.Value = settingValue.defaultValue; break; case ValueChangeAction.RelativeValue: settingValue.Value += valueGroup.value.value; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } ValueGroup.ChangeSmoothingEasing(valueGroup, settingValue); } [Obsolete] public static void UpdateValue(FloatValueGroup valueGroup, ref float targetProperty, ref float defaultProperty){ Debug.LogWarning("Deprecated call of UpdateValue(). Use the new one with only two arguments!"); switch (valueGroup.changeValue.value) { case ValueChangeAction.NewValue: targetProperty = valueGroup.value.value; break; case ValueChangeAction.ResetValue: targetProperty = defaultProperty; break; case ValueChangeAction.RelativeValue: targetProperty += valueGroup.value.value; break; } } } public struct BoolValueGroup{ public string label; public BBParameter value; public BBParameter changeValue; public BoolValueGroup(string newLabel){ label = newLabel; value = true; changeValue = ValueChangeAction.NoChange; } public static void UpdateValue(BoolValueGroup valueGroup, SettingValue settingValue){ switch (valueGroup.changeValue.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: settingValue.Value = valueGroup.value.value; break; case ValueChangeAction.ResetValue: settingValue.Value = settingValue.defaultValue; break; default: Debug.LogError($"No value was changed for part of {valueGroup.label} because this ValueChangeAction was not supported."); break; } } [Obsolete] public static void UpdateValue(BoolValueGroup valueGroup, ref bool targetProperty, ref bool defaultProperty){ switch (valueGroup.changeValue.value) { case ValueChangeAction.NoChange: break; case ValueChangeAction.NewValue: targetProperty = valueGroup.value.value; break; case ValueChangeAction.ResetValue: targetProperty = defaultProperty; break; } } } }