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; } }
void ClearDown() { this.emitterConfig = null; this.initialized = false; }