/// <summary> /// Construct a new World object. /// </summary> /// <param name="graphicsDevice">The graphics device used for this game.</param> /// <param name="networkSession">The network session for this game.</param> public World(GraphicsDevice graphicsDevice, ContentManager contentManager, NetworkSession networkSession) { // safety-check the parameters, as they must be valid if (graphicsDevice == null) { throw new ArgumentNullException("graphicsDevice"); } if (contentManager == null) { throw new ArgumentNullException("contentManager"); } if (networkSession == null) { throw new ArgumentNullException("networkSession"); } // apply the parameter values this.networkSession = networkSession; // set up the staggered status packet system // -- your first update happens based on where you are in the collection for (int i = 0; i < networkSession.AllGamers.Count; i++) { if (networkSession.AllGamers[i].IsLocal) { updatesSinceStatusPacket = i; break; } } // create the spritebatch spriteBatch = new SpriteBatch(graphicsDevice); // create and initialize the particle-effect manager particleEffectManager = new ParticleEffectManager(contentManager); particleEffectManager.RegisterParticleEffect( ParticleEffectType.LaserExplosion, "Particles/laserExplosion.xml", 40); particleEffectManager.RegisterParticleEffect( ParticleEffectType.MineExplosion, "Particles/mineExplosion.xml", 8); particleEffectManager.RegisterParticleEffect( ParticleEffectType.RocketExplosion, "Particles/rocketExplosion.xml", 24); particleEffectManager.RegisterParticleEffect( ParticleEffectType.RocketTrail, "Particles/rocketTrail.xml", 16); particleEffectManager.RegisterParticleEffect( ParticleEffectType.ShipExplosion, "Particles/shipExplosion.xml", 4); particleEffectManager.RegisterParticleEffect( ParticleEffectType.ShipSpawn, "Particles/shipSpawn.xml", 4); Ship.ParticleEffectManager = particleEffectManager; RocketProjectile.ParticleEffectManager = particleEffectManager; MineProjectile.ParticleEffectManager = particleEffectManager; LaserProjectile.ParticleEffectManager = particleEffectManager; // load the font playerFont = contentManager.Load<SpriteFont>("Fonts/NetRumbleFont"); // load the gameplay-object textures Ship.LoadContent(contentManager); Asteroid.LoadContent(contentManager); LaserProjectile.LoadContent(contentManager); MineProjectile.LoadContent(contentManager); RocketProjectile.LoadContent(contentManager); DoubleLaserPowerUp.LoadContent(contentManager); TripleLaserPowerUp.LoadContent(contentManager); RocketPowerUp.LoadContent(contentManager); // load the non-gameplay-object textures chatAbleTexture = contentManager.Load<Texture2D>("Textures/chatAble"); chatMuteTexture = contentManager.Load<Texture2D>("Textures/chatMute"); chatTalkingTexture = contentManager.Load<Texture2D>("Textures/chatTalking"); readyTexture = contentManager.Load<Texture2D>("Textures/ready"); cornerBarrierTexture = contentManager.Load<Texture2D>("Textures/barrierEnd"); verticalBarrierTexture = contentManager.Load<Texture2D>("Textures/barrierPurple"); horizontalBarrierTexture = contentManager.Load<Texture2D>("Textures/barrierRed"); // clear the collision manager CollisionManager.Collection.Clear(); // add the collision version of the edge barriers CollisionManager.Barriers.Clear(); CollisionManager.Barriers.Add(new Rectangle(dimensions.X, dimensions.Y, dimensions.Width, barrierSize)); // top edge CollisionManager.Barriers.Add(new Rectangle( dimensions.X, dimensions.Y + dimensions.Height, dimensions.Width, barrierSize)); // bottom edge CollisionManager.Barriers.Add(new Rectangle(dimensions.X, dimensions.Y, barrierSize, dimensions.Height)); // left edge CollisionManager.Barriers.Add(new Rectangle( dimensions.X + dimensions.Width, dimensions.Y, barrierSize, dimensions.Height)); // right edge // add the rendering version of the edge barriers cornerBarriers.Clear(); cornerBarriers.Add(new Rectangle(dimensions.X, dimensions.Y, barrierSize, barrierSize)); // top-left corner cornerBarriers.Add(new Rectangle( dimensions.X + dimensions.Width, dimensions.Y, barrierSize, barrierSize)); // top-right corner cornerBarriers.Add(new Rectangle( dimensions.X, dimensions.Y + dimensions.Height, barrierSize, barrierSize)); // bottom-left corner cornerBarriers.Add(new Rectangle( dimensions.X + dimensions.Width, dimensions.Y + dimensions.Height, barrierSize, barrierSize)); // bottom-right corner verticalBarriers.Clear(); for (int i = 1; i < barrierCounts.Y; i++) { verticalBarriers.Add(new Rectangle( dimensions.X, dimensions.Y + barrierSize * i, barrierSize, barrierSize)); // top edge verticalBarriers.Add(new Rectangle( dimensions.X + dimensions.Width, dimensions.Y + barrierSize * i, barrierSize, barrierSize)); // bottom edge } horizontalBarriers.Clear(); for (int i = 1; i < barrierCounts.X; i++) { horizontalBarriers.Add(new Rectangle( dimensions.X + barrierSize * i, dimensions.Y, barrierSize, barrierSize)); // left edge horizontalBarriers.Add(new Rectangle( dimensions.X + barrierSize * i, dimensions.Y + dimensions.Width, barrierSize, barrierSize)); // right edge } }