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; } }