88 lines
3.2 KiB
C#
88 lines
3.2 KiB
C#
|
|
using Newtonsoft.Json.Linq;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
namespace MCPForUnity.Editor.Tools.Vfx
|
||
|
|
{
|
||
|
|
internal static class ParticleCommon
|
||
|
|
{
|
||
|
|
public static ParticleSystem FindParticleSystem(JObject @params)
|
||
|
|
{
|
||
|
|
GameObject go = ManageVfxCommon.FindTargetGameObject(@params);
|
||
|
|
return go?.GetComponent<ParticleSystem>();
|
||
|
|
}
|
||
|
|
|
||
|
|
public static ParticleSystem.MinMaxCurve ParseMinMaxCurve(JToken token, float defaultValue = 1f)
|
||
|
|
{
|
||
|
|
if (token == null)
|
||
|
|
return new ParticleSystem.MinMaxCurve(defaultValue);
|
||
|
|
|
||
|
|
if (token.Type == JTokenType.Float || token.Type == JTokenType.Integer)
|
||
|
|
{
|
||
|
|
return new ParticleSystem.MinMaxCurve(token.ToObject<float>());
|
||
|
|
}
|
||
|
|
|
||
|
|
if (token is JObject obj)
|
||
|
|
{
|
||
|
|
string mode = obj["mode"]?.ToString()?.ToLowerInvariant() ?? "constant";
|
||
|
|
|
||
|
|
switch (mode)
|
||
|
|
{
|
||
|
|
case "constant":
|
||
|
|
float constant = obj["value"]?.ToObject<float>() ?? defaultValue;
|
||
|
|
return new ParticleSystem.MinMaxCurve(constant);
|
||
|
|
|
||
|
|
case "random_between_constants":
|
||
|
|
case "two_constants":
|
||
|
|
float min = obj["min"]?.ToObject<float>() ?? 0f;
|
||
|
|
float max = obj["max"]?.ToObject<float>() ?? 1f;
|
||
|
|
return new ParticleSystem.MinMaxCurve(min, max);
|
||
|
|
|
||
|
|
case "curve":
|
||
|
|
AnimationCurve curve = ManageVfxCommon.ParseAnimationCurve(obj, defaultValue);
|
||
|
|
return new ParticleSystem.MinMaxCurve(obj["multiplier"]?.ToObject<float>() ?? 1f, curve);
|
||
|
|
|
||
|
|
default:
|
||
|
|
return new ParticleSystem.MinMaxCurve(defaultValue);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return new ParticleSystem.MinMaxCurve(defaultValue);
|
||
|
|
}
|
||
|
|
|
||
|
|
public static ParticleSystem.MinMaxGradient ParseMinMaxGradient(JToken token)
|
||
|
|
{
|
||
|
|
if (token == null)
|
||
|
|
return new ParticleSystem.MinMaxGradient(Color.white);
|
||
|
|
|
||
|
|
if (token is JArray arr && arr.Count >= 3)
|
||
|
|
{
|
||
|
|
return new ParticleSystem.MinMaxGradient(ManageVfxCommon.ParseColor(arr));
|
||
|
|
}
|
||
|
|
|
||
|
|
if (token is JObject obj)
|
||
|
|
{
|
||
|
|
string mode = obj["mode"]?.ToString()?.ToLowerInvariant() ?? "color";
|
||
|
|
|
||
|
|
switch (mode)
|
||
|
|
{
|
||
|
|
case "color":
|
||
|
|
return new ParticleSystem.MinMaxGradient(ManageVfxCommon.ParseColor(obj["color"]));
|
||
|
|
|
||
|
|
case "two_colors":
|
||
|
|
Color colorMin = ManageVfxCommon.ParseColor(obj["colorMin"]);
|
||
|
|
Color colorMax = ManageVfxCommon.ParseColor(obj["colorMax"]);
|
||
|
|
return new ParticleSystem.MinMaxGradient(colorMin, colorMax);
|
||
|
|
|
||
|
|
case "gradient":
|
||
|
|
return new ParticleSystem.MinMaxGradient(ManageVfxCommon.ParseGradient(obj));
|
||
|
|
|
||
|
|
default:
|
||
|
|
return new ParticleSystem.MinMaxGradient(Color.white);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return new ParticleSystem.MinMaxGradient(Color.white);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|