Exemplo n.º 1
0
        public static ConfigEmitter LoadEmitter(InputStream refs,
                                                ConfigEmitterFactory factory)
        {
            if (factory == null)
            {
                factory = new NewConfigEmitterFactory();
            }
            try {
                XMLDocument document = XMLParser.Parse(refs);

                if (!document.GetRoot().GetName().Equals("emitter"))
                {
                    throw new IOException("Not a particle emitter file");
                }

                ConfigEmitter emitter = factory.CreateEmitter("new");
                ElementToEmitter(document.GetRoot(), emitter);

                return(emitter);
            } catch (IOException e) {
                Log.Exception(e);
                throw e;
            } catch (Exception e) {
                Log.Exception(e);
                throw new IOException("Unable to load emitter");
            }
        }
Exemplo n.º 2
0
        public static ParticleSystem LoadConfiguredSystem(InputStream refs,
                                                          ConfigEmitterFactory factory, ParticleSystem system,
                                                          LColor mask)
        {
            if (factory == null)
            {
                factory = new NewConfigEmitterFactory();
            }
            try {
                XMLDocument document = XMLParser.Parse(refs);

                XMLElement element = document.GetRoot();
                if (!element.GetName().Equals("system", System.StringComparison.InvariantCultureIgnoreCase))
                {
                    Log.DebugWrite("Not a particle system file");
                }

                if (system == null)
                {
                    system = new ParticleSystem("assets/particle.tga", 2000, mask);
                }
                bool additive = "true".Equals(element.GetAttribute("additive"));
                if (additive)
                {
                    system.SetBlendingMode(ParticleSystem.BLEND_ADDITIVE);
                }
                else
                {
                    system.SetBlendingMode(ParticleSystem.BLEND_COMBINE);
                }
                bool points = "true".Equals(element.GetAttribute("points"));
                system.SetUsePoints(points);

                List <XMLElement> List = element.List("emitter");
                for (int i = 0; i < List.Count; i++)
                {
                    XMLElement    em      = (XMLElement)List[i];
                    ConfigEmitter emitter = factory.CreateEmitter("new");

                    ElementToEmitter(em, emitter);

                    system.AddEmitter(emitter);
                }

                system.SetRemoveCompletedEmitters(false);
                return(system);
            } catch (IOException e) {
                Log.Exception(e);
            } catch (Exception e) {
                Log.Exception(e);
                throw new IOException("Unable to load particle system config");
            }
            return(system);
        }
Exemplo n.º 3
0
        private static void ElementToEmitter(XMLElement element,
                                             ConfigEmitter emitter)
        {
            emitter.SetImageName(element.GetAttribute("img", ""));
            emitter.name = element.GetAttribute("name", "");
            string renderType = element.GetAttribute("renderType", "");

            emitter.usePoints = Particle.INHERIT_POINTS;
            if (renderType.Equals("quads"))
            {
                emitter.usePoints = Particle.USE_QUADS;
            }
            if (renderType.Equals("points"))
            {
                emitter.usePoints = Particle.USE_POINTS;
            }

            string useOriented = element.GetAttribute("useOriented", "");

            if (useOriented != null)
            {
                emitter.useOriented = "true".Equals(useOriented);
            }

            string useAdditive = element.GetAttribute("useAdditive", "");

            if (useAdditive != null)
            {
                emitter.useAdditive = "true".Equals(useAdditive);
            }

            ParseRangeElement(GetFirstNamedElement(element, "spawnInterval"),
                              emitter.spawnInterval);
            ParseRangeElement(GetFirstNamedElement(element, "spawnCount"),
                              emitter.spawnCount);
            ParseRangeElement(GetFirstNamedElement(element, "initialLife"),
                              emitter.initialLife);
            ParseRangeElement(GetFirstNamedElement(element, "initialSize"),
                              emitter.initialSize);
            ParseRangeElement(GetFirstNamedElement(element, "xOffset"),
                              emitter.xOffset);
            ParseRangeElement(GetFirstNamedElement(element, "yOffset"),
                              emitter.yOffset);
            ParseRangeElement(GetFirstNamedElement(element, "initialDistance"),
                              emitter.initialDistance);
            ParseRangeElement(GetFirstNamedElement(element, "speed"), emitter.speed);
            ParseRangeElement(GetFirstNamedElement(element, "length"),
                              emitter.length);
            ParseRangeElement(GetFirstNamedElement(element, "emitCount"),
                              emitter.emitCount);

            parseValueElement(GetFirstNamedElement(element, "spread"),
                              emitter.spread);
            parseValueElement(GetFirstNamedElement(element, "angularOffset"),
                              emitter.angularOffset);
            parseValueElement(GetFirstNamedElement(element, "growthFactor"),
                              emitter.growthFactor);
            parseValueElement(GetFirstNamedElement(element, "gravityFactor"),
                              emitter.gravityFactor);
            parseValueElement(GetFirstNamedElement(element, "windFactor"),
                              emitter.windFactor);
            parseValueElement(GetFirstNamedElement(element, "startAlpha"),
                              emitter.startAlpha);
            parseValueElement(GetFirstNamedElement(element, "endAlpha"),
                              emitter.endAlpha);
            parseValueElement(GetFirstNamedElement(element, "alpha"), emitter.alpha);
            parseValueElement(GetFirstNamedElement(element, "size"), emitter.size);
            parseValueElement(GetFirstNamedElement(element, "velocity"),
                              emitter.velocity);
            parseValueElement(GetFirstNamedElement(element, "scaleY"),
                              emitter.scaleY);

            XMLElement        color = GetFirstNamedElement(element, "color");
            List <XMLElement> steps = color.List("step");

            emitter.colors.Clear();
            for (int i = 0; i < steps.Count; i++)
            {
                XMLElement step   = (XMLElement)steps[i];
                float      offset = step.GetFloatAttribute("offset", 0);
                float      r      = step.GetFloatAttribute("r", 0);
                float      g      = step.GetFloatAttribute("g", 0);
                float      b      = step.GetFloatAttribute("b", 0);

                emitter.AddColorPoint(offset, new LColor(r, g, b, 1));
            }

            emitter.Replay();
        }
Exemplo n.º 4
0
 public static void SetRelativePath(string path)
 {
     ConfigEmitter.SetRelativePath(path);
 }