private void LoadLevelFromBlueprint() { Fraction[] fracList = { fractionNeutral, fractionPlayer, fractionComputer1, fractionComputer2, fractionComputer3 }; //---------------------------------------------------------------- MapFullBounds = new FRectangle(0, 0, Blueprint.LevelWidth, Blueprint.LevelHeight); MapViewportCenterX = Blueprint.LevelViewX; MapViewportCenterY = Blueprint.LevelViewY; WrapMode = (GameWrapMode)Blueprint.WrapMode; if (WrapMode == GameWrapMode.Donut || WrapMode == GameWrapMode.Reflect) { VAdapterGame.ChangeVirtualSize(GDConstants.VIEW_WIDTH + GDConstants.TILE_WIDTH, GDConstants.VIEW_HEIGHT + GDConstants.TILE_WIDTH); MapViewportCenterX = Blueprint.LevelViewX; MapViewportCenterY = Blueprint.LevelViewY; } if (MainGame.Inst.Profile.EffectsEnabled && WrapMode == GameWrapMode.Donut) { Entities.AddEntity(new DonutParticleEmitter(this, Blueprint, FlatAlign4.NN)); Entities.AddEntity(new DonutParticleEmitter(this, Blueprint, FlatAlign4.EE)); Entities.AddEntity(new DonutParticleEmitter(this, Blueprint, FlatAlign4.SS)); Entities.AddEntity(new DonutParticleEmitter(this, Blueprint, FlatAlign4.WW)); } if (MainGame.Inst.Profile.EffectsEnabled) { Background = new GDCellularBackground(this, Blueprint); } else { Background = new GDStaticGridBackground(this, WrapMode); } //---------------------------------------------------------------- var cannonList = new List <Cannon>(); var portalList = new List <Portal>(); var fractionList = new List <Fraction>(); var laserworld = false; fractionList.Add(fractionNeutral); foreach (var bPrint in Blueprint.BlueprintCannons) { var e = new BulletCannon(this, bPrint, fracList); Entities.AddEntity(e); cannonList.Add(e); if (!fractionList.Contains(e.Fraction)) { fractionList.Add(e.Fraction); } } foreach (var bPrint in Blueprint.BlueprintMinigun) { var e = new MinigunCannon(this, bPrint, fracList); Entities.AddEntity(e); cannonList.Add(e); if (!fractionList.Contains(e.Fraction)) { fractionList.Add(e.Fraction); } } foreach (var bPrint in Blueprint.BlueprintRelayCannon) { var e = new RelayCannon(this, bPrint, fracList); Entities.AddEntity(e); cannonList.Add(e); if (!fractionList.Contains(e.Fraction)) { fractionList.Add(e.Fraction); } } foreach (var bPrint in Blueprint.BlueprintTrishotCannon) { var e = new TrishotCannon(this, bPrint, fracList); Entities.AddEntity(e); cannonList.Add(e); if (!fractionList.Contains(e.Fraction)) { fractionList.Add(e.Fraction); } } foreach (var bPrint in Blueprint.BlueprintVoidWalls) { var e = new VoidWall(this, bPrint); Entities.AddEntity(e); } foreach (var bPrint in Blueprint.BlueprintVoidCircles) { var e = new VoidCircle(this, bPrint); Entities.AddEntity(e); } foreach (var bPrint in Blueprint.BlueprintGlassBlocks) { var e = new GlassBlock(this, bPrint); Entities.AddEntity(e); } foreach (var bPrint in Blueprint.BlueprintBlackHoles) { var e = new BlackHole(this, bPrint); Entities.AddEntity(e); } foreach (var bPrint in Blueprint.BlueprintPortals) { var e = new Portal(this, bPrint); Entities.AddEntity(e); portalList.Add(e); } foreach (var bPrint in Blueprint.BlueprintLaserCannons) { var e = new LaserCannon(this, bPrint, fracList); Entities.AddEntity(e); cannonList.Add(e); laserworld = true; if (!fractionList.Contains(e.Fraction)) { fractionList.Add(e.Fraction); } } foreach (var bPrint in Blueprint.BlueprintShieldProjector) { var e = new ShieldProjectorCannon(this, bPrint, fracList); Entities.AddEntity(e); cannonList.Add(e); laserworld = true; if (!fractionList.Contains(e.Fraction)) { fractionList.Add(e.Fraction); } } foreach (var bPrint in Blueprint.BlueprintMirrorBlocks) { var e = new MirrorBlock(this, bPrint); Entities.AddEntity(e); } foreach (var bPrint in Blueprint.BlueprintMirrorCircles) { var e = new MirrorCircle(this, bPrint); Entities.AddEntity(e); } foreach (var bPrint in Blueprint.BlueprintBackgroundText) { var e = new BackgroundText(this, bPrint); Entities.AddEntity(e); } //---------------------------------------------------------------- if (laserworld) { Entities.AddEntity(new LaserRenderer(this, LaserNetwork, Blueprint)); } AddEdgeMarker(); //---------------------------------------------------------------- foreach (var cannon in cannonList) { cannon.OnAfterLevelLoad(); } foreach (var portal in portalList) { portal.OnAfterLevelLoad(portalList); } CannonMap = cannonList.ToDictionary(p => p.BlueprintCannonID, p => p); foreach (var f in fracList) { if (!fractionList.Contains(f)) { fractionList.Add(f); } } fractionIDList = fractionList.ToArray(); //---------------------------------------------------------------- if (!IsPreview && (Blueprint.LevelWidth > GDConstants.VIEW_WIDTH || Blueprint.LevelHeight > GDConstants.VIEW_HEIGHT)) { AddAgent(new GameDragAgent(this)); } }
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); }