public static EmitterSpec Parse(string line) { var result = new EmitterSpec(); var cols = line.Split('\t'); // Sanitize line parts (vertical tabs, spaces) for (var i = 0; i < cols.Length; ++i) { cols[i] = cols[i].Trim(' ', '\v'); } result.Name = cols[ColEmitterName]; result.ParticlesPerSec = float.Parse(cols[ColParticleRate], CultureInfo.InvariantCulture); result.ParticleType = ParticleTypeHelper.Parse(cols[ColParticleType]); if (cols[ColLifespan].Equals("perm", StringComparison.InvariantCultureIgnoreCase)) { result.Permanent = true; } else { result.LifespanSecs = float.Parse(cols[ColLifespan]); } if (cols[ColPartLifespan].Equals("perm", StringComparison.InvariantCultureIgnoreCase)) { result.ParticlesPermanent = true; } else { float floatVal; if (float.TryParse(cols[ColPartLifespan], out floatVal)) { result.ParticleLifespan = floatVal; } } result.Material = cols[ColMaterial]; result.Space = EmitterSpaceHelper.ParseString(cols[ColEmitterSpace]); result.NodeName = cols[ColEmitterNodeName]; result.CoordSys = CoordSysHelper.ParseString(cols[ColEmitterCoordSys]); result.OffsetCoordSys = CoordSysHelper.ParseString(cols[ColEmitterOffsetCoordSys]); result.ParticleSpace = ParticleSpaceHelper.ParseString(cols[ColParticleSpace]); result.ParticlePosCoordSys = CoordSysHelper.ParseString(cols[ColParticlePosCoordSys]); result.ParticleVelocityCoordSys = CoordSysHelper.ParseString(cols[ColParticleVelocityCoordSys]); result.BlendMode = BlendModeHelper.ParseString(cols[ColBlendMode]); result.Model = cols[ColModel]; float bbVal; if (float.TryParse(cols[ColBbLeft], out bbVal)) { result.BoundingBoxLeft = bbVal; } if (float.TryParse(cols[ColBbTop], out bbVal)) { result.BoundingBoxTop = bbVal; } if (float.TryParse(cols[ColBbRight], out bbVal)) { result.BoundingBoxRight = bbVal; } if (float.TryParse(cols[ColBbBottom], out bbVal)) { result.BoundingBoxBottom = bbVal; } int minActiveParts; if (int.TryParse(cols[ColMinParticles], out minActiveParts)) { result.MinActiveParticles = minActiveParts; } // Parse the variable parameters foreach (ParamId paramId in Enum.GetValues(typeof (ParamId))) { var col = ColFirstParam + (int) paramId; var param = new VariableParamSpec { Id = paramId, Value = cols[col] }; if (!string.IsNullOrWhiteSpace(param.Value)) { result.Params.Add(param); } } return result; }
public static EmitterSpec Parse(string line) { var result = new EmitterSpec(); var cols = line.Split('\t'); // Sanitize line parts (vertical tabs, spaces) for (var i = 0; i < cols.Length; ++i) { cols[i] = cols[i].Trim(' ', '\v'); } result.Name = cols[ColEmitterName]; result.ParticlesPerSec = float.Parse(cols[ColParticleRate], CultureInfo.InvariantCulture); result.ParticleType = ParticleTypeHelper.Parse(cols[ColParticleType]); if (cols[ColLifespan].Equals("perm", StringComparison.InvariantCultureIgnoreCase)) { result.Permanent = true; } else { result.LifespanSecs = float.Parse(cols[ColLifespan]); } if (cols[ColPartLifespan].Equals("perm", StringComparison.InvariantCultureIgnoreCase)) { result.ParticlesPermanent = true; } else { float floatVal; if (float.TryParse(cols[ColPartLifespan], out floatVal)) { result.ParticleLifespan = floatVal; } } result.Material = cols[ColMaterial]; result.Space = EmitterSpaceHelper.ParseString(cols[ColEmitterSpace]); result.NodeName = cols[ColEmitterNodeName]; result.CoordSys = CoordSysHelper.ParseString(cols[ColEmitterCoordSys]); result.OffsetCoordSys = CoordSysHelper.ParseString(cols[ColEmitterOffsetCoordSys]); result.ParticleSpace = ParticleSpaceHelper.ParseString(cols[ColParticleSpace]); result.ParticlePosCoordSys = CoordSysHelper.ParseString(cols[ColParticlePosCoordSys]); result.ParticleVelocityCoordSys = CoordSysHelper.ParseString(cols[ColParticleVelocityCoordSys]); result.BlendMode = BlendModeHelper.ParseString(cols[ColBlendMode]); result.Model = cols[ColModel]; float bbVal; if (float.TryParse(cols[ColBbLeft], out bbVal)) { result.BoundingBoxLeft = bbVal; } if (float.TryParse(cols[ColBbTop], out bbVal)) { result.BoundingBoxTop = bbVal; } if (float.TryParse(cols[ColBbRight], out bbVal)) { result.BoundingBoxRight = bbVal; } if (float.TryParse(cols[ColBbBottom], out bbVal)) { result.BoundingBoxBottom = bbVal; } int minActiveParts; if (int.TryParse(cols[ColMinParticles], out minActiveParts)) { result.MinActiveParticles = minActiveParts; } // Parse the variable parameters foreach (ParamId paramId in Enum.GetValues(typeof(ParamId))) { var col = ColFirstParam + (int)paramId; var param = new VariableParamSpec { Id = paramId, Value = cols[col] }; if (!string.IsNullOrWhiteSpace(param.Value)) { result.Params.Add(param); } } return(result); }