Exemplo n.º 1
0
        private void parseBinaryFile()
        {
            if (this.EmitterFile == null)
            {
                return;
            }

            emitterConfig = new PDUnityParticleEmitter();

            MemoryStream reader = new MemoryStream(this.EmitterFile.bytes);

            // Version
            ulong version = ReadULong(reader);

            if (version == 1)
            {
                // Texture
                emitterConfig.textureName = ReadString(reader);

                long embeddedTexture = ReadLong(reader);
                if (embeddedTexture == 1)
                {
                    emitterConfig.textureData = ReadData(reader);
                }

                // Blending
                emitterConfig.opacityModifyRGB     = Convert.ToBoolean(ReadLong(reader));
                emitterConfig.blendFuncSource      = UnityBlendModeForGLBlendMode(ReadLong(reader));
                emitterConfig.blendFuncDestination = UnityBlendModeForGLBlendMode(ReadLong(reader));

                // Position Type
                emitterConfig.positionType = ReadLong(reader);

                // Coordinates flipped
                emitterConfig.yScale = ReadLong(reader);

                // Source Position
                emitterConfig.sourcePosition         = ReadVector2(reader);
                emitterConfig.sourcePositionVariance = ReadVector2(reader);
                emitterConfig.sourcePosition         = new Vector2();

                // Speed
                emitterConfig.speed         = ReadFloat(reader);
                emitterConfig.speedVariance = ReadFloat(reader);

                // Life span
                emitterConfig.lifeSpan         = ReadFloat(reader);
                emitterConfig.lifeSpanVariance = ReadFloat(reader);

                // Angle
                emitterConfig.angle         = Mathf.Deg2Rad * ReadFloat(reader);
                emitterConfig.angleVariance = Mathf.Deg2Rad * ReadFloat(reader);

                // Gravity
                emitterConfig.gravity = ReadVector2(reader);

                // Radial and Tangential acceleration
                emitterConfig.radialAcceleration             = ReadFloat(reader);
                emitterConfig.tangentialAcceleration         = ReadFloat(reader);
                emitterConfig.radialAccelerationVariance     = ReadFloat(reader);
                emitterConfig.tangentialAccelerationVariance = ReadFloat(reader);

                // Start color
                emitterConfig.startColor = ReadColor(reader);

                // Start color variance
                emitterConfig.startColorVariance = ReadColor(reader);

                // Finish color
                emitterConfig.finishColor = ReadColor(reader);

                // Start color variance
                emitterConfig.finishColorVariance = ReadColor(reader);

                // Max particles
                emitterConfig.maxParticles = ReadLong(reader);

                // particle size
                emitterConfig.startParticleSize          = ReadFloat(reader);
                emitterConfig.startParticleSizeVariance  = ReadFloat(reader);
                emitterConfig.finishParticleSize         = ReadFloat(reader);
                emitterConfig.finishParticleSizeVariance = ReadFloat(reader);

                // Duration
                emitterConfig.duration = ReadFloat(reader);

                // Emitter type
                emitterConfig.emitterType = (kParticleTypes)ReadLong(reader);

                // Radius
                emitterConfig.maxRadius         = ReadFloat(reader);
                emitterConfig.maxRadiusVariance = ReadFloat(reader);
                emitterConfig.minRadius         = ReadFloat(reader);
                emitterConfig.minRadiusVariance = ReadFloat(reader);

                // Rotation
                emitterConfig.rotatePerSecond         = ReadFloat(reader);
                emitterConfig.rotatePerSecondVariance = ReadFloat(reader);
                emitterConfig.rotationStart           = ReadFloat(reader);
                emitterConfig.rotationStartVariance   = ReadFloat(reader);
                emitterConfig.rotationEnd             = ReadFloat(reader);
                emitterConfig.rotationEndVariance     = ReadFloat(reader);

                // Texture
                emitterConfig.texture = new Texture2D(2, 2, TextureFormat.DXT5, false);
                emitterConfig.texture.LoadImage(emitterConfig.textureData);
                material.mainTexture = emitterConfig.texture;

                // Calculate the emission rate
                emitterConfig.emissionRate = emitterConfig.maxParticles / emitterConfig.lifeSpan;
                emitterConfig.emitCounter  = 0;
            }
        }
Exemplo n.º 2
0
 void ClearDown()
 {
     this.emitterConfig = null;
     this.initialized   = false;
 }