using UnityEngine;
|
using System;
|
|
namespace GAP_ParticleSystemController{
|
|
[Serializable]
|
public class SerializableMinMaxGradient{
|
public SerializableColor color;
|
public SerializableColor colorMax;
|
public SerializableColor colorMin;
|
public SerializableAlphaKeys gradientAlphaKeys;
|
public SerializableColorKeys gradientColorKeys;
|
public SerializableAlphaKeys gradientMaxAlphaKeys;
|
public SerializableColorKeys gradientMaxColorKeys;
|
public SerializableAlphaKeys gradientMinAlphaKeys;
|
public SerializableColorKeys gradientMinColorKeys;
|
public SerializablePSGradientMode gradientMode;
|
|
public SerializableMinMaxGradient (ParticleSystem.MinMaxGradient minMaxGradient){
|
|
gradientMode = new SerializablePSGradientMode (minMaxGradient.mode);
|
|
if (minMaxGradient.mode == ParticleSystemGradientMode.Color)
|
color = new SerializableColor (minMaxGradient.color);
|
|
if (minMaxGradient.mode == ParticleSystemGradientMode.TwoColors) {
|
colorMax = new SerializableColor (minMaxGradient.colorMax);
|
colorMin = new SerializableColor (minMaxGradient.colorMin);
|
}
|
|
if (minMaxGradient.mode == ParticleSystemGradientMode.Gradient) {
|
gradientAlphaKeys = new SerializableAlphaKeys (minMaxGradient.gradient.alphaKeys);
|
gradientColorKeys = new SerializableColorKeys (minMaxGradient.gradient.colorKeys);
|
}
|
|
if (minMaxGradient.mode == ParticleSystemGradientMode.TwoGradients) {
|
gradientMaxAlphaKeys = new SerializableAlphaKeys (minMaxGradient.gradientMax.alphaKeys);
|
gradientMaxColorKeys = new SerializableColorKeys (minMaxGradient.gradientMax.colorKeys);
|
gradientMinAlphaKeys = new SerializableAlphaKeys (minMaxGradient.gradientMin.alphaKeys);
|
gradientMinColorKeys = new SerializableColorKeys (minMaxGradient.gradientMin.colorKeys);
|
}
|
}
|
|
public ParticleSystem.MinMaxGradient GetMinMaxGradient (){
|
ParticleSystem.MinMaxGradient minMaxGradient = new ParticleSystem.MinMaxGradient ();
|
if (gradientMode.GetGradientMode () == ParticleSystemGradientMode.Color) {
|
if (minMaxGradient.color == null)
|
minMaxGradient.color = new Color ();
|
minMaxGradient.color = color.GetColor ();
|
}
|
|
if (gradientMode.GetGradientMode() == ParticleSystemGradientMode.TwoColors) {
|
if (minMaxGradient.colorMax == null)
|
minMaxGradient.colorMax = new Color ();
|
minMaxGradient.colorMax = colorMax.GetColor ();
|
|
if (minMaxGradient.colorMin == null)
|
minMaxGradient.colorMin = new Color ();
|
minMaxGradient.colorMin = colorMin.GetColor ();
|
}
|
|
if (gradientMode.GetGradientMode() == ParticleSystemGradientMode.Gradient) {
|
if (minMaxGradient.gradient == null)
|
minMaxGradient.gradient = new Gradient ();
|
minMaxGradient.gradient.alphaKeys = gradientAlphaKeys.GetAlphaKeys ();
|
minMaxGradient.gradient.colorKeys = gradientColorKeys.GetColorKeys ();
|
}
|
|
if (gradientMode.GetGradientMode() == ParticleSystemGradientMode.TwoGradients) {
|
if (minMaxGradient.gradientMax == null)
|
minMaxGradient.gradientMax = new Gradient ();
|
minMaxGradient.gradientMax.alphaKeys = gradientMaxAlphaKeys.GetAlphaKeys ();
|
minMaxGradient.gradientMax.colorKeys = gradientMaxColorKeys.GetColorKeys ();
|
|
if (minMaxGradient.gradientMin == null)
|
minMaxGradient.gradientMin = new Gradient ();
|
minMaxGradient.gradientMin.alphaKeys = gradientMinAlphaKeys.GetAlphaKeys ();
|
minMaxGradient.gradientMin.colorKeys = gradientMinColorKeys.GetColorKeys ();
|
}
|
|
minMaxGradient.mode = gradientMode.GetGradientMode ();
|
|
return minMaxGradient;
|
}
|
}
|
|
[Serializable]
|
public class SerializableMinMaxCurve{
|
public float constant;
|
public float constantMax;
|
public float constantMin;
|
public SerializableAnimationCurve curve;
|
public SerializableAnimationCurve curveMax;
|
public SerializableAnimationCurve curveMin;
|
public float curveMultiplier;
|
public SerializablePSCurveMode curveMode;
|
|
public SerializableMinMaxCurve (ParticleSystem.MinMaxCurve minMaxCurve){
|
|
curveMode = new SerializablePSCurveMode (minMaxCurve.mode);
|
|
if (minMaxCurve.mode == ParticleSystemCurveMode.Constant)
|
constant = minMaxCurve.constant;
|
|
if (minMaxCurve.mode == ParticleSystemCurveMode.Curve)
|
curve = new SerializableAnimationCurve (minMaxCurve.curve);
|
|
if (minMaxCurve.mode == ParticleSystemCurveMode.TwoConstants) {
|
constantMax = minMaxCurve.constantMax;
|
constantMin = minMaxCurve.constantMin;
|
}
|
|
if (minMaxCurve.mode == ParticleSystemCurveMode.TwoCurves) {
|
curveMax = new SerializableAnimationCurve (minMaxCurve.curveMax);
|
curveMin = new SerializableAnimationCurve (minMaxCurve.curve);
|
}
|
|
curveMultiplier = minMaxCurve.curveMultiplier;
|
}
|
|
public ParticleSystem.MinMaxCurve GetMinMaxCurve (){
|
ParticleSystem.MinMaxCurve minMaxCurve = new ParticleSystem.MinMaxCurve ();
|
|
if (curveMode.GetCurveMode() == ParticleSystemCurveMode.Constant)
|
minMaxCurve.constant = constant;
|
|
if (curveMode.GetCurveMode() == ParticleSystemCurveMode.TwoConstants) {
|
minMaxCurve.constantMax = constantMax;
|
minMaxCurve.constantMin = constantMin;
|
}
|
|
if (curveMode.GetCurveMode () == ParticleSystemCurveMode.Curve) {
|
if (minMaxCurve.curve == null)
|
minMaxCurve.curve = new AnimationCurve ();
|
minMaxCurve.curve = curve.GetAnimationCurve ();
|
}
|
|
if (curveMode.GetCurveMode() == ParticleSystemCurveMode.TwoCurves) {
|
if (minMaxCurve.curveMax == null)
|
minMaxCurve.curveMax = new AnimationCurve ();
|
minMaxCurve.curveMax = curveMax.GetAnimationCurve();
|
|
if (minMaxCurve.curveMin == null)
|
minMaxCurve.curveMin = new AnimationCurve ();
|
minMaxCurve.curveMin = curveMin.GetAnimationCurve();
|
}
|
|
minMaxCurve.curveMultiplier = curveMultiplier;
|
minMaxCurve.mode = curveMode.GetCurveMode ();
|
|
return minMaxCurve;
|
}
|
}
|
|
[Serializable]
|
public class SerializableAnimationCurve {
|
public SerializableKeyFrames[] keys;
|
public SerializableWrapMode postWrapMode;
|
public SerializableWrapMode preWrapMode;
|
|
public SerializableAnimationCurve (AnimationCurve animCurve){
|
SerializableKeyFrames[] keys_ = new SerializableKeyFrames[animCurve.keys.Length];
|
for (int i = 0; i < animCurve.length; i++) {
|
keys_[i] = new SerializableKeyFrames (animCurve.keys[i]);
|
}
|
keys = keys_;
|
postWrapMode = new SerializableWrapMode(animCurve.postWrapMode);
|
preWrapMode = new SerializableWrapMode(animCurve.preWrapMode);
|
}
|
|
public AnimationCurve GetAnimationCurve (){
|
AnimationCurve animCurv = new AnimationCurve ();
|
animCurv.keys = new Keyframe[keys.Length];
|
for(int i = 0; i < keys.Length; i++){
|
animCurv.keys[i] = keys[i].GetKeyFrames();
|
}
|
animCurv.postWrapMode = postWrapMode.GetWrapMode();
|
animCurv.preWrapMode = preWrapMode.GetWrapMode();
|
|
return animCurv;
|
}
|
}
|
|
[Serializable]
|
public class SerializableKeyFrames{
|
public float inTangent;
|
public float outTangent;
|
public int tangentMode;
|
public float time;
|
public float value;
|
|
public SerializableKeyFrames (Keyframe keyFrame){
|
inTangent = keyFrame.inTangent;
|
outTangent = keyFrame.outTangent;
|
tangentMode = keyFrame.tangentMode;
|
time = keyFrame.time;
|
value = keyFrame.value;
|
}
|
|
public Keyframe GetKeyFrames (){
|
Keyframe kf = new Keyframe();
|
|
kf.inTangent = inTangent;
|
kf.outTangent = outTangent;
|
kf.tangentMode = tangentMode;
|
kf.time = time;
|
kf.value = value;
|
|
return kf;
|
}
|
}
|
|
[Serializable]
|
public class SerializableAlphaKeys{
|
public float[] alpha;
|
public float[] time;
|
|
public SerializableAlphaKeys (GradientAlphaKey[] gradAlphaKeys){
|
float[] alpha_ = new float[gradAlphaKeys.Length];
|
float[] time_ = new float[gradAlphaKeys.Length];
|
for (int i = 0; i < gradAlphaKeys.Length; i++) {
|
alpha_[i] = gradAlphaKeys[i].alpha;
|
time_[i] = gradAlphaKeys[i].time;
|
}
|
alpha = alpha_;
|
time = time_;
|
}
|
|
public GradientAlphaKey[] GetAlphaKeys (){
|
GradientAlphaKey[] gak = new GradientAlphaKey[alpha.Length];
|
for (int i = 0; i < alpha.Length; i++) {
|
gak [i].alpha = alpha [i];
|
gak [i].time = time [i];
|
}
|
return gak;
|
}
|
}
|
|
[Serializable]
|
public class SerializableColorKeys{
|
public SerializableColor[] color;
|
public float[] time;
|
|
public SerializableColorKeys (GradientColorKey[] gradColorKeys){
|
SerializableColor[] color_ = new SerializableColor[gradColorKeys.Length];
|
float[] time_ = new float[gradColorKeys.Length];
|
for (int i = 0; i < gradColorKeys.Length; i++) {
|
color_[i] = new SerializableColor (gradColorKeys[i].color);
|
time_[i] = gradColorKeys[i].time;
|
}
|
color = color_;
|
time = time_;
|
}
|
|
public GradientColorKey[] GetColorKeys (){
|
GradientColorKey[] gck = new GradientColorKey[color.Length];
|
for (int i = 0; i < color.Length; i++) {
|
gck [i].color = color [i].GetColor();
|
gck [i].time = time [i];
|
}
|
return gck;
|
}
|
}
|
|
[Serializable]
|
public class SerializableColor {
|
public float R;
|
public float G;
|
public float B;
|
public float A;
|
|
public SerializableColor (Color color){
|
R = color.r;
|
G = color.g;
|
B = color.b;
|
A = color.a;
|
}
|
|
public Color GetColor (){
|
return new Color (R,G,B,A);
|
}
|
}
|
|
[Serializable]
|
public class SerializableVector3 {
|
public float x;
|
public float y;
|
public float z;
|
|
public SerializableVector3 (Vector3 v3){
|
x = v3.x;
|
y = v3.y;
|
z = v3.z;
|
}
|
|
public Vector3 GetVector3 (){
|
return new Vector3 (x,y,z);
|
}
|
}
|
|
[Serializable]
|
public class SerializableGradient{
|
public SerializableAlphaKeys gradientAlphaKeys;
|
public SerializableColorKeys gradientColorKeys;
|
public SerializableGradientMode gradientMode;
|
|
public SerializableGradient (Gradient gradient){
|
gradientMode = new SerializableGradientMode (gradient.mode);
|
gradientAlphaKeys = new SerializableAlphaKeys (gradient.alphaKeys);
|
gradientColorKeys = new SerializableColorKeys (gradient.colorKeys);
|
}
|
|
public Gradient GetGradient (){
|
Gradient gradient = new Gradient ();
|
gradient.alphaKeys = gradientAlphaKeys.GetAlphaKeys ();
|
gradient.colorKeys = gradientColorKeys.GetColorKeys ();
|
gradient.mode = gradientMode.GetGradientMode ();
|
|
return gradient;
|
}
|
}
|
|
[Serializable]
|
public class SerializablePSGradientMode{
|
public string mode;
|
|
public SerializablePSGradientMode (ParticleSystemGradientMode psGradientMode){
|
mode = psGradientMode.ToString();
|
}
|
|
public ParticleSystemGradientMode GetGradientMode (){
|
ParticleSystemGradientMode psGradientMode = new ParticleSystemGradientMode ();
|
switch (mode) {
|
case "Color":
|
{
|
psGradientMode = ParticleSystemGradientMode.Color;
|
break;
|
}
|
case "Gradient":
|
{
|
psGradientMode = ParticleSystemGradientMode.Gradient;
|
break;
|
}
|
case "RandomColor":
|
{
|
psGradientMode = ParticleSystemGradientMode.RandomColor;
|
break;
|
}
|
case "TwoColors":
|
{
|
psGradientMode = ParticleSystemGradientMode.TwoColors;
|
break;
|
}
|
case "TwoGradients":
|
{
|
psGradientMode = ParticleSystemGradientMode.TwoGradients;
|
break;
|
}
|
}
|
return psGradientMode;
|
}
|
}
|
|
[Serializable]
|
public class SerializableGradientMode{
|
public string mode;
|
|
public SerializableGradientMode (GradientMode gradientMode){
|
mode = gradientMode.ToString();
|
}
|
|
public GradientMode GetGradientMode (){
|
GradientMode gradientMode = new GradientMode ();
|
switch (mode) {
|
case "Blend":
|
{
|
gradientMode = GradientMode.Blend;
|
break;
|
}
|
case "Fixed":
|
{
|
gradientMode = GradientMode.Fixed;
|
break;
|
}
|
}
|
return gradientMode;
|
}
|
}
|
|
[Serializable]
|
public class SerializablePSCurveMode{
|
public string mode;
|
|
public SerializablePSCurveMode (ParticleSystemCurveMode psCurveMode){
|
mode = psCurveMode.ToString();
|
}
|
|
public ParticleSystemCurveMode GetCurveMode (){
|
ParticleSystemCurveMode psCurveMode = new ParticleSystemCurveMode ();
|
switch (mode) {
|
case "Constant":
|
{
|
psCurveMode = ParticleSystemCurveMode.Constant;
|
break;
|
}
|
case "Curve":
|
{
|
psCurveMode = ParticleSystemCurveMode.Curve;
|
break;
|
}
|
case "TwoConstants":
|
{
|
psCurveMode = ParticleSystemCurveMode.TwoConstants;
|
break;
|
}
|
case "TwoCurves":
|
{
|
psCurveMode = ParticleSystemCurveMode.TwoCurves;
|
break;
|
}
|
}
|
|
return psCurveMode;
|
}
|
}
|
|
[Serializable]
|
public class SerializableWrapMode {
|
public string mode;
|
|
public SerializableWrapMode (WrapMode wrapMode){
|
mode = wrapMode.ToString();
|
}
|
|
public WrapMode GetWrapMode (){
|
WrapMode wrapMode = new WrapMode ();
|
switch (mode) {
|
case "Clamp":
|
{
|
wrapMode = WrapMode.Clamp;
|
break;
|
}
|
case "ClampForever":
|
{
|
wrapMode = WrapMode.ClampForever;
|
break;
|
}
|
case "Default":
|
{
|
wrapMode = WrapMode.Default;
|
break;
|
}
|
case "Loop":
|
{
|
wrapMode = WrapMode.Loop;
|
break;
|
}
|
case "Once":
|
{
|
wrapMode = WrapMode.Once;
|
break;
|
}
|
case "PingPong":
|
{
|
wrapMode = WrapMode.PingPong;
|
break;
|
}
|
}
|
|
return wrapMode;
|
}
|
}
|
}
|