public IIncludedObject Load(Project project, XElement xmlNode) { var info = new EntityInfo() { Name = xmlNode.RequireAttribute("name").Value, MaxAlive = xmlNode.TryAttribute<int>("maxAlive", 50), GravityFlip = xmlNode.TryElementValue<bool>("GravityFlip"), Components = new List<IComponentInfo>() }; ReadEditorData(xmlNode, info); var deathNode = xmlNode.Element("Death"); if (deathNode != null) info.Death = _effectReader.Load(deathNode); foreach (var compReader in ComponentReaders) { var element = compReader.NodeName != null ? xmlNode.Element(compReader.NodeName) : xmlNode; if (element != null) { var comp = compReader.Load(element, project); if (comp != null) info.Components.Add(comp); } } if (info.PositionComponent == null) info.Components.Add(new PositionComponentInfo()); if (info.MovementComponent == null && HasMovementEffects(info)) info.Components.Add(new MovementComponentInfo() { EffectInfo = new MovementEffectPartInfo() }); project.AddEntity(info); return info; }
public void Load(Project project, XElement xmlNode) { foreach (var node in xmlNode.Elements("Entity")) { var info = new EntityInfo() { Name = node.RequireAttribute("name").Value, MaxAlive = node.TryAttribute<int>("maxAlive", 50) }; var editorData = node.Element("EditorData"); if (editorData != null) { info.EditorData = new EntityEditorData() { DefaultSpriteName = editorData.TryAttribute<string>("defaultSprite"), HideFromPlacement = editorData.TryAttribute<bool>("hide", false) }; } FilePath sheetPath = null; var sheetNode = node.Element("Tilesheet"); if (sheetNode != null) sheetPath = FilePath.FromRelative(sheetNode.Value, project.BaseDir); foreach (var spriteNode in node.Elements("Sprite")) { if (sheetPath == null) { var sprite = GameXmlReader.LoadSprite(spriteNode, project.BaseDir); info.Sprites.Add(sprite.Name ?? "Default", sprite); } else { var sprite = GameXmlReader.LoadSprite(spriteNode); sprite.SheetPath = sheetPath; info.Sprites.Add(sprite.Name ?? "Default", sprite); } } project.AddEntity(info); } }