public IEntity AddBlock(XmlNode x, ContentManager content, GraphicsDevice graphics, CollisionDetection collisions) { bool isUnderworld = false; switch (type) { case ("questionblock"): QuestionBlock questionBlock = new QuestionBlock(content, graphics); if (x.HasChildNodes) { for (int m = Constants.ZERO; m < x.ChildNodes.Count; m++) { IEntity childEntity = null; XmlNode y = x.ChildNodes[m]; GetAttributes(y); if (tag.Equals("item")) { childEntity = AddItem(content, graphics); } else if (tag.Equals("block")) { childEntity = AddBlock(y, content, graphics, collisions); } entity = childEntity; SetProperties(collisions); questionBlock.AddContainedItem(childEntity); } } GetAttributes(x); entity = questionBlock; break; case ("floorblock"): isUnderworld = false; entity = new FloorBlock(content, graphics, isUnderworld); break; case ("underworldFloor"): isUnderworld = true; entity = new FloorBlock(content, graphics, isUnderworld); break; case ("glassblock"): GlassBlock glassBlock = new GlassBlock(content, graphics); isGlass = true; if (x.HasChildNodes) { for (int m = Constants.ZERO; m < x.ChildNodes.Count; m++) { IEntity childEntity = null; XmlNode y = x.ChildNodes[m]; GetAttributes(y); if (tag.Equals("block")) { childEntity = AddBlock(y, content, graphics, collisions); } entity = childEntity; SetProperties(collisions); glassBlock.AddContainedItem(childEntity); } } GetAttributes(x); entity = glassBlock; break; case ("brickblock"): isUnderworld = false; BrickBlock brickBlock = new BrickBlock(content, graphics, isUnderworld); if (x.HasChildNodes) { for (int m = Constants.ZERO; m < x.ChildNodes.Count; m++) { IEntity childEntity = null; XmlNode y = x.ChildNodes[m]; GetAttributes(y); if (tag.Equals("item")) { childEntity = AddItem(content, graphics); } else if (tag.Equals("block")) { childEntity = AddBlock(y, content, graphics, collisions); } entity = childEntity; SetProperties(collisions); brickBlock.AddContainedItem(childEntity); } } GetAttributes(x); entity = brickBlock; break; case ("underworldBrick"): Underworld = true; BrickBlock underworldBrickBlock = new BrickBlock(content, graphics, Underworld); if (x.HasChildNodes) { for (int m = Constants.ZERO; m < x.ChildNodes.Count; m++) { IEntity childEntity = null; XmlNode y = x.ChildNodes[m]; GetAttributes(y); if (tag.Equals("item")) { childEntity = AddItem(content, graphics); } else if (tag.Equals("block")) { childEntity = AddBlock(y, content, graphics, collisions); } entity = childEntity; SetProperties(collisions); underworldBrickBlock.AddContainedItem(childEntity); } } GetAttributes(x); entity = underworldBrickBlock; break; case ("warpPipe"): WarpPipe warpPipe = new WarpPipe(content, graphics, ExitPipe, Underworld, MiniGame); if (x.HasChildNodes) { for (int m = Constants.ZERO; m < x.ChildNodes.Count; m++) { IEntity childEntity = null; XmlNode y = x.ChildNodes[m]; GetAttributes(y); if (tag.Equals("enemy")) { childEntity = AddEnemy(content, graphics, peach); } else if (tag.Equals("block")) { childEntity = AddBlock(y, content, graphics, collisions); } entity = childEntity; SetProperties(collisions); warpPipe.AddContainedItem(childEntity); } } GetAttributes(x); entity = warpPipe; break; case ("stairblock"): entity = new StairBlock(content, graphics); break; case ("usedblock"): entity = new UsedBlock(content, graphics); break; case ("hiddenblock"): isUnderworld = false; HiddenBlock hiddenBlock = new HiddenBlock(content, graphics); if (x.HasChildNodes) { for (int m = Constants.ZERO; m < x.ChildNodes.Count; m++) { IEntity childEntity = null; XmlNode y = x.ChildNodes[m]; GetAttributes(y); if (tag.Equals("item")) { childEntity = AddItem(content, graphics); } else if (tag.Equals("block")) { childEntity = AddBlock(y, content, graphics, collisions); } entity = childEntity; SetProperties(collisions); hiddenBlock.AddContainedItem(childEntity); } } GetAttributes(x); entity = hiddenBlock; break; case ("pipe"): entity = new Pipe(content, graphics); break; case ("explodingBlock"): entity = new ExplodingBlock(content, graphics, isGlass); break; case ("exitPipe"): entity = new WarpPipe(content, graphics, ExitPipe, Underworld, MiniGame); break; default: break; } return(entity); }