2021-12-15 16:29:44 +03:00

474 lines
13 KiB
C#

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;
}
}
}