private void LoadEntity(XElement xml) { GameEntity entity = new GameEntity(); string name = xml.RequireAttribute("name").Value; if (entities.ContainsKey(name)) { throw new GameXmlException(xml, "You have defined two entities both named \"" + name + "\"."); } entity.Name = name; entity.MaxAlive = xml.TryAttribute <int>("limit", 50); SpriteComponent spritecomp = null; PositionComponent poscomp = null; StateComponent statecomp = new StateComponent(); entity.AddComponent(statecomp); try { foreach (XElement xmlComp in xml.Elements()) { switch (xmlComp.Name.LocalName) { case "EditorData": break; case "Tilesheet": if (spritecomp == null) { spritecomp = new SpriteComponent(); entity.AddComponent(spritecomp); } if (poscomp == null) { poscomp = new PositionComponent(); entity.AddComponent(poscomp); } spritecomp.LoadTilesheet(xmlComp); break; case "Trigger": statecomp.LoadStateTrigger(xmlComp); break; case "Sprite": if (spritecomp == null) { spritecomp = new SpriteComponent(); entity.AddComponent(spritecomp); } if (poscomp == null) { poscomp = new PositionComponent(); entity.AddComponent(poscomp); } spritecomp.LoadXml(xmlComp); break; case "Position": if (poscomp == null) { poscomp = new PositionComponent(); entity.AddComponent(poscomp); } poscomp.LoadXml(xmlComp); break; case "Death": entity.OnDeath += EffectParser.LoadTriggerEffect(xmlComp); break; case "GravityFlip": entity.IsGravitySensitive = xmlComp.GetValue <bool>(); break; default: entity.GetOrCreateComponent(xmlComp.Name.LocalName).LoadXml(xmlComp); break; } } } catch (GameXmlException ex) { ex.Entity = name; throw; } entities.Add(name, entity); }
private void LoadEntity(XElement xml) { GameEntity entity = new GameEntity(); string name = xml.RequireAttribute("name").Value; if (entities.ContainsKey(name)) throw new GameXmlException(xml, "You have defined two entities both named \"" + name + "\"."); entity.Name = name; entity.MaxAlive = xml.TryAttribute<int>("limit", 50); SpriteComponent spritecomp = null; PositionComponent poscomp = null; StateComponent statecomp = new StateComponent(); entity.AddComponent(statecomp); try { foreach (XElement xmlComp in xml.Elements()) { switch (xmlComp.Name.LocalName) { case "EditorData": break; case "Tilesheet": if (spritecomp == null) { spritecomp = new SpriteComponent(); entity.AddComponent(spritecomp); } if (poscomp == null) { poscomp = new PositionComponent(); entity.AddComponent(poscomp); } spritecomp.LoadTilesheet(xmlComp); break; case "Trigger": statecomp.LoadStateTrigger(xmlComp); break; case "Sprite": if (spritecomp == null) { spritecomp = new SpriteComponent(); entity.AddComponent(spritecomp); } if (poscomp == null) { poscomp = new PositionComponent(); entity.AddComponent(poscomp); } spritecomp.LoadXml(xmlComp); break; case "Position": if (poscomp == null) { poscomp = new PositionComponent(); entity.AddComponent(poscomp); } poscomp.LoadXml(xmlComp); break; case "Death": entity.OnDeath += EffectParser.LoadTriggerEffect(xmlComp); break; case "GravityFlip": entity.IsGravitySensitive = xmlComp.GetValue<bool>(); break; default: entity.GetOrCreateComponent(xmlComp.Name.LocalName).LoadXml(xmlComp); break; } } } catch (GameXmlException ex) { ex.Entity = name; throw; } entities.Add(name, entity); }