private void LoadElementsProjSpecific(XElement element, int parentTriggerIndex) { foreach (XElement subElement in element.Elements()) { switch (subElement.Name.ToString().ToLowerInvariant()) { case "leveltrigger": case "trigger": LoadElementsProjSpecific(subElement, LevelTriggerElements.IndexOf(subElement)); break; case "lightsource": LightSourceTriggerIndex.Add(parentTriggerIndex); LightSourceParams.Add(new LightSourceParams(subElement)); break; case "particleemitter": if (ParticleEmitterPrefabs == null) { ParticleEmitterPrefabs = new List <ParticleEmitterPrefab>(); EmitterPositions = new List <Vector2>(); ParticleEmitterTriggerIndex = new List <int>(); } ParticleEmitterPrefabs.Add(new ParticleEmitterPrefab(subElement)); ParticleEmitterTriggerIndex.Add(parentTriggerIndex); EmitterPositions.Add(subElement.GetAttributeVector2("position", Vector2.Zero)); break; case "sound": Sounds.Add(new SoundConfig(subElement, parentTriggerIndex)); break; case "deformablesprite": foreach (XElement deformElement in subElement.Elements()) { var deformation = SpriteDeformation.Load(deformElement, Name); if (deformation != null) { SpriteDeformations.Add(deformation); } } break; } } }
public BackgroundSpritePrefab(XElement element) { string alignmentStr = element.GetAttributeString("alignment", ""); if (string.IsNullOrEmpty(alignmentStr) || !Enum.TryParse(alignmentStr, out Alignment)) { Alignment = Alignment.Top | Alignment.Bottom | Alignment.Left | Alignment.Right; } Commonness = element.GetAttributeInt("commonness", 1); string[] spawnPosStrs = element.GetAttributeString("spawnpos", "Wall").Split(','); foreach (string spawnPosStr in spawnPosStrs) { SpawnPosType parsedSpawnPos; if (Enum.TryParse(spawnPosStr.Trim(), out parsedSpawnPos)) { SpawnPos |= parsedSpawnPos; } } Scale.X = element.GetAttributeFloat("minsize", 1.0f); Scale.Y = element.GetAttributeFloat("maxsize", 1.0f); DepthRange = element.GetAttributeVector2("depthrange", new Vector2(0.0f, 1.0f)); AlignWithSurface = element.GetAttributeBool("alignwithsurface", false); RandomRotation = element.GetAttributeVector2("randomrotation", Vector2.Zero); RandomRotation.X = MathHelper.ToRadians(RandomRotation.X); RandomRotation.Y = MathHelper.ToRadians(RandomRotation.Y); SwingAmount = MathHelper.ToRadians(element.GetAttributeFloat("swingamount", 0.0f)); OverrideCommonness = new Dictionary <string, int>(); foreach (XElement subElement in element.Elements()) { switch (subElement.Name.ToString().ToLowerInvariant()) { case "sprite": Sprite = new Sprite(subElement); break; case "overridecommonness": string levelType = subElement.GetAttributeString("leveltype", ""); if (!OverrideCommonness.ContainsKey(levelType)) { OverrideCommonness.Add(levelType, subElement.GetAttributeInt("commonness", 1)); } break; case "leveltrigger": case "trigger": LevelTriggerElement = subElement; break; #if CLIENT case "particleemitter": if (ParticleEmitterPrefabs == null) { ParticleEmitterPrefabs = new List <Particles.ParticleEmitterPrefab>(); EmitterPositions = new List <Vector2>(); } ParticleEmitterPrefabs.Add(new Particles.ParticleEmitterPrefab(subElement)); EmitterPositions.Add(subElement.GetAttributeVector2("position", Vector2.Zero)); break; case "sound": SoundElement = subElement; SoundPosition = subElement.GetAttributeVector2("position", Vector2.Zero); break; #endif } } }