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, ref float targetSmoothing, ref float targetEasing, ref float defaultSmoothing, ref float defaultEasing){ switch (valueGroup.changeSmoothing.value) { case ValueChangeAction.NewValue: targetSmoothing = valueGroup.Smoothing.value; break; case ValueChangeAction.ResetValue: targetSmoothing = defaultSmoothing; break; } switch (valueGroup.changeEasing.value) { case ValueChangeAction.NewValue: targetEasing = valueGroup.Easing.value; break; case ValueChangeAction.ResetValue: targetEasing = 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, ref float targetProperty, ref float defaultProperty){ switch (valueGroup.changeHeight.value) { case ValueChangeAction.NewValue: targetProperty = valueGroup.height.value; break; case ValueChangeAction.ResetValue: targetProperty = defaultProperty; break; } switch (valueGroup.changeRadius.value) { 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, ref AnimationCurve targetProperty, ref AnimationCurve defaultProperty){ switch (valueGroup.changeValue.value) { case ValueChangeAction.NewValue: targetProperty = valueGroup.value.value; break; case ValueChangeAction.ResetValue: targetProperty = defaultProperty; 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, ref Enum targetProperty, ref Enum defaultProperty){ switch (valueGroup.changeValue.value) { case ValueChangeAction.NewValue: targetProperty = valueGroup.value.value; break; case ValueChangeAction.ResetValue: targetProperty = defaultProperty; 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, 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, 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.NewValue: settingValue.Value = valueGroup.value.value; break; case ValueChangeAction.ResetValue: settingValue.Value = settingValue.defaultValue; break; case ValueChangeAction.RelativeValue: settingValue.Value += valueGroup.value.value; break; } ValueGroup.ChangeSmoothingEasing(valueGroup, ref settingValue.targetSmoothing, ref settingValue.targetEasing, ref settingValue.defaultEasing, ref settingValue.defaultSmoothing); } 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, ref bool targetProperty, ref bool defaultProperty){ switch (valueGroup.changeValue.value) { case ValueChangeAction.NewValue: targetProperty = valueGroup.value.value; break; case ValueChangeAction.ResetValue: targetProperty = defaultProperty; break; } } } }