Esempio n. 1
0
        public void Load(string path)
        {
            var emittersBySystem = new Dictionary <string, PartSysSpec>();

            using (var file = new FileStream(path, FileMode.Open))
            {
                var reader = new StreamReader(file, Encoding.ASCII);

                // Slurp in all lines, do a preliminary sorting by particle system name
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    var firstTab = line.IndexOf('\t');
                    if (firstTab == -1)
                    {
                        continue; // Not a valid line
                    }
                    var systemName = line.Substring(0, firstTab);
                    if (systemName.Length == 0)
                    {
                        continue; // Also probably not a valid line
                    }

                    // Trim it by removing the vertical tab at the end
                    systemName = systemName.Replace("\v", "");

                    var key = systemName.ToLowerInvariant();
                    if (!emittersBySystem.ContainsKey(key))
                    {
                        emittersBySystem[key] = new PartSysSpec
                        {
                            Name = systemName
                        };
                    }
                    emittersBySystem[key].Emitters.Add(EmitterSpec.Parse(line));
                }
            }

            // Sort by name ascending
            var list = emittersBySystem.Values.ToList();

            list.Sort();

            Specs = new ObservableCollection <PartSysSpec>(list);
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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);
        }