public void ReadXml(XmlReader reader)
 {
     if (reader.IsEmptyElement)
         return;
     reader.ReadStartElement("EntityCollection");
     reader.ReadStartElement("Entities");
     while(reader.NodeType != XmlNodeType.EndElement)
     {
         reader.ReadStartElement("Entity");
         _mutableSerializer = new XmlSerializer(typeof(GameEntity));
         var e = (GameEntity)_mutableSerializer.Deserialize(reader);
         reader.ReadStartElement("Component");
         var c = new GameComponent();
         while(reader.NodeType != XmlNodeType.EndElement)
             switch(reader.Name)
             {
                 case "Component":
                     reader.ReadStartElement("Component");
                     continue;
                 case "GameComponent":
                     _mutableSerializer = new XmlSerializer(typeof(GameComponent));
                     c = (GameComponent)_mutableSerializer.Deserialize(reader);
                     e.Components.Add(c);
                     reader.ReadEndElement();
                     break;
                 case "ActionTimerComponent":
                     _mutableSerializer = new XmlSerializer(typeof(ActionTimerComponent));
                     c = (ActionTimerComponent)_mutableSerializer.Deserialize(reader);
                     e.Components.Add(c);
                     reader.ReadEndElement();
                     break;
                 case "StatComponent":
                     _mutableSerializer = new XmlSerializer(typeof(StatComponent));
                     c = (StatComponent)_mutableSerializer.Deserialize(reader);
                     e.Components.Add(c);
                     reader.ReadEndElement();
                     break;
                 case "LevelComponent":
                     _mutableSerializer = new XmlSerializer(typeof(LevelComponent));
                     c = (LevelComponent)_mutableSerializer.Deserialize(reader);
                     e.Components.Add(c);
                     reader.ReadEndElement();
                     break;
                 case "ClassComponent":
                     _mutableSerializer = new XmlSerializer(typeof(ClassComponent));
                     c = (ClassComponent)_mutableSerializer.Deserialize(reader);
                     e.Components.Add(c);
                     reader.ReadEndElement();
                     break;
                 case "PlayerInputComponent":
                     _mutableSerializer = new XmlSerializer(typeof(PlayerInputComponent));
                     c = (PlayerInputComponent)_mutableSerializer.Deserialize(reader);
                     e.Components.Add(c);
                     reader.ReadEndElement();
                     break;
                 case "AIInputComponent":
                     _mutableSerializer = new XmlSerializer(typeof(AIInputComponent));
                     c = (AIInputComponent)_mutableSerializer.Deserialize(reader);
                     e.Components.Add(c);
                     reader.ReadEndElement();
                     break;
                 case "SpriteComponent":
                     _mutableSerializer = new XmlSerializer(typeof(SpriteComponent));
                     c = (SpriteComponent)_mutableSerializer.Deserialize(reader);
                     e.Components.Add(c);
                     reader.ReadEndElement();
                     break;
             }
         Entities.Add(e);
         reader.ReadEndElement();
     }
     reader.ReadEndElement();
     reader.ReadEndElement();
 }
 public void AddComponentToEntity(GameComponent c, GameEntity e)
 {
     if (!c.IsSingular)
     {
         e.Components.Add(c);
         Console.WriteLine("Component {0} added to Entity {1}.", c.ToString(), e.Name);
     }
     else if(c.IsSingular && !e.Components.Contains(c))
     {
         e.Components.Add(c);
         Console.WriteLine("Component {0} added to Entity {1}.", c.ToString(), e.Name);
     }
     else
     {
         Console.WriteLine("Singular component {0} already exists...", c.ToString());
         return;
     }
 }