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"); } }
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); }
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(); }
public static void SetRelativePath(string path) { ConfigEmitter.SetRelativePath(path); }