154 lines
5.7 KiB
C#
154 lines
5.7 KiB
C#
using Newtonsoft.Json.Linq;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace MCPForUnity.Editor.Tools.Vfx
|
|
{
|
|
internal static class ParticleRead
|
|
{
|
|
private static object SerializeAnimationCurve(AnimationCurve curve)
|
|
{
|
|
if (curve == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return new
|
|
{
|
|
keys = curve.keys.Select(k => new
|
|
{
|
|
time = k.time,
|
|
value = k.value,
|
|
inTangent = k.inTangent,
|
|
outTangent = k.outTangent
|
|
}).ToArray()
|
|
};
|
|
}
|
|
|
|
private static object SerializeMinMaxCurve(ParticleSystem.MinMaxCurve curve)
|
|
{
|
|
switch (curve.mode)
|
|
{
|
|
case ParticleSystemCurveMode.Constant:
|
|
return new
|
|
{
|
|
mode = "constant",
|
|
value = curve.constant
|
|
};
|
|
|
|
case ParticleSystemCurveMode.TwoConstants:
|
|
return new
|
|
{
|
|
mode = "two_constants",
|
|
min = curve.constantMin,
|
|
max = curve.constantMax
|
|
};
|
|
|
|
case ParticleSystemCurveMode.Curve:
|
|
return new
|
|
{
|
|
mode = "curve",
|
|
multiplier = curve.curveMultiplier,
|
|
keys = curve.curve.keys.Select(k => new
|
|
{
|
|
time = k.time,
|
|
value = k.value,
|
|
inTangent = k.inTangent,
|
|
outTangent = k.outTangent
|
|
}).ToArray()
|
|
};
|
|
|
|
case ParticleSystemCurveMode.TwoCurves:
|
|
return new
|
|
{
|
|
mode = "curve",
|
|
multiplier = curve.curveMultiplier,
|
|
keys = curve.curveMax.keys.Select(k => new
|
|
{
|
|
time = k.time,
|
|
value = k.value,
|
|
inTangent = k.inTangent,
|
|
outTangent = k.outTangent
|
|
}).ToArray(),
|
|
originalMode = "two_curves",
|
|
curveMin = SerializeAnimationCurve(curve.curveMin),
|
|
curveMax = SerializeAnimationCurve(curve.curveMax)
|
|
};
|
|
|
|
default:
|
|
return new
|
|
{
|
|
mode = "constant",
|
|
value = curve.constant
|
|
};
|
|
}
|
|
}
|
|
|
|
public static object GetInfo(JObject @params)
|
|
{
|
|
ParticleSystem ps = ParticleCommon.FindParticleSystem(@params);
|
|
if (ps == null)
|
|
{
|
|
return new { success = false, message = "ParticleSystem not found" };
|
|
}
|
|
|
|
var main = ps.main;
|
|
var emission = ps.emission;
|
|
var shape = ps.shape;
|
|
var renderer = ps.GetComponent<ParticleSystemRenderer>();
|
|
|
|
return new
|
|
{
|
|
success = true,
|
|
data = new
|
|
{
|
|
gameObject = ps.gameObject.name,
|
|
isPlaying = ps.isPlaying,
|
|
isPaused = ps.isPaused,
|
|
particleCount = ps.particleCount,
|
|
main = new
|
|
{
|
|
duration = main.duration,
|
|
looping = main.loop,
|
|
startLifetime = SerializeMinMaxCurve(main.startLifetime),
|
|
startSpeed = SerializeMinMaxCurve(main.startSpeed),
|
|
startSize = SerializeMinMaxCurve(main.startSize),
|
|
gravityModifier = SerializeMinMaxCurve(main.gravityModifier),
|
|
simulationSpace = main.simulationSpace.ToString(),
|
|
maxParticles = main.maxParticles
|
|
},
|
|
emission = new
|
|
{
|
|
enabled = emission.enabled,
|
|
rateOverTime = SerializeMinMaxCurve(emission.rateOverTime),
|
|
burstCount = emission.burstCount
|
|
},
|
|
shape = new
|
|
{
|
|
enabled = shape.enabled,
|
|
shapeType = shape.shapeType.ToString(),
|
|
radius = shape.radius,
|
|
angle = shape.angle
|
|
},
|
|
renderer = renderer != null ? new
|
|
{
|
|
renderMode = renderer.renderMode.ToString(),
|
|
sortMode = renderer.sortMode.ToString(),
|
|
material = renderer.sharedMaterial?.name,
|
|
trailMaterial = renderer.trailMaterial?.name,
|
|
minParticleSize = renderer.minParticleSize,
|
|
maxParticleSize = renderer.maxParticleSize,
|
|
shadowCastingMode = renderer.shadowCastingMode.ToString(),
|
|
receiveShadows = renderer.receiveShadows,
|
|
lightProbeUsage = renderer.lightProbeUsage.ToString(),
|
|
reflectionProbeUsage = renderer.reflectionProbeUsage.ToString(),
|
|
sortingOrder = renderer.sortingOrder,
|
|
sortingLayerName = renderer.sortingLayerName,
|
|
renderingLayerMask = renderer.renderingLayerMask
|
|
} : null
|
|
}
|
|
};
|
|
}
|
|
}
|
|
}
|