Ejemplo n.º 1
0
        public static byte[] GetBytes(Data.RendererCommonValues value,
                                      Data.AdvancedRenderCommonValues advanceValue,
                                      Data.AdvancedRenderCommonValues2 advanceValue2,
                                      SortedDictionary <string, int> texture_and_index,
                                      SortedDictionary <string, int> normalTexture_and_index,
                                      SortedDictionary <string, int> distortionTexture_and_index,
                                      SortedDictionary <string, int> material_and_index,
                                      ExporterVersion version)
        {
            List <byte[]> data = new List <byte[]>();

            var texInfo = new TextureInformation();

            var alphaTexInfo = new TextureInformation();

            var uvDistortionTexInfo = new TextureInformation();

            var blendTexInfo = new TextureInformation();

            var blendAlphaTexInfo = new TextureInformation();

            var blendUVDistortionTexInfo = new TextureInformation();

            data.Add(((int)value.Material.Value).GetBytes());

            if (version >= ExporterVersion.Ver16Alpha1)
            {
                if (value.Material.Value == Data.RendererCommonValues.MaterialType.Default ||
                    value.Material.Value == Data.RendererCommonValues.MaterialType.Lighting)
                {
                    data.Add(BitConverter.GetBytes(value.EmissiveScaling));
                }
            }

            Func <Data.Value.PathForImage, int, SortedDictionary <string, int>, int> getTexIDAndStoreSize = (Data.Value.PathForImage image, int number, SortedDictionary <string, int> texAndInd) =>
            {
                var tempTexInfo = new TextureInformation();

                if (texAndInd.ContainsKey(image.RelativePath) && tempTexInfo.Load(image.AbsolutePath))
                {
                    if (value.UVTextureReferenceTarget.Value != Data.UVTextureReferenceTargetType.None && number == (int)value.UVTextureReferenceTarget.Value)
                    {
                        texInfo.Load(image.AbsolutePath);
                    }

                    return(texAndInd[image.RelativePath]);
                }
                else
                {
                    return(-1);
                }
            };

            GetTexIDAndInfo getTexIDAndInfo = (Data.Value.PathForImage image, SortedDictionary <string, int> texAndInd, ref TextureInformation texInfoRef) =>
            {
                var tempTexInfo = new TextureInformation();

                if (texAndInd.ContainsKey(image.RelativePath) && tempTexInfo.Load(image.AbsolutePath))
                {
                    texInfoRef.Load(image.AbsolutePath);
                    return(texAndInd[image.RelativePath]);
                }

                return(-1);
            };

            if (value.Material.Value == Data.RendererCommonValues.MaterialType.Default)
            {
                // texture1
                data.Add(getTexIDAndStoreSize(value.ColorTexture, 1, texture_and_index).GetBytes());

                // texture2
                data.Add((-1).GetBytes());

                if (version >= ExporterVersion.Ver16Alpha1)
                {
                    // alpha texture
                    if (advanceValue.EnableAlphaTexture)
                    {
                        data.Add(getTexIDAndInfo(advanceValue.AlphaTextureParam.Texture, texture_and_index, ref alphaTexInfo).GetBytes());
                    }
                    else
                    {
                        data.Add((-1).GetBytes());
                    }

                    // uv distortion texture
                    if (advanceValue.EnableUVDistortionTexture)
                    {
                        data.Add(getTexIDAndInfo(advanceValue.UVDistortionTextureParam.Texture, texture_and_index, ref uvDistortionTexInfo).GetBytes());
                    }
                    else
                    {
                        data.Add((-1).GetBytes());
                    }

                    // blend texture
                    if (advanceValue2.EnableBlendTexture)
                    {
                        data.Add(getTexIDAndInfo(advanceValue2.BlendTextureParams.BlendTextureParam.Texture, texture_and_index, ref blendTexInfo).GetBytes());

                        // blend alpha texture
                        if (advanceValue2.BlendTextureParams.EnableBlendAlphaTexture)
                        {
                            data.Add(getTexIDAndInfo(advanceValue2.BlendTextureParams.BlendAlphaTextureParam.Texture, texture_and_index, ref blendAlphaTexInfo).GetBytes());
                        }
                        else
                        {
                            data.Add((-1).GetBytes());
                        }

                        // blend uv distortion texture
                        if (advanceValue2.BlendTextureParams.EnableBlendUVDistortionTexture)
                        {
                            data.Add(getTexIDAndInfo(advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.Texture, texture_and_index, ref blendUVDistortionTexInfo).GetBytes());
                        }
                        else
                        {
                            data.Add((-1).GetBytes());
                        }
                    }
                    else
                    {
                        data.Add((-1).GetBytes());
                        data.Add((-1).GetBytes());
                        data.Add((-1).GetBytes());
                    }
                }
            }
            else if (value.Material.Value == Data.RendererCommonValues.MaterialType.BackDistortion)
            {
                // texture1
                data.Add(getTexIDAndStoreSize(value.ColorTexture, 1, distortionTexture_and_index).GetBytes());

                // texture2
                data.Add((-1).GetBytes());

                if (version >= ExporterVersion.Ver16Alpha1)
                {
                    // alpha texture
                    if (advanceValue.EnableAlphaTexture)
                    {
                        data.Add(getTexIDAndInfo(advanceValue.AlphaTextureParam.Texture, distortionTexture_and_index, ref alphaTexInfo).GetBytes());
                    }
                    else
                    {
                        data.Add((-1).GetBytes());
                    }

                    // uv distortion texture
                    if (advanceValue.EnableUVDistortionTexture)
                    {
                        data.Add(getTexIDAndInfo(advanceValue.UVDistortionTextureParam.Texture, distortionTexture_and_index, ref uvDistortionTexInfo).GetBytes());
                    }
                    else
                    {
                        data.Add((-1).GetBytes());
                    }

                    // blend texture
                    if (advanceValue2.EnableBlendTexture)
                    {
                        data.Add(getTexIDAndInfo(advanceValue2.BlendTextureParams.BlendTextureParam.Texture, distortionTexture_and_index, ref blendTexInfo).GetBytes());

                        // blend alpha texture
                        if (advanceValue2.BlendTextureParams.EnableBlendAlphaTexture)
                        {
                            data.Add(getTexIDAndInfo(advanceValue2.BlendTextureParams.BlendAlphaTextureParam.Texture, distortionTexture_and_index, ref blendAlphaTexInfo).GetBytes());
                        }
                        else
                        {
                            data.Add((-1).GetBytes());
                        }

                        // blend uv distortion texture
                        if (advanceValue2.BlendTextureParams.EnableBlendUVDistortionTexture)
                        {
                            data.Add(getTexIDAndInfo(advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.Texture, distortionTexture_and_index, ref blendUVDistortionTexInfo).GetBytes());
                        }
                        else
                        {
                            data.Add((-1).GetBytes());
                        }
                    }
                    else
                    {
                        data.Add((-1).GetBytes());
                        data.Add((-1).GetBytes());
                        data.Add((-1).GetBytes());
                    }
                }
            }
            else if (value.Material.Value == Data.RendererCommonValues.MaterialType.Lighting)
            {
                // texture1
                data.Add(getTexIDAndStoreSize(value.ColorTexture, 1, texture_and_index).GetBytes());

                // texture2
                data.Add(getTexIDAndStoreSize(value.NormalTexture, 2, normalTexture_and_index).GetBytes());

                if (version >= ExporterVersion.Ver16Alpha1)
                {
                    // alpha texture
                    if (advanceValue.EnableAlphaTexture)
                    {
                        data.Add(getTexIDAndInfo(advanceValue.AlphaTextureParam.Texture, texture_and_index, ref alphaTexInfo).GetBytes());
                    }
                    else
                    {
                        data.Add((-1).GetBytes());
                    }

                    // uv distortion texture
                    if (advanceValue.EnableUVDistortionTexture)
                    {
                        data.Add(getTexIDAndInfo(advanceValue.UVDistortionTextureParam.Texture, texture_and_index, ref uvDistortionTexInfo).GetBytes());
                    }
                    else
                    {
                        data.Add((-1).GetBytes());
                    }

                    // blend texture
                    if (advanceValue2.EnableBlendTexture)
                    {
                        data.Add(getTexIDAndInfo(advanceValue2.BlendTextureParams.BlendTextureParam.Texture, texture_and_index, ref blendTexInfo).GetBytes());

                        // blend alpha texture
                        if (advanceValue2.BlendTextureParams.EnableBlendAlphaTexture)
                        {
                            data.Add(getTexIDAndInfo(advanceValue2.BlendTextureParams.BlendAlphaTextureParam.Texture, texture_and_index, ref blendAlphaTexInfo).GetBytes());
                        }
                        else
                        {
                            data.Add((-1).GetBytes());
                        }

                        // blend uv distortion texture
                        if (advanceValue2.BlendTextureParams.EnableBlendUVDistortionTexture)
                        {
                            data.Add(getTexIDAndInfo(advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.Texture, texture_and_index, ref blendUVDistortionTexInfo).GetBytes());
                        }
                        else
                        {
                            data.Add((-1).GetBytes());
                        }
                    }
                    else
                    {
                        data.Add((-1).GetBytes());
                        data.Add((-1).GetBytes());
                        data.Add((-1).GetBytes());
                    }
                }
            }
            else
            {
                var materialInfo = Core.ResourceCache.LoadMaterialInformation(value.MaterialFile.Path.AbsolutePath);
                if (materialInfo == null)
                {
                    materialInfo = new MaterialInformation();
                }

                var textures = value.MaterialFile.GetTextures(materialInfo).Where(_ => _.Item1 != null).ToArray();
                var uniforms = value.MaterialFile.GetUniforms(materialInfo);

                // maximum slot limitation
                if (textures.Length > Constant.UserTextureSlotCount)
                {
                    textures = textures.Take(Constant.UserTextureSlotCount).ToArray();
                }

                if (material_and_index.ContainsKey(value.MaterialFile.Path.RelativePath))
                {
                    data.Add(material_and_index[value.MaterialFile.Path.RelativePath].GetBytes());
                }
                else
                {
                    data.Add((-1).GetBytes());
                }

                data.Add(textures.Length.GetBytes());

                foreach (var texture in textures)
                {
                    var texture_ = texture.Item1.Value as Data.Value.PathForImage;
                    if (texture.Item2.Type == TextureType.Value)
                    {
                        data.Add((1).GetBytes());
                        data.Add(getTexIDAndStoreSize(texture_, texture.Item2.Priority, normalTexture_and_index).GetBytes());
                    }
                    else
                    {
                        data.Add((0).GetBytes());
                        data.Add(getTexIDAndStoreSize(texture_, texture.Item2.Priority, texture_and_index).GetBytes());
                    }
                }

                data.Add(uniforms.Count.GetBytes());

                foreach (var uniform in uniforms)
                {
                    float[] floats = new float[4];

                    if (uniform.Item1 == null)
                    {
                        floats = uniform.Item2.DefaultValues.ToArray();
                    }
                    else if (uniform.Item1.Value is Data.Value.Float)
                    {
                        floats[0] = (uniform.Item1.Value as Data.Value.Float).Value;
                    }
                    else if (uniform.Item1.Value is Data.Value.Vector2D)
                    {
                        floats[0] = (uniform.Item1.Value as Data.Value.Vector2D).X.Value;
                        floats[1] = (uniform.Item1.Value as Data.Value.Vector2D).Y.Value;
                    }
                    else if (uniform.Item1.Value is Data.Value.Vector3D)
                    {
                        floats[0] = (uniform.Item1.Value as Data.Value.Vector3D).X.Value;
                        floats[1] = (uniform.Item1.Value as Data.Value.Vector3D).Y.Value;
                        floats[2] = (uniform.Item1.Value as Data.Value.Vector3D).Z.Value;
                    }
                    else if (uniform.Item1.Value is Data.Value.Vector4D)
                    {
                        floats[0] = (uniform.Item1.Value as Data.Value.Vector4D).X.Value;
                        floats[1] = (uniform.Item1.Value as Data.Value.Vector4D).Y.Value;
                        floats[2] = (uniform.Item1.Value as Data.Value.Vector4D).Z.Value;
                        floats[3] = (uniform.Item1.Value as Data.Value.Vector4D).W.Value;
                    }

                    data.Add(floats[0].GetBytes());
                    data.Add(floats[1].GetBytes());
                    data.Add(floats[2].GetBytes());
                    data.Add(floats[3].GetBytes());
                }
            }

            data.Add(value.AlphaBlend);
            data.Add(value.Filter);
            data.Add(value.Wrap);

            data.Add(value.Filter2);
            data.Add(value.Wrap2);

            if (version >= ExporterVersion.Ver16Alpha1)
            {
                data.Add(advanceValue.AlphaTextureParam.Filter);
                data.Add(advanceValue.AlphaTextureParam.Wrap);

                data.Add(advanceValue.UVDistortionTextureParam.Filter);
                data.Add(advanceValue.UVDistortionTextureParam.Wrap);

                data.Add(advanceValue2.BlendTextureParams.BlendTextureParam.Filter);
                data.Add(advanceValue2.BlendTextureParams.BlendTextureParam.Wrap);

                data.Add(advanceValue2.BlendTextureParams.BlendAlphaTextureParam.Filter);
                data.Add(advanceValue2.BlendTextureParams.BlendAlphaTextureParam.Wrap);

                data.Add(advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.Filter);
                data.Add(advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.Wrap);
            }

            if (value.ZTest.GetValue())
            {
                data.Add((1).GetBytes());
            }
            else
            {
                data.Add((0).GetBytes());
            }

            if (value.ZWrite.GetValue())
            {
                data.Add((1).GetBytes());
            }
            else
            {
                data.Add((0).GetBytes());
            }

            data.Add(value.FadeInType);
            if (value.FadeInType.Value == Data.RendererCommonValues.FadeType.Use)
            {
                data.Add(value.FadeIn.Frame.GetBytes());

                var easing = Utl.MathUtl.Easing((float)value.FadeIn.StartSpeed.Value, (float)value.FadeIn.EndSpeed.Value);
                data.Add(BitConverter.GetBytes(easing[0]));
                data.Add(BitConverter.GetBytes(easing[1]));
                data.Add(BitConverter.GetBytes(easing[2]));
            }

            data.Add(value.FadeOutType);
            if (value.FadeOutType.Value == Data.RendererCommonValues.FadeType.Use)
            {
                data.Add(value.FadeOut.Frame.GetBytes());

                var easing = Utl.MathUtl.Easing((float)value.FadeOut.StartSpeed.Value, (float)value.FadeOut.EndSpeed.Value);
                data.Add(BitConverter.GetBytes(easing[0]));
                data.Add(BitConverter.GetBytes(easing[1]));
                data.Add(BitConverter.GetBytes(easing[2]));
            }

            // sprcification change(1.5)
            float width  = 128.0f;
            float height = 128.0f;

            if (texInfo.Width > 0 && texInfo.Height > 0)
            {
                width  = (float)texInfo.Width;
                height = (float)texInfo.Height;
            }

            data.Add(value.UV);
            if (value.UV.Value == Data.RendererCommonValues.UVType.Default)
            {
            }
            else if (value.UV.Value == Data.RendererCommonValues.UVType.Fixed)
            {
                var value_ = value.UVFixed;
                data.Add((value_.Start.X / width).GetBytes());
                data.Add((value_.Start.Y / height).GetBytes());
                data.Add((value_.Size.X / width).GetBytes());
                data.Add((value_.Size.Y / height).GetBytes());
            }
            else if (value.UV.Value == Data.RendererCommonValues.UVType.Animation)
            {
                var value_ = value.UVAnimation;

                data.Add((value_.AnimationParams.Start.X / width).GetBytes());
                data.Add((value_.AnimationParams.Start.Y / height).GetBytes());
                data.Add((value_.AnimationParams.Size.X / width).GetBytes());
                data.Add((value_.AnimationParams.Size.Y / height).GetBytes());

                if (value_.AnimationParams.FrameLength.Infinite)
                {
                    var inf = int.MaxValue / 100;
                    data.Add(inf.GetBytes());
                }
                else
                {
                    data.Add(value_.AnimationParams.FrameLength.Value.Value.GetBytes());
                }

                data.Add(value_.AnimationParams.FrameCountX.Value.GetBytes());
                data.Add(value_.AnimationParams.FrameCountY.Value.GetBytes());
                data.Add(value_.AnimationParams.LoopType);

                data.Add(value_.AnimationParams.StartSheet.Max.GetBytes());
                data.Add(value_.AnimationParams.StartSheet.Min.GetBytes());

                data.Add(value_.FlipbookInterpolationType);
            }
            else if (value.UV.Value == Data.RendererCommonValues.UVType.Scroll)
            {
                var value_ = value.UVScroll;
                data.Add((value_.Start.X.Max / width).GetBytes());
                data.Add((value_.Start.Y.Max / height).GetBytes());
                data.Add((value_.Start.X.Min / width).GetBytes());
                data.Add((value_.Start.Y.Min / height).GetBytes());

                data.Add((value_.Size.X.Max / width).GetBytes());
                data.Add((value_.Size.Y.Max / height).GetBytes());
                data.Add((value_.Size.X.Min / width).GetBytes());
                data.Add((value_.Size.Y.Min / height).GetBytes());

                data.Add((value_.Speed.X.Max / width).GetBytes());
                data.Add((value_.Speed.Y.Max / height).GetBytes());
                data.Add((value_.Speed.X.Min / width).GetBytes());
                data.Add((value_.Speed.Y.Min / height).GetBytes());
            }
            else if (value.UV.Value == Data.RendererCommonValues.UVType.FCurve)
            {
                {
                    var           value_ = value.UVFCurve.Start;
                    var           bytes1 = value_.GetBytes(1.0f / width, 1.0f / height);
                    List <byte[]> _data  = new List <byte[]>();
                    data.Add(bytes1);
                }

                {
                    var           value_ = value.UVFCurve.Size;
                    var           bytes1 = value_.GetBytes(1.0f / width, 1.0f / height);
                    List <byte[]> _data  = new List <byte[]>();
                    data.Add(bytes1);
                }
            }


            if (version >= ExporterVersion.Ver16Alpha1)
            {
                // alpha texture
                data.Add(GetUVBytes
                         (
                             alphaTexInfo,
                             advanceValue.AlphaTextureParam.UV,
                             advanceValue.AlphaTextureParam.UVFixed,
                             advanceValue.AlphaTextureParam.UVAnimation,
                             advanceValue.AlphaTextureParam.UVScroll,
                             advanceValue.AlphaTextureParam.UVFCurve
                         ));

                // uv distortion texture
                data.Add(GetUVBytes
                         (
                             uvDistortionTexInfo,
                             advanceValue.UVDistortionTextureParam.UV,
                             advanceValue.UVDistortionTextureParam.UVFixed,
                             advanceValue.UVDistortionTextureParam.UVAnimation,
                             advanceValue.UVDistortionTextureParam.UVScroll,
                             advanceValue.UVDistortionTextureParam.UVFCurve
                         ));

                // uv distortion intensity
                data.Add((advanceValue.UVDistortionTextureParam.UVDistortionIntensity).GetBytes());

                // blend texture
                data.Add(GetUVBytes
                         (
                             blendTexInfo,
                             advanceValue2.BlendTextureParams.BlendTextureParam.UV,
                             advanceValue2.BlendTextureParams.BlendTextureParam.UVFixed,
                             advanceValue2.BlendTextureParams.BlendTextureParam.UVAnimation,
                             advanceValue2.BlendTextureParams.BlendTextureParam.UVScroll,
                             advanceValue2.BlendTextureParams.BlendTextureParam.UVFCurve
                         ));

                // blend texture blend type
                if (advanceValue2.EnableBlendTexture && advanceValue2.BlendTextureParams.BlendTextureParam.Texture.RelativePath != string.Empty)
                {
                    data.Add(advanceValue2.BlendTextureParams.BlendTextureParam.BlendType);
                }
                else
                {
                    data.Add((-1).GetBytes());
                }

                // blend alpha texture
                data.Add(GetUVBytes
                         (
                             blendAlphaTexInfo,
                             advanceValue2.BlendTextureParams.BlendAlphaTextureParam.UV,
                             advanceValue2.BlendTextureParams.BlendAlphaTextureParam.UVFixed,
                             advanceValue2.BlendTextureParams.BlendAlphaTextureParam.UVAnimation,
                             advanceValue2.BlendTextureParams.BlendAlphaTextureParam.UVScroll,
                             advanceValue2.BlendTextureParams.BlendAlphaTextureParam.UVFCurve
                         ));

                // blend uv distoriton texture
                data.Add(GetUVBytes
                         (
                             blendUVDistortionTexInfo,
                             advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.UV,
                             advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.UVFixed,
                             advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.UVAnimation,
                             advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.UVScroll,
                             advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.UVFCurve
                         ));

                // blend uv distoriton intensity
                data.Add((advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.UVDistortionIntensity).GetBytes());
            }


            // Inheritance
            data.Add(value.ColorInheritType.GetValueAsInt().GetBytes());

            // Distortion
            data.Add(value.DistortionIntensity.GetBytes());

            // Custom data1 from 1.5
            data.Add(value.CustomData1.CustomData);
            if (value.CustomData1.CustomData.Value == Data.CustomDataType.Fixed2D)
            {
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed.X.Value));
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed.Y.Value));
            }
            else if (value.CustomData1.CustomData.Value == Data.CustomDataType.Random2D)
            {
                var value_ = value.CustomData1.Random;
                var bytes1 = value_.GetBytes(1.0f);
                data.Add(bytes1);
            }
            else if (value.CustomData1.CustomData.Value == Data.CustomDataType.Easing2D)
            {
                var easing = Utl.MathUtl.Easing((float)value.CustomData1.Easing.StartSpeed.Value, (float)value.CustomData1.Easing.EndSpeed.Value);

                List <byte[]> _data = new List <byte[]>();
                _data.Add(value.CustomData1.Easing.Start.GetBytes(1.0f));
                _data.Add(value.CustomData1.Easing.End.GetBytes(1.0f));
                _data.Add(BitConverter.GetBytes(easing[0]));
                _data.Add(BitConverter.GetBytes(easing[1]));
                _data.Add(BitConverter.GetBytes(easing[2]));
                var __data = _data.ToArray().ToArray();
                data.Add(__data);
            }
            else if (value.CustomData1.CustomData.Value == Data.CustomDataType.FCurve2D)
            {
                var value_ = value.CustomData1.FCurve;
                var bytes1 = value_.GetBytes();
                data.Add(bytes1);
            }
            else if (value.CustomData1.CustomData.Value == Data.CustomDataType.Fixed4D)
            {
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed4.X.Value));
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed4.Y.Value));
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed4.Z.Value));
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed4.W.Value));
            }
            else if (value.CustomData1.CustomData.Value == Data.CustomDataType.FCurveColor)
            {
                var bytes = value.CustomData1.FCurveColor.GetBytes();
                data.Add(bytes);
            }

            // Custom data2 from 1.5
            data.Add(value.CustomData2.CustomData);
            if (value.CustomData2.CustomData.Value == Data.CustomDataType.Fixed2D)
            {
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed.X.Value));
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed.Y.Value));
            }
            else if (value.CustomData2.CustomData.Value == Data.CustomDataType.Random2D)
            {
                var value_ = value.CustomData2.Random;
                var bytes1 = value_.GetBytes(1.0f);
                data.Add(bytes1);
            }
            else if (value.CustomData2.CustomData.Value == Data.CustomDataType.Easing2D)
            {
                var easing = Utl.MathUtl.Easing((float)value.CustomData2.Easing.StartSpeed.Value, (float)value.CustomData2.Easing.EndSpeed.Value);

                List <byte[]> _data = new List <byte[]>();
                _data.Add(value.CustomData2.Easing.Start.GetBytes(1.0f));
                _data.Add(value.CustomData2.Easing.End.GetBytes(1.0f));
                _data.Add(BitConverter.GetBytes(easing[0]));
                _data.Add(BitConverter.GetBytes(easing[1]));
                _data.Add(BitConverter.GetBytes(easing[2]));
                var __data = _data.ToArray().ToArray();
                data.Add(__data);
            }
            else if (value.CustomData2.CustomData.Value == Data.CustomDataType.FCurve2D)
            {
                var value_ = value.CustomData2.FCurve;
                var bytes1 = value_.GetBytes();
                data.Add(bytes1);
            }
            else if (value.CustomData2.CustomData.Value == Data.CustomDataType.Fixed4D)
            {
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed4.X.Value));
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed4.Y.Value));
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed4.Z.Value));
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed4.W.Value));
            }
            else if (value.CustomData2.CustomData.Value == Data.CustomDataType.FCurveColor)
            {
                var bytes = value.CustomData2.FCurveColor.GetBytes();
                data.Add(bytes);
            }

            if (version >= ExporterVersion.Ver16Alpha1)
            {
                data.Add(AlphaCutoffValues.GetBytes(advanceValue.AlphaCutoffParam, version));
            }

            if (version >= ExporterVersion.Ver16Alpha3)
            {
                if (advanceValue.EnableFalloff)
                {
                    data.Add((1).GetBytes());

                    data.Add(advanceValue.FalloffParam.ColorBlendType);
                    data.Add(advanceValue.FalloffParam.BeginColor);
                    data.Add(advanceValue.FalloffParam.EndColor);
                    data.Add(BitConverter.GetBytes(advanceValue.FalloffParam.Pow.Value));
                }
                else
                {
                    data.Add((0).GetBytes());
                }
            }

            if (version >= ExporterVersion.Ver16Alpha4)
            {
                data.Add(advanceValue.SoftParticleDistance.GetBytes());
            }

            if (version >= ExporterVersion.Ver16Alpha5)
            {
                data.Add(advanceValue.SoftParticleDistanceNear.GetBytes());
                data.Add(advanceValue.SoftParticleDistanceNearOffset.GetBytes());
            }

            return(data.ToArray().ToArray());
        }
Ejemplo n.º 2
0
        public static byte[] GetBytes(Data.RendererCommonValues value,
                                      Data.AdvancedRenderCommonValues advanceValue,
                                      Data.AdvancedRenderCommonValues2 advanceValue2,
                                      SortedDictionary <string, int> texture_and_index,
                                      SortedDictionary <string, int> normalTexture_and_index,
                                      SortedDictionary <string, int> distortionTexture_and_index,
                                      SortedDictionary <string, int> material_and_index,
                                      ExporterVersion version)
        {
            List <byte[]> data = new List <byte[]>();

            var texInfoRepo = new TextureInformationRepository();
            var texInfo     = texInfoRepo.Texture;

            data.Add(((int)value.Material.Value).GetBytes());

            if (version >= ExporterVersion.Ver16Alpha1)
            {
                if (value.Material.Value == Data.RendererCommonValues.MaterialType.Default ||
                    value.Material.Value == Data.RendererCommonValues.MaterialType.Lighting)
                {
                    data.Add(BitConverter.GetBytes(value.EmissiveScaling));
                }
            }

            data.AddRange(GetTextureValues(value,
                                           advanceValue,
                                           advanceValue2,
                                           texture_and_index,
                                           normalTexture_and_index,
                                           distortionTexture_and_index,
                                           material_and_index,
                                           version,
                                           texInfoRepo));

            data.Add(value.AlphaBlend);
            data.Add(value.Filter);
            data.Add(value.Wrap);

            data.Add(value.Filter2);
            data.Add(value.Wrap2);

            if (version >= ExporterVersion.Ver16Alpha1)
            {
                data.Add(advanceValue.AlphaTextureParam.Filter);
                data.Add(advanceValue.AlphaTextureParam.Wrap);

                data.Add(advanceValue.UVDistortionTextureParam.Filter);
                data.Add(advanceValue.UVDistortionTextureParam.Wrap);

                data.Add(advanceValue2.BlendTextureParams.BlendTextureParam.Filter);
                data.Add(advanceValue2.BlendTextureParams.BlendTextureParam.Wrap);

                data.Add(advanceValue2.BlendTextureParams.BlendAlphaTextureParam.Filter);
                data.Add(advanceValue2.BlendTextureParams.BlendAlphaTextureParam.Wrap);

                data.Add(advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.Filter);
                data.Add(advanceValue2.BlendTextureParams.BlendUVDistortionTextureParam.Wrap);
            }

            data.Add(value.ZTest.GetValue() ? 1.GetBytes() : 0.GetBytes());
            data.Add(value.ZWrite.GetValue() ? 1.GetBytes() : 0.GetBytes());

            data.Add(value.FadeInType);
            if (value.FadeInType.Value == Data.RendererCommonValues.FadeType.Use)
            {
                data.Add(value.FadeIn.Frame.GetBytes());

                var easing = Utl.MathUtl.Easing((float)value.FadeIn.StartSpeed.Value, (float)value.FadeIn.EndSpeed.Value);
                data.Add(BitConverter.GetBytes(easing[0]));
                data.Add(BitConverter.GetBytes(easing[1]));
                data.Add(BitConverter.GetBytes(easing[2]));
            }

            data.Add(value.FadeOutType);
            if (value.FadeOutType.Value == Data.RendererCommonValues.FadeType.Use)
            {
                data.Add(value.FadeOut.Frame.GetBytes());

                var easing = Utl.MathUtl.Easing((float)value.FadeOut.StartSpeed.Value, (float)value.FadeOut.EndSpeed.Value);
                data.Add(BitConverter.GetBytes(easing[0]));
                data.Add(BitConverter.GetBytes(easing[1]));
                data.Add(BitConverter.GetBytes(easing[2]));
            }

            data.Add(new BasicUvSerializer(value).SerializeUv(texInfo));


            if (version >= ExporterVersion.Ver16Alpha1)
            {
                AddUvBytes(advanceValue, advanceValue2, data, texInfoRepo);
            }


            // Inheritance
            data.Add(value.ColorInheritType.GetValueAsInt().GetBytes());

            // Distortion
            data.Add(value.DistortionIntensity.GetBytes());

            // Custom data1 from 1.5
            data.Add(value.CustomData1.CustomData);
            if (value.CustomData1.CustomData.Value == Data.CustomDataType.Fixed2D)
            {
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed.X.Value));
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed.Y.Value));
            }
            else if (value.CustomData1.CustomData.Value == Data.CustomDataType.Random2D)
            {
                var value_ = value.CustomData1.Random;
                var bytes1 = value_.GetBytes(1.0f);
                data.Add(bytes1);
            }
            else if (value.CustomData1.CustomData.Value == Data.CustomDataType.Easing2D)
            {
                var easing = Utl.MathUtl.Easing((float)value.CustomData1.Easing.StartSpeed.Value, (float)value.CustomData1.Easing.EndSpeed.Value);

                List <byte[]> _data = new List <byte[]>();
                _data.Add(value.CustomData1.Easing.Start.GetBytes(1.0f));
                _data.Add(value.CustomData1.Easing.End.GetBytes(1.0f));
                _data.Add(BitConverter.GetBytes(easing[0]));
                _data.Add(BitConverter.GetBytes(easing[1]));
                _data.Add(BitConverter.GetBytes(easing[2]));
                var __data = _data.ToArray().ToArray();
                data.Add(__data);
            }
            else if (value.CustomData1.CustomData.Value == Data.CustomDataType.FCurve2D)
            {
                var value_ = value.CustomData1.FCurve;
                var bytes1 = value_.GetBytes();
                data.Add(bytes1);
            }
            else if (value.CustomData1.CustomData.Value == Data.CustomDataType.Fixed4D)
            {
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed4.X.Value));
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed4.Y.Value));
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed4.Z.Value));
                data.Add(BitConverter.GetBytes(value.CustomData1.Fixed4.W.Value));
            }
            else if (value.CustomData1.CustomData.Value == Data.CustomDataType.FCurveColor)
            {
                var bytes = value.CustomData1.FCurveColor.GetBytes();
                data.Add(bytes);
            }

            // Custom data2 from 1.5
            data.Add(value.CustomData2.CustomData);
            if (value.CustomData2.CustomData.Value == Data.CustomDataType.Fixed2D)
            {
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed.X.Value));
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed.Y.Value));
            }
            else if (value.CustomData2.CustomData.Value == Data.CustomDataType.Random2D)
            {
                var value_ = value.CustomData2.Random;
                var bytes1 = value_.GetBytes(1.0f);
                data.Add(bytes1);
            }
            else if (value.CustomData2.CustomData.Value == Data.CustomDataType.Easing2D)
            {
                var easing = Utl.MathUtl.Easing((float)value.CustomData2.Easing.StartSpeed.Value, (float)value.CustomData2.Easing.EndSpeed.Value);

                List <byte[]> _data = new List <byte[]>();
                _data.Add(value.CustomData2.Easing.Start.GetBytes(1.0f));
                _data.Add(value.CustomData2.Easing.End.GetBytes(1.0f));
                _data.Add(BitConverter.GetBytes(easing[0]));
                _data.Add(BitConverter.GetBytes(easing[1]));
                _data.Add(BitConverter.GetBytes(easing[2]));
                var __data = _data.ToArray().ToArray();
                data.Add(__data);
            }
            else if (value.CustomData2.CustomData.Value == Data.CustomDataType.FCurve2D)
            {
                var value_ = value.CustomData2.FCurve;
                var bytes1 = value_.GetBytes();
                data.Add(bytes1);
            }
            else if (value.CustomData2.CustomData.Value == Data.CustomDataType.Fixed4D)
            {
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed4.X.Value));
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed4.Y.Value));
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed4.Z.Value));
                data.Add(BitConverter.GetBytes(value.CustomData2.Fixed4.W.Value));
            }
            else if (value.CustomData2.CustomData.Value == Data.CustomDataType.FCurveColor)
            {
                var bytes = value.CustomData2.FCurveColor.GetBytes();
                data.Add(bytes);
            }

            if (version >= ExporterVersion.Ver16Alpha1)
            {
                data.Add(AlphaCutoffValues.GetBytes(advanceValue.AlphaCutoffParam, version));
            }

            if (version >= ExporterVersion.Ver16Alpha3)
            {
                if (advanceValue.EnableFalloff)
                {
                    data.Add((1).GetBytes());

                    data.Add(advanceValue.FalloffParam.ColorBlendType);
                    data.Add(advanceValue.FalloffParam.BeginColor);
                    data.Add(advanceValue.FalloffParam.EndColor);
                    data.Add(BitConverter.GetBytes(advanceValue.FalloffParam.Pow.Value));
                }
                else
                {
                    data.Add((0).GetBytes());
                }
            }

            if (version >= ExporterVersion.Ver16Alpha4)
            {
                data.Add(advanceValue.SoftParticleDistance.GetBytes());
            }

            return(data.ToArray().ToArray());
        }