Files
project-reset/Assets/Scripts/Core/ValueGroup.cs

430 lines
12 KiB
C#

using System;
using NodeCanvas.Framework;
using ParadoxNotion.Serialization.FullSerializer;
using UnityEngine;
namespace Reset.Core{
[Serializable]
public abstract class ValueGroup{
public interface ISmoothable{
public BBParameter<ValueChangeAction> changeEasing{ get; set; }
public BBParameter<ValueChangeAction> changeSmoothing{ get; set; }
public BBParameter<float> Smoothing { get; set; }
public BBParameter<float> 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<ValueChangeAction> changeHeight;
public BBParameter<float> height;
public BBParameter<ValueChangeAction> changeRadius;
public BBParameter<float> radius;
// Smoothing
[SerializeField] private BBParameter<ValueChangeAction> _changeSmoothing;
[SerializeField] public BBParameter<float> _smoothing;
public BBParameter<ValueChangeAction> changeSmoothing{
get => _changeSmoothing;
set => _changeSmoothing = value.value;
}
public BBParameter<float> Smoothing{
get => _smoothing;
set => _smoothing = value.value;
}
// Easing
[SerializeField] private BBParameter<ValueChangeAction> _changeEasing;
[SerializeField] public BBParameter<float> _easing;
public BBParameter<ValueChangeAction> changeEasing{
get => _changeEasing;
set => _changeEasing = value.value;
}
public BBParameter<float> 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<ValueChangeAction>();
Smoothing = new BBParameter<float>().value = 0f;
changeEasing = new BBParameter<ValueChangeAction>();
Easing = new BBParameter<float>().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<AnimationCurve> value;
public BBParameter<ValueChangeAction> 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<Enum> value;
public BBParameter<ValueChangeAction> 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<Vector3> value;
public BBParameter<ValueChangeAction> changeX;
public BBParameter<ValueChangeAction> changeY;
public BBParameter<ValueChangeAction> changeZ;
// Smoothing
[SerializeField] private BBParameter<ValueChangeAction> _changeSmoothing;
[SerializeField] public BBParameter<float> _smoothing;
public BBParameter<ValueChangeAction> changeSmoothing{
get => _changeSmoothing;
set => _changeSmoothing = value.value;
}
public BBParameter<float> Smoothing{
get => _smoothing;
set => _smoothing = value.value;
}
// Easing
[SerializeField] private BBParameter<ValueChangeAction> _changeEasing;
[SerializeField] public BBParameter<float> _easing;
public BBParameter<ValueChangeAction> changeEasing{
get => _changeEasing;
set => _changeEasing = value.value;
}
public BBParameter<float> Easing{
get => _easing;
set => _easing = value.value;
}
// Constructor
public Vector3ValueGroup(string newLabel){
changeX = ValueChangeAction.NoChange;
changeY = ValueChangeAction.NoChange;
changeZ = ValueChangeAction.NoChange;
value = new BBParameter<Vector3>{
value = Vector3.zero
};
label = newLabel;
changeSmoothing = new BBParameter<ValueChangeAction>();
Smoothing = new BBParameter<float>().value = 0f;
changeEasing = new BBParameter<ValueChangeAction>();
Easing = new BBParameter<float>().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<Vector2> value;
public BBParameter<ValueChangeAction> changeX;
public BBParameter<ValueChangeAction> changeY;
// Smoothing
[SerializeField] private BBParameter<ValueChangeAction> _changeSmoothing;
[SerializeField] public BBParameter<float> _smoothing;
public BBParameter<ValueChangeAction> changeSmoothing{
get => _changeSmoothing;
set => _changeSmoothing = value.value;
}
public BBParameter<float> Smoothing{
get => _smoothing;
set => _smoothing = value.value;
}
// Easing
[SerializeField] private BBParameter<ValueChangeAction> _changeEasing;
[SerializeField] public BBParameter<float> _easing;
public BBParameter<ValueChangeAction> changeEasing{
get => _changeEasing;
set => _changeEasing = value.value;
}
public BBParameter<float> Easing{
get => _easing;
set => _easing = value.value;
}
// Constructor
public Vector2ValueGroup(string newLabel){
changeX = new BBParameter<ValueChangeAction>().value = ValueChangeAction.NoChange;
changeY = new BBParameter<ValueChangeAction>().value = ValueChangeAction.NoChange;
value = new BBParameter<Vector2>{
value = Vector2.zero
};
label = newLabel;
changeSmoothing = new BBParameter<ValueChangeAction>();
Smoothing = new BBParameter<float>().value = 0f;
changeEasing = new BBParameter<ValueChangeAction>();
Easing = new BBParameter<float>().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<ValueChangeAction> changeValue;
public BBParameter<float> value;
// Smoothing
[SerializeField] private BBParameter<ValueChangeAction> _changeSmoothing;
[SerializeField] public BBParameter<float> _smoothing;
public BBParameter<ValueChangeAction> changeSmoothing{
get => _changeSmoothing;
set => _changeSmoothing = value.value;
}
public BBParameter<float> Smoothing{
get => _smoothing;
set => _smoothing = value.value;
}
// Easing
[SerializeField] private BBParameter<ValueChangeAction> _changeEasing;
[SerializeField] public BBParameter<float> _easing;
public BBParameter<ValueChangeAction> changeEasing{
get => _changeEasing;
set => _changeEasing = value.value;
}
public BBParameter<float> Easing{
get => _easing;
set => _easing = value.value;
}
// Constructor
public FloatValueGroup(string newLabel){
label = newLabel;
value = new BBParameter<float>().value = 0f;
changeValue = new BBParameter<ValueChangeAction>();
changeSmoothing = new BBParameter<ValueChangeAction>();
Smoothing = new BBParameter<float>().value = 0f;
changeEasing = new BBParameter<ValueChangeAction>();
Easing = new BBParameter<float>().value = 0f;
}
public static void UpdateValue(FloatValueGroup valueGroup, ref float targetProperty, ref float defaultProperty){
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<bool> value;
public BBParameter<ValueChangeAction> 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;
}
}
}
}