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,8 @@
fileFormatVersion: 2
guid: fc174d1751ee25242a118f987b8f9f66
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,43 @@
namespace Febucci.UI.Core
{
/// <summary>
/// Base class for all appearance effects. <br/>
/// Inherit from this class if you want to create your own Appearance Effect in C#.
/// </summary>
public abstract class AppearanceBase : EffectsBase
{
public float effectDuration = .3f;
[System.Obsolete("This variable will be removed from next versions. Please use 'effectDuration' instead")]
protected float showDuration => effectDuration;
/// <summary>
/// Initializes the effect's default values. It is called before the effect is applied to letters.
/// </summary>
/// <remarks>
/// Use this to assign values to your effect.
/// </remarks>
/// <example>
/// <code>
/// effectDuration = data.defaults.sizeDuration;
/// amplitude = data.defaults.sizeAmplitude;
/// </code>
/// </example>
/// <param name="data"></param>
public abstract void SetDefaultValues(AppearanceDefaultValues data);
public virtual bool CanShowAppearanceOn(float timePassed)
{
return timePassed <= effectDuration;
}
public override void SetModifier(string modifierName, string modifierValue)
{
switch (modifierName)
{
//duration
case "d": ApplyModifierTo(ref effectDuration, modifierValue); break;
}
}
}
}

View File

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

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 41f2670940e258c4ca5bcac3643b6179
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,57 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[UnityEngine.Scripting.Preserve]
[EffectInfo(tag: TAnimTags.ap_DiagExp)]
class DiagonalExpandAppearance : AppearanceBase
{
int targetA;
int targetB;
//--Temp variables--
Vector3 middlePos;
float pct;
public override void SetDefaultValues(AppearanceDefaultValues data)
{
effectDuration = data.defaults.diagonalExpandDuration;
SetOrientation(data.defaults.diagonalFromBttmLeft);
}
void SetOrientation(bool btmLeft)
{
if (btmLeft) //expands bottom left and top right
{
targetA = 0;
targetB = 2;
}
else //expands bottom right and top left
{
targetA = 1;
targetB = 3;
}
}
public override void ApplyEffect(ref CharacterData data, int charIndex)
{
middlePos = data.vertices.GetMiddlePos();
pct = Tween.EaseInOut(data.passedTime / effectDuration);
data.vertices[targetA] = Vector3.LerpUnclamped(middlePos, data.vertices[targetA], pct);
//top right copies from bottom right
data.vertices[targetB] = Vector3.LerpUnclamped(middlePos, data.vertices[targetB], pct);
}
public override void SetModifier(string modifierName, string modifierValue)
{
base.SetModifier(modifierName, modifierValue);
switch (modifierName)
{
case "bot": SetOrientation(modifierValue == "1"); break;
}
}
}
}

View File

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

View File

@@ -0,0 +1,31 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[UnityEngine.Scripting.Preserve]
[EffectInfo(tag: TAnimTags.ap_Fade)]
class FadeAppearance : AppearanceBase
{
public override void SetDefaultValues(AppearanceDefaultValues data)
{
effectDuration = data.defaults.fadeDuration;
}
Color32 temp;
public override void ApplyEffect(ref CharacterData data, int charIndex)
{
//from transparent to real color
for (int i = 0; i < TextUtilities.verticesPerChar; i++)
{
temp = data.colors[i];
temp.a = 0;
data.colors[i] = Color32.LerpUnclamped(data.colors[i], temp,
Tween.EaseInOut(1 - (data.passedTime / effectDuration)));
}
}
}
}

View File

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

View File

@@ -0,0 +1,94 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[UnityEngine.Scripting.Preserve]
[EffectInfo(tag: TAnimTags.ap_HoriExp)]
class HorizontalExpandAppearance : AppearanceBase
{
//expand type
public enum ExpType
{
Left, //from left to right
Middle, //expands from the middle to te extents
Right //from right to left
}
ExpType type = ExpType.Left;
//--Temp variables--
Vector2 startTop;
Vector2 startBot;
float pct;
public override void SetDefaultValues(AppearanceDefaultValues data)
{
effectDuration = data.defaults.horizontalExpandDuration;
type = data.defaults.horizontalExpandStart;
}
public override void ApplyEffect(ref CharacterData data, int charIndex)
{
pct = Tween.EaseInOut(data.passedTime / effectDuration);
switch (type)
{
default:
case ExpType.Left:
//top left and bot left
startTop = data.vertices[1];
startBot = data.vertices[0];
data.vertices[2] = Vector3.LerpUnclamped(startTop, data.vertices[2], pct);
data.vertices[3] = Vector3.LerpUnclamped(startBot, data.vertices[3], pct);
break;
case ExpType.Right:
//top right and bot right
startTop = data.vertices[2];
startBot = data.vertices[3];
data.vertices[1] = Vector3.LerpUnclamped(startTop, data.vertices[1], pct);
data.vertices[0] = Vector3.LerpUnclamped(startBot, data.vertices[0], pct);
break;
case ExpType.Middle:
//Middle positions
startTop = (data.vertices[1] + data.vertices[2]) / 2;
startBot = (data.vertices[0] + data.vertices[3]) / 2;
//top vertices
data.vertices[1] = Vector3.LerpUnclamped(startTop, data.vertices[1], pct);
data.vertices[2] = Vector3.LerpUnclamped(startTop, data.vertices[2], pct);
//bottom vertices
data.vertices[0] = Vector3.LerpUnclamped(startBot, data.vertices[0], pct);
data.vertices[3] = Vector3.LerpUnclamped(startBot, data.vertices[3], pct);
break;
}
}
public override void SetModifier(string modifierName, string modifierValue)
{
base.SetModifier(modifierName, modifierValue);
switch (modifierName)
{
case "x":
switch (modifierValue)
{
case "-1": type = ExpType.Left; break;
case "0": type = ExpType.Middle; break;
case "1": type = ExpType.Right; break;
default: Debug.LogError($"Text Animator: you set an '{modifierName}' modifier with value '{modifierValue}' for the HorizontalExpandAppearance effect, but it can only be '-1', '0', or '1'"); break;
}
break;
}
}
}
}

View File

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

View File

@@ -0,0 +1,36 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[UnityEngine.Scripting.Preserve]
[EffectInfo(tag: TAnimTags.ap_Offset)]
class OffsetAppearance : AppearanceBase
{
float amount;
Vector2 direction;
public override void SetDefaultValues(AppearanceDefaultValues data)
{
direction = data.defaults.offsetDir;
amount = data.defaults.offsetAmplitude * uniformIntensity;
effectDuration = data.defaults.offsetDuration;
}
public override void ApplyEffect(ref CharacterData data, int charIndex)
{
//Moves all towards a direction
data.vertices.MoveChar(direction * amount * Tween.EaseIn(1 - data.passedTime / effectDuration));
}
public override void SetModifier(string modifierName, string modifierValue)
{
base.SetModifier(modifierName, modifierValue);
switch (modifierName)
{
case "a": ApplyModifierTo(ref amount, modifierValue); break;
}
}
}
}

View File

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

View File

@@ -0,0 +1,49 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[UnityEngine.Scripting.Preserve]
[EffectInfo(tag: TAnimTags.ap_RandomDir)]
class RandomDirectionAppearance : AppearanceBase
{
float amount;
Vector3[] directions;
public override void Initialize(int charactersCount)
{
base.Initialize(charactersCount);
directions = new Vector3[charactersCount];
//Calculates a random direction for each character (which won't change)
for(int i = 0; i < charactersCount; i++)
{
directions[i] = TextUtilities.fakeRandoms[Random.Range(0, TextUtilities.fakeRandomsCount - 1)] * Mathf.Sign(Mathf.Sin(i));
}
}
public override void SetDefaultValues(AppearanceDefaultValues data)
{
amount = data.defaults.randomDirAmplitude;
effectDuration = data.defaults.randomDirDuration;
}
public override void ApplyEffect(ref CharacterData data, int charIndex)
{
//Moves all towards a direction
data.vertices.MoveChar(directions[charIndex] * amount * uniformIntensity * Tween.EaseIn(1 - data.passedTime / effectDuration));
}
public override void SetModifier(string modifierName, string modifierValue)
{
base.SetModifier(modifierName, modifierValue);
switch (modifierName)
{
case "a": ApplyModifierTo(ref amount, modifierValue); break;
}
}
}
}

View File

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

View File

@@ -0,0 +1,40 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[UnityEngine.Scripting.Preserve]
[EffectInfo(tag: TAnimTags.ap_Rot)]
class RotatingAppearance : AppearanceBase
{
float targetAngle;
public override void SetDefaultValues(AppearanceDefaultValues data)
{
effectDuration = data.defaults.rotationDuration;
targetAngle = data.defaults.rotationStartAngle;
}
public override void ApplyEffect(ref CharacterData data, int charIndex)
{
data.vertices.RotateChar(
Mathf.Lerp(
targetAngle,
0,
Tween.EaseInOut(data.passedTime / effectDuration)
)
);
}
public override void SetModifier(string modifierName, string modifierValue)
{
base.SetModifier(modifierName, modifierValue);
switch (modifierName)
{
case "a": ApplyModifierTo(ref targetAngle, modifierValue); break;
}
}
}
}

View File

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

View File

@@ -0,0 +1,31 @@
namespace Febucci.UI.Core
{
[UnityEngine.Scripting.Preserve]
[EffectInfo(tag: TAnimTags.ap_Size)]
class SizeAppearance : AppearanceBase
{
float amplitude;
public override void SetDefaultValues(AppearanceDefaultValues data)
{
effectDuration = data.defaults.sizeDuration;
amplitude = data.defaults.sizeAmplitude * -1 + 1;
}
public override void ApplyEffect(ref CharacterData data, int charIndex)
{
data.vertices.LerpUnclamped(
data.vertices.GetMiddlePos(),
Tween.EaseIn(1 - (data.passedTime / effectDuration)) * amplitude
);
}
public override void SetModifier(string modifierName, string modifierValue)
{
base.SetModifier(modifierName, modifierValue);
switch (modifierName)
{
case "a": ApplyModifierTo(ref amplitude, modifierValue); break;
}
}
}
}

View File

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

View File

@@ -0,0 +1,66 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[UnityEngine.Scripting.Preserve]
[EffectInfo(tag: TAnimTags.ap_VertExp)]
class VerticalExpandAppearance : AppearanceBase
{
int startA, targetA;
int startB, targetB;
//--Temp variables--
float pct;
public override void SetDefaultValues(AppearanceDefaultValues data)
{
effectDuration = data.defaults.verticalExpandDuration;
SetOrientation(data.defaults.verticalFromBottom);
}
void SetOrientation(bool fromBottom)
{
if (fromBottom) //From bottom to top
{
//top left copies bottom left
startA = 0;
targetA = 1;
//top right copies bottom right
startB = 3;
targetB = 2;
}
else //from top to bottom
{
//bottom left copies top left
startA = 1;
targetA = 0;
//bottom right copies top right
startB = 2;
targetB = 3;
}
}
public override void ApplyEffect(ref CharacterData data, int charIndex)
{
pct = Tween.EaseInOut(data.passedTime / effectDuration);
data.vertices[targetA] = Vector3.LerpUnclamped(data.vertices[startA], data.vertices[targetA], pct);
data.vertices[targetB] = Vector3.LerpUnclamped(data.vertices[startB], data.vertices[targetB], pct);
}
public override void SetModifier(string modifierName, string modifierValue)
{
base.SetModifier(modifierName, modifierValue);
switch (modifierName)
{
case "bot": SetOrientation(modifierValue == "1"); break;
}
}
}
}

View File

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

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: efe369a01f5ffe54583002264aa47ea7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,206 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[UnityEngine.Scripting.Preserve]
[EffectInfo(tag: "")]
class PresetAppearance : AppearanceBase
{
bool enabled;
//management
Matrix4x4 matrix;
Vector3 offset;
Quaternion rotationQua;
bool hasTransformEffects;
ThreeAxisEffector movement;
ThreeAxisEffector rotation;
TwoAxisEffector scale;
bool setColor;
Color32 color;
ColorCurve colorCurve;
public override void SetDefaultValues(AppearanceDefaultValues data)
{
effectDuration = 0;
enabled = false;
void AssignValues(PresetAppearanceValues result)
{
enabled = SetPreset(
true,
result,
ref movement,
ref effectDuration,
ref rotation,
ref scale,
ref rotationQua,
ref hasTransformEffects,
ref setColor,
ref colorCurve);
}
PresetAppearanceValues values;
//searches for local presets first, which override global presets
if (TAnimBuilder.GetPresetFromArray(effectTag, data.presets, out values))
{
AssignValues(values);
return;
}
//global presets
if (TAnimBuilder.TryGetGlobalPresetAppearance(effectTag, out values))
{
AssignValues(values);
return;
}
}
#region Effector classes
internal abstract class Effector
{
protected abstract Vector3 _EvaluateEffect(float passedTime, int charInde);
public Vector3 EvaluateEffect(float passedTime, int charIndex)
{
return _EvaluateEffect(passedTime, charIndex);
}
}
internal sealed class ThreeAxisEffector : Effector
{
EffectEvaluator x;
EffectEvaluator y;
EffectEvaluator z;
public ThreeAxisEffector(EffectEvaluator x, EffectEvaluator y, EffectEvaluator z)
{
this.x = x;
this.y = y;
this.z = z;
}
protected override Vector3 _EvaluateEffect(float passedTime, int charIndex)
{
return new Vector3(
x.Evaluate(passedTime, charIndex),
y.Evaluate(passedTime, charIndex),
z.Evaluate(passedTime, charIndex)
);
}
}
internal sealed class TwoAxisEffector : Effector
{
EffectEvaluator x;
EffectEvaluator y;
public TwoAxisEffector(EffectEvaluator x, EffectEvaluator y)
{
this.x = x;
this.y = y;
}
protected override Vector3 _EvaluateEffect(float passedTime, int charIndex)
{
return new Vector3(
x.Evaluate(passedTime, charIndex),
y.Evaluate(passedTime, charIndex),
1
);
}
}
#endregion
public static bool SetPreset<T>(
bool isAppearance,
T values,
ref ThreeAxisEffector movement,
ref float showDuration,
ref ThreeAxisEffector rotation,
ref TwoAxisEffector scale,
ref Quaternion rotationQua,
ref bool hasTransformEffects,
ref bool setColor,
ref ColorCurve colorCurve
) where T : PresetBaseValues
{
values.Initialize(isAppearance);
showDuration = values.GetMaxDuration();
movement = new ThreeAxisEffector(
values.movementX,
values.movementY,
values.movementZ);
scale = new TwoAxisEffector(
values.scaleX,
values.scaleY
);
rotation = new ThreeAxisEffector(
values.rotX,
values.rotY,
values.rotZ
);
rotationQua = Quaternion.identity;
hasTransformEffects = values.movementX.enabled || values.movementY.enabled || values.movementZ.enabled
|| values.rotX.enabled || values.rotY.enabled || values.rotZ.enabled
|| values.scaleX.enabled || values.scaleY.enabled;
setColor = values.color.enabled;
if (setColor)
{
colorCurve = values.color;
colorCurve.Initialize(isAppearance);
}
return hasTransformEffects || setColor;
}
public override void ApplyEffect(ref CharacterData data, int charIndex)
{
if (!enabled)
return;
if (hasTransformEffects)
{
offset = (data.vertices[0] + data.vertices[2]) / 2f;
rotationQua.eulerAngles = rotation.EvaluateEffect(data.passedTime, charIndex);
matrix.SetTRS(
movement.EvaluateEffect(data.passedTime, charIndex) * uniformIntensity,
rotationQua,
scale.EvaluateEffect(data.passedTime, charIndex));
for (byte i = 0; i < data.vertices.Length; i++)
{
data.vertices[i] -= offset;
data.vertices[i] = matrix.MultiplyPoint3x4(data.vertices[i]);
data.vertices[i] += offset;
}
}
if (setColor)
{
color = colorCurve.GetColor(data.passedTime, charIndex);
data.colors.LerpUnclamped(color, 1 - data.passedTime / effectDuration);
}
}
}
}

View File

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

View File

@@ -0,0 +1,13 @@
using UnityEngine;
namespace Febucci.UI.Core
{
[System.Serializable]
internal class PresetAppearanceValues : PresetBaseValues
{
public PresetAppearanceValues() : base()
{
}
}
}

View File

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