Files

500 lines
19 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using DamageNumbersPro;
namespace DamageNumbersPro.Internal
{
[CreateAssetMenu(fileName = "Preset", menuName = "TextMeshPro/Preset for DNP", order = -1)]
public class DNPPreset : ScriptableObject
{
//Font:
public bool changeFontAsset;
public TMP_FontAsset fontAsset;
//Color:
public bool changeColor;
public Color color = Color.white;
public bool enableGradient;
public VertexGradient gradient = new VertexGradient(Color.white, Color.white, Color.white, Color.white);
//Number:
public bool changeNumber;
public bool enableNumber = true;
public TextSettings numberSettings = new TextSettings(0);
public DigitSettings digitSettings = new DigitSettings(0);
//Left Text:
public bool changeLeftText;
public bool enableLeftText = true;
public string leftText;
public TextSettings leftTextSettings = new TextSettings(0f);
//Right Text:
public bool changeRightText;
public bool enableRightText = true;
public string rightText;
public TextSettings rightTextSettings = new TextSettings(0f);
//Vertical Text:
public bool hideVerticalTexts = false;
//Fade In:
public bool changeFadeIn = false;
public float durationFadeIn = 0.2f;
public bool enableOffsetFadeIn = true;
[Tooltip("TextA and TextB move together from this offset.")]
public Vector2 offsetFadeIn = new Vector2(0.5f, 0);
public bool enableScaleFadeIn = true;
[Tooltip("Scales in from this scale.")]
public Vector2 scaleFadeIn = new Vector2(2, 2);
public bool enableCrossScaleFadeIn = false;
[Tooltip("Scales TextA in from this scale and TextB from the inverse of this scale.")]
public Vector2 crossScaleFadeIn = new Vector2(1, 1.5f);
public bool enableShakeFadeIn = false;
[Tooltip("Shakes in from this offset.")]
public Vector2 shakeOffsetFadeIn = new Vector2(0, 1.5f);
[Tooltip("Shakes in at this frequency.")]
public float shakeFrequencyFadeIn = 4f;
//Fade Out:
public bool changeFadeOut = false;
public float durationFadeOut = 0.2f;
public bool enableOffsetFadeOut = true;
[Tooltip("TextA and TextB move apart to this offset.")]
public Vector2 offsetFadeOut = new Vector2(0.5f, 0);
public bool enableScaleFadeOut = false;
[Tooltip("Scales out to this scale.")]
public Vector2 scaleFadeOut = new Vector2(2, 2);
public bool enableCrossScaleFadeOut = false;
[Tooltip("Scales TextA out to this scale and TextB to the inverse of this scale.")]
public Vector2 crossScaleFadeOut = new Vector2(1, 1.5f);
public bool enableShakeFadeOut = false;
[Tooltip("Shakes out to this offset.")]
public Vector2 shakeOffsetFadeOut = new Vector2(0, 1.5f);
[Tooltip("Shakes out at this frequency.")]
public float shakeFrequencyFadeOut = 4f;
//Movement:
public bool changeMovement = false;
public bool enableLerp = true;
public LerpSettings lerpSettings = new LerpSettings(0);
public bool enableVelocity = false;
public VelocitySettings velocitySettings = new VelocitySettings(0);
public bool enableShaking = false;
[Tooltip("Shake settings during idle.")]
public ShakeSettings shakeSettings = new ShakeSettings(new Vector2(0.005f, 0.005f));
public bool enableFollowing = false;
public FollowSettings followSettings = new FollowSettings(0);
//Rotation:
public bool changeRotation = false;
public bool enableStartRotation = false;
[Tooltip("The minimum z-angle for the random spawn rotation.")]
public float minRotation = -4f;
[Tooltip("The maximum z-angle for the random spawn rotation.")]
public float maxRotation = 4f;
public bool enableRotateOverTime = false;
[Tooltip("The minimum rotation speed for the z-angle.")]
public float minRotationSpeed = -15f;
[Tooltip("The maximum rotation speed for the z-angle.")]
public float maxRotationSpeed = 15;
[Tooltip("Defines rotation speed over lifetime.")]
public AnimationCurve rotateOverTime = new AnimationCurve(new Keyframe[] { new Keyframe(0, 1), new Keyframe(0.4f, 1), new Keyframe(0.8f, 0), new Keyframe(1, 0) });
//Scaling:
public bool changeScaling = false;
public bool enableScaleByNumber = false;
public ScaleByNumberSettings scaleByNumberSettings = new ScaleByNumberSettings(0);
public bool enableScaleOverTime = false;
[Tooltip("Will scale over it's lifetime using this curve.")]
public AnimationCurve scaleOverTime = new AnimationCurve(new Keyframe(0, 1), new Keyframe(1, 0.7f));
//Spam Control:
public bool changeSpamControl = false;
public string spamGroup = "";
public bool enableCombination = false;
public CombinationSettings combinationSettings = new CombinationSettings(0);
public bool enableDestruction = false;
public DestructionSettings destructionSettings = new DestructionSettings(0);
public bool enableCollision = false;
public CollisionSettings collisionSettings = new CollisionSettings(0);
public bool enablePush = false;
public PushSettings pushSettings = new PushSettings(0);
public bool IsApplied(DamageNumber dn)
{
TMP_Text[] textMeshs = dn.GetTextMeshs();
if (textMeshs[0] == null)
{
dn.GetReferencesIfNecessary();
textMeshs = dn.GetTextMeshs();
}
bool isApplied = true;
//Font:
if (changeFontAsset)
{
foreach(TMP_Text tmp in textMeshs)
{
if (fontAsset != tmp.font)
{
isApplied = false;
}
}
}
//Color:
if (changeColor)
{
foreach (TMP_Text tmp in textMeshs)
{
if (color != tmp.color || enableGradient != tmp.enableVertexGradient || !gradient.Equals(tmp.colorGradient))
{
isApplied = false;
}
}
}
//Number:
if(changeNumber)
{
if(enableNumber != dn.enableNumber || !numberSettings.Equals(dn.numberSettings) || !digitSettings.Equals(dn.digitSettings))
{
isApplied = false;
}
}
//Left Text:
if(changeLeftText)
{
if(enableLeftText != dn.enableLeftText || !leftTextSettings.Equals(dn.leftTextSettings) || leftText != dn.leftText)
{
isApplied = false;
}
}
//Right Text:
if (changeRightText)
{
if (enableRightText != dn.enableRightText || !rightTextSettings.Equals(dn.rightTextSettings) || rightText != dn.rightText)
{
isApplied = false;
}
}
//Vertical Texts:
if (hideVerticalTexts)
{
if(dn.enableTopText || dn.enableBottomText)
{
isApplied = false;
}
}
//Fade In:
if(changeFadeIn)
{
if(durationFadeIn != dn.durationFadeIn || enableOffsetFadeIn != dn.enableOffsetFadeIn || offsetFadeIn != dn.offsetFadeIn ||
enableScaleFadeIn != dn.enableScaleFadeIn || scaleFadeIn != dn.scaleFadeIn || enableCrossScaleFadeIn != dn.enableCrossScaleFadeIn ||
crossScaleFadeIn != dn.crossScaleFadeIn || enableShakeFadeIn != dn.enableShakeFadeIn || shakeOffsetFadeIn != dn.shakeOffsetFadeIn ||
shakeFrequencyFadeIn != dn.shakeFrequencyFadeIn)
{
isApplied = false;
}
}
//Fade Out:
if (changeFadeOut)
{
if (durationFadeOut != dn.durationFadeOut || enableOffsetFadeOut != dn.enableOffsetFadeOut || offsetFadeOut != dn.offsetFadeOut ||
enableScaleFadeOut != dn.enableScaleFadeOut || scaleFadeOut != dn.scaleFadeOut || enableCrossScaleFadeOut != dn.enableCrossScaleFadeOut ||
crossScaleFadeOut != dn.crossScaleFadeOut || enableShakeFadeOut != dn.enableShakeFadeOut || shakeOffsetFadeOut != dn.shakeOffsetFadeOut ||
shakeFrequencyFadeOut != dn.shakeFrequencyFadeOut)
{
isApplied = false;
}
}
//Movement:
if(changeMovement)
{
if(enableLerp != dn.enableLerp || !lerpSettings.Equals(dn.lerpSettings) ||
enableVelocity != dn.enableVelocity || !velocitySettings.Equals(dn.velocitySettings) ||
enableShaking != dn.enableShaking || !shakeSettings.Equals(dn.shakeSettings) ||
enableFollowing != dn.enableFollowing || !followSettings.Equals(dn.followSettings))
{
isApplied = false;
}
}
//Rotation:
if(changeRotation)
{
if(enableStartRotation != dn.enableStartRotation || minRotation != dn.minRotation || maxRotation != dn.maxRotation ||
enableRotateOverTime != dn.enableRotateOverTime || minRotationSpeed != dn.minRotationSpeed || maxRotationSpeed != dn.maxRotationSpeed || !rotateOverTime.Equals(dn.rotateOverTime))
{
isApplied = false;
}
}
//Scale:
if(changeScaling)
{
if(enableScaleByNumber != dn.enableScaleByNumber || !scaleByNumberSettings.Equals(dn.scaleByNumberSettings) ||
enableScaleOverTime != dn.enableScaleOverTime || !scaleOverTime.Equals(dn.scaleOverTime))
{
isApplied = false;
}
}
//Spam Group:
if(changeSpamControl)
{
if(enableCombination != dn.enableCombination || !combinationSettings.Equals(dn.combinationSettings) ||
enableDestruction != dn.enableDestruction || !destructionSettings.Equals(dn.destructionSettings) ||
enableCollision != dn.enableCollision || !collisionSettings.Equals(dn.collisionSettings) ||
enablePush != dn.enablePush || !pushSettings.Equals(dn.pushSettings))
{
isApplied = false;
}
}
return isApplied;
}
public void Apply(DamageNumber dn)
{
TMP_Text[] textMeshs = dn.GetTextMeshs();
//Font:
if (changeFontAsset)
{
foreach(TMP_Text tmp in textMeshs)
{
tmp.font = fontAsset;
}
}
//Color:
if (changeColor)
{
foreach (TMP_Text tmp in textMeshs)
{
tmp.color = color;
tmp.enableVertexGradient = enableGradient;
tmp.colorGradient = gradient;
}
}
//Number:
if (changeNumber)
{
dn.enableNumber = enableNumber;
dn.numberSettings = numberSettings;
dn.digitSettings = digitSettings;
}
//Left Text:
if (changeLeftText)
{
dn.enableLeftText = enableLeftText;
dn.leftText = leftText;
dn.leftTextSettings = leftTextSettings;
}
//Right Text:
if (changeRightText)
{
dn.enableRightText = enableRightText;
dn.rightText = rightText;
dn.rightTextSettings = rightTextSettings;
}
//Hide Vertical Texts:
if(hideVerticalTexts)
{
dn.enableTopText = dn.enableBottomText = false;
}
//Fade In:
if(changeFadeIn)
{
dn.durationFadeIn = durationFadeIn;
dn.enableOffsetFadeIn = enableOffsetFadeIn;
dn.offsetFadeIn = offsetFadeIn;
dn.enableScaleFadeIn = enableScaleFadeIn;
dn.scaleFadeIn = scaleFadeIn;
dn.enableCrossScaleFadeIn = enableCrossScaleFadeIn;
dn.crossScaleFadeIn = crossScaleFadeIn;
dn.enableShakeFadeIn = enableShakeFadeIn;
dn.shakeOffsetFadeIn = shakeOffsetFadeIn;
dn.shakeFrequencyFadeIn = shakeFrequencyFadeIn;
}
//Fade Out:
if (changeFadeOut)
{
dn.durationFadeOut = durationFadeOut;
dn.enableOffsetFadeOut = enableOffsetFadeOut;
dn.offsetFadeOut = offsetFadeOut;
dn.enableScaleFadeOut = enableScaleFadeOut;
dn.scaleFadeOut = scaleFadeOut;
dn.enableCrossScaleFadeOut = enableCrossScaleFadeOut;
dn.crossScaleFadeOut = crossScaleFadeOut;
dn.enableShakeFadeOut = enableShakeFadeOut;
dn.shakeOffsetFadeOut = shakeOffsetFadeOut;
dn.shakeFrequencyFadeOut = shakeFrequencyFadeOut;
}
//Movement:
if(changeMovement)
{
dn.enableLerp = enableLerp;
dn.lerpSettings = lerpSettings;
dn.enableVelocity = enableVelocity;
dn.velocitySettings = velocitySettings;
dn.enableShaking = enableShaking;
dn.shakeSettings = shakeSettings;
dn.enableFollowing = enableFollowing;
dn.followSettings = followSettings;
}
//Rotation:
if(changeRotation)
{
dn.enableStartRotation = enableStartRotation;
dn.minRotation = minRotation;
dn.maxRotation = maxRotation;
dn.enableRotateOverTime = enableRotateOverTime;
dn.minRotationSpeed = minRotationSpeed;
dn.maxRotationSpeed = maxRotationSpeed;
dn.rotateOverTime = rotateOverTime;
}
//Scale:
if(changeScaling)
{
dn.enableScaleByNumber = enableScaleByNumber;
dn.scaleByNumberSettings = scaleByNumberSettings;
dn.enableScaleOverTime = enableScaleOverTime;
dn.scaleOverTime = scaleOverTime;
}
//Spam Control:
if(changeSpamControl)
{
if(dn.spamGroup == null || dn.spamGroup == "")
{
dn.spamGroup = spamGroup;
}
dn.enableCombination = enableCombination;
dn.combinationSettings = combinationSettings;
dn.enableDestruction = enableDestruction;
dn.destructionSettings = destructionSettings;
dn.enableCollision = enableCollision;
dn.collisionSettings = collisionSettings;
dn.enablePush = enablePush;
dn.pushSettings = pushSettings;
}
}
public void Get(DamageNumber dn)
{
TMP_Text[] textMeshs = dn.GetTextMeshs();
//Font:
changeFontAsset = true;
foreach (TMP_Text tmp in textMeshs)
{
if(tmp != null)
{
fontAsset = tmp.font;
}
}
//Color:
changeColor = true;
foreach (TMP_Text tmp in textMeshs)
{
if(tmp != null)
{
color = tmp.color;
enableGradient = tmp.enableVertexGradient;
gradient = tmp.colorGradient;
}
}
//Fade In:
changeFadeIn = true;
durationFadeIn = dn.durationFadeIn;
enableOffsetFadeIn = dn.enableOffsetFadeIn;
offsetFadeIn = dn.offsetFadeIn;
enableScaleFadeIn = dn.enableScaleFadeIn;
scaleFadeIn = dn.scaleFadeIn;
enableCrossScaleFadeIn = dn.enableCrossScaleFadeIn;
crossScaleFadeIn = dn.crossScaleFadeIn;
enableShakeFadeIn = dn.enableShakeFadeIn;
shakeOffsetFadeIn = dn.shakeOffsetFadeIn;
shakeFrequencyFadeIn = dn.shakeFrequencyFadeIn;
//Fade Out:
changeFadeOut = true;
durationFadeOut = dn.durationFadeOut;
enableOffsetFadeOut = dn.enableOffsetFadeOut;
offsetFadeOut = dn.offsetFadeOut;
enableScaleFadeOut = dn.enableScaleFadeOut;
scaleFadeOut = dn.scaleFadeOut;
enableCrossScaleFadeOut = dn.enableCrossScaleFadeOut;
crossScaleFadeOut = dn.crossScaleFadeOut;
enableShakeFadeOut = dn.enableShakeFadeOut;
shakeOffsetFadeOut = dn.shakeOffsetFadeOut;
shakeFrequencyFadeOut = dn.shakeFrequencyFadeOut;
//Movement:
changeMovement = true;
enableLerp = dn.enableLerp;
lerpSettings = dn.lerpSettings;
enableVelocity = dn.enableVelocity;
velocitySettings = dn.velocitySettings;
enableShaking = dn.enableShaking;
shakeSettings = dn.shakeSettings;
enableFollowing = dn.enableFollowing;
followSettings = dn.followSettings;
//Rotation:
changeRotation = true;
enableStartRotation = dn.enableStartRotation;
minRotation = dn.minRotation;
maxRotation = dn.maxRotation;
enableRotateOverTime = dn.enableRotateOverTime;
minRotationSpeed = dn.minRotationSpeed;
maxRotationSpeed = dn.maxRotationSpeed;
rotateOverTime = dn.rotateOverTime;
//Scale:
changeScaling = true;
enableScaleByNumber = dn.enableScaleByNumber;
scaleByNumberSettings = dn.scaleByNumberSettings;
enableScaleOverTime = dn.enableScaleOverTime;
scaleOverTime = dn.scaleOverTime;
//Spam Group:
changeSpamControl = true;
spamGroup = dn.spamGroup != "" ? "Default" : "";
enableCombination = dn.enableCombination;
combinationSettings = dn.combinationSettings;
enableDestruction = dn.enableDestruction;
destructionSettings = dn.destructionSettings;
enableCollision = dn.enableCollision;
collisionSettings = dn.collisionSettings;
enablePush = dn.enablePush;
pushSettings = dn.pushSettings;
}
}
}