Insanely huge initial commit

This commit is contained in:
2026-02-21 16:40:15 -08:00
parent 208d626100
commit f74c547a13
33825 changed files with 5213498 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[System.Serializable]
internal class ColorCurve
{
#pragma warning disable 0649 //disabling the error or unity will throw "field is never assigned" [..], because we actually assign the variables from the custom drawers
[SerializeField] public bool enabled;
[SerializeField] protected Gradient gradient;
[SerializeField, Attributes.MinValue(0.1f)] protected float duration;
[SerializeField, Range(0, 100)] protected float charsTimeOffset; //clamping to 100 because it repeates the behavior after it
#pragma warning restore 0649
public float GetDuration()
{
return duration;
}
bool isAppearance;
public void Initialize(bool isAppearance)
{
this.isAppearance = isAppearance;
if (duration < .1f)
{
duration = .1f;
}
}
public Color32 GetColor(float time, int characterIndex)
{
if (isAppearance)
return gradient.Evaluate(Mathf.Clamp01(time / duration));
return gradient.Evaluate(((time / duration) % 1f + characterIndex * (charsTimeOffset / 100f)) % 1f);
}
}
}

View File

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

View File

@@ -0,0 +1,12 @@
namespace Febucci.UI.Core
{
interface EffectEvaluator
{
void Initialize(int type);
bool isEnabled { get; }
float Evaluate(float time, int characterIndex);
float GetDuration();
}
}

View File

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

View File

@@ -0,0 +1,96 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[System.Serializable]
internal struct EmissionControl
{
#pragma warning disable 0649 //disables warning 0649, "value declared but never assigned", since Unity actually assigns the variable in the inspector through the [SerializeField] attribute, but the compiler doesn't know this and throws warnings
[SerializeField, Attributes.MinValue(0)] int cycles;
[SerializeField] AnimationCurve attackCurve;
[SerializeField, Attributes.MinValue(0)] float overrideDuration;
[SerializeField] bool continueForever;
[SerializeField] AnimationCurve decayCurve;
#pragma warning restore 0649
[System.NonSerialized] float maxDuration;
[System.NonSerialized] AnimationCurve intensityOverDuration;
[System.NonSerialized] float passedTime;
[System.NonSerialized] float cycleDuration;
[System.NonSerialized] public float effectWeigth;
public void Initialize(float effectsMaxDuration)
{
passedTime = 0;
Keyframe[] totalKeys = new Keyframe[
attackCurve.length + (continueForever ? 0 : decayCurve.length)
];
for (int i = 0; i < attackCurve.length; i++)
{
totalKeys[i] = attackCurve[i];
}
if (!continueForever)
{
if (overrideDuration > 0)
{
effectsMaxDuration = overrideDuration;
}
float attackDuration = attackCurve.CalculateCurveDuration();
for (int i = attackCurve.length; i < totalKeys.Length; i++)
{
totalKeys[i] = decayCurve[i - attackCurve.length];
totalKeys[i].time += effectsMaxDuration + attackDuration;
}
}
intensityOverDuration = new AnimationCurve(totalKeys);
intensityOverDuration.preWrapMode = WrapMode.Loop;
intensityOverDuration.postWrapMode = WrapMode.Loop;
this.cycleDuration = intensityOverDuration.CalculateCurveDuration();
effectWeigth = intensityOverDuration.Evaluate(passedTime); //sets the initial/start weight of the effect, so that effects will be correctly applied on the first frame
maxDuration = cycleDuration * cycles;
}
public float IncreaseEffectTime(float deltaTime)
{
if (deltaTime == 0)
return passedTime;
passedTime += deltaTime;
if (passedTime < 0)
passedTime = 0;
//inside duration
if (passedTime > cycleDuration) //increases cycle
{
if (continueForever)
{
effectWeigth = 1;
return passedTime;
}
}
//outside cycles
if (cycles > 0 && passedTime >= maxDuration)
{
effectWeigth = 0;
return 0;
}
effectWeigth = intensityOverDuration.Evaluate(passedTime);
return passedTime;
}
}
}

View File

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

View File

@@ -0,0 +1,75 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[System.Serializable]
internal class FloatCurve : EffectEvaluator
{
#pragma warning disable 0649 //disabling the error or unity will throw "field is never assigned" [..], because we actually assign the variables from the custom drawers
public bool enabled;
[SerializeField] protected float amplitude;
[SerializeField] protected AnimationCurve curve;
[SerializeField, HideInInspector] protected float defaultReturn;
[SerializeField, Range(0, 100)] protected float charsTimeOffset; //clamping to 100 because it repeates the behavior after it
[System.NonSerialized] float calculatedDuration;
#pragma warning restore 0649
public bool isEnabled => enabled;
public float GetDuration()
{
return calculatedDuration;
}
bool isAppearance;
public void Initialize(int type)
{
calculatedDuration = curve.CalculateCurveDuration();
isAppearance = type >= 3;
switch (type)
{
//mov
default:
case 0: defaultReturn = 0; break;
//scale
case 1: defaultReturn = 1; break;
//rot
case 2: defaultReturn = 0; break;
//app mov
case 3: defaultReturn = 0; break;
//app scale
case 4: defaultReturn = 1; break;
//app rot
case 5: defaultReturn = 0; break;
}
}
public float Evaluate(float time, int characterIndex)
{
if (!enabled)
return defaultReturn;
if (isAppearance)
{
return Mathf.LerpUnclamped(amplitude, defaultReturn, curve.Evaluate(time) * Mathf.Cos(Mathf.Deg2Rad * (characterIndex * charsTimeOffset / 2f)));
}
//behavior
return curve.Evaluate(time + characterIndex * (charsTimeOffset / 100f)) * amplitude;
}
}
}

View File

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

View File

@@ -0,0 +1,63 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[System.Serializable]
internal class PresetBaseValues
{
#pragma warning disable 0649 //disabling the error or unity will throw "field is never assigned" [..], because we actually assign the variables from the custom drawers
public string effectTag;
[SerializeField] public FloatCurve movementX;
[SerializeField] public FloatCurve movementY;
[SerializeField] public FloatCurve movementZ;
[SerializeField] public FloatCurve scaleX;
[SerializeField] public FloatCurve scaleY;
[SerializeField] public FloatCurve rotX;
[SerializeField] public FloatCurve rotY;
[SerializeField] public FloatCurve rotZ;
[SerializeField] public ColorCurve color;
#pragma warning restore 0649
public float GetMaxDuration()
{
float GetEffectEvaluatorDuration(EffectEvaluator effect)
{
if (effect.isEnabled)
return effect.GetDuration();
return 0;
}
return Mathf.Max
(
GetEffectEvaluatorDuration(movementX),
GetEffectEvaluatorDuration(movementY),
GetEffectEvaluatorDuration(movementZ),
GetEffectEvaluatorDuration(scaleX),
GetEffectEvaluatorDuration(scaleY),
color.enabled ? color.GetDuration() : 0
);
}
public virtual void Initialize(bool isAppearance)
{
int baseIdentifier = isAppearance ? 3 : 0;
movementX.Initialize(baseIdentifier);
movementY.Initialize(baseIdentifier);
movementZ.Initialize(baseIdentifier);
scaleX.Initialize(baseIdentifier + 1);
scaleY.Initialize(baseIdentifier + 1);
rotX.Initialize(baseIdentifier + 2);
rotY.Initialize(baseIdentifier + 2);
rotZ.Initialize(baseIdentifier + 2);
color.Initialize(isAppearance);
}
}
}

View File

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