public World(Rectangle rect, int offset, ControlMode controlMode, bool muteShape = true) { this.rect = rect; this.borderOffset = offset; this.controlMode = controlMode; this.mute = muteShape; this.currentShape = new Shape(this, controlMode); //Combo emitters List<ParticleModifier> p = new List<ParticleModifier>(); p.Add(new GravityModifier(new Vector2(0, -0.5f))); p.Add(new RandomSpeedModifier(new Vector2(0.1f, 0.1f))); this.comboEmitter = new Emitter(rect.Width / 100f, 0f, Color.Orange * 0.6f, Color.Red, 20, 1, new RandomSpawnSpeed(Vector2.Zero, Vector2.Zero), Assets.Textures.Particle, new RectangleSpawnShape(rect.Width, rect.Height), p); this.comboEmitter.Position = new Vector2(rect.Center.X, rect.Center.Y); List<ParticleModifier> cp = new List<ParticleModifier>(); cp.Add(new GravityModifier(new Vector2(0, -0.5f))); cp.Add(new RandomSpeedModifier(new Vector2(1f, 1f))); this.epicComboEmitter = new Emitter(rect.Width / 90f, 0f, Color.Orange * 0.5f, Color.Blue, 20, 1.5f, new RandomSpawnSpeed(Vector2.Zero), Assets.Textures.Particle, new RectangleSpawnShape(rect.Width, rect.Height), cp); this.epicComboEmitter.Position = new Vector2(rect.Center.X, rect.Center.Y); //Get rect of one block for size Rectangle blockRect = CalculateBlockRectangle(0,0); List<ParticleModifier> ep = new List<ParticleModifier>(); ep.Add(new GravityModifier(new Vector2(0, 0.3f))); explosionEmitter = new Emitter( (float)blockRect.Width / (float)Assets.Textures.Block.Width, (float)blockRect.Width / (float)Assets.Textures.Block.Width, Color.Red, Color.Red, 1, 2f, new RandomSpawnSpeed(new Vector2(12, -rect.Width / 30), new Vector2(-12, -rect.Width / 50)), Assets.Textures.Block, new RectangleSpawnShape(0, 0), ep ); stats = new Stats(Assets.Fonts.BasicFont, Color.White, rect); //Tetris emitter tetrisEmitter = new Emitter(rect.Width / 100f, 0f, Color.Red * 0.4f, Color.Blue, 100, 0.5f, new RandomSpawnSpeed(new Vector2(-30,-9), new Vector2(30,-4)), Assets.Textures.Particle, new RectangleSpawnShape(rect.Width, 0), new List<ParticleModifier>()); tetrisEmitter.Position = new Vector2(rect.Center.X, rect.Bottom); }
/// <summary> /// Sets up global vars to the program /// </summary> void SetUpGlobalVars() { //Create the BACKEND grid for the game grid = new Grid(teacher); teacher = false; holdManager = new Hold(); for (int i = 0; i < StaticVars.drawGrid.GetLength(0); i++) { for (int j = 0; j < StaticVars.drawGrid.GetLength(1); j++) { StaticVars.drawGrid[i, j] = new Sprite(); //Place each block of the grid at the corresponding position of the array StaticVars.drawGrid[i, j].Position = new Vector2f(j * StaticVars.imageSize.X + StaticVars.gridXPos, i * StaticVars.imageSize.Y + StaticVars.gridYPos + StaticVars.imageSize.Y); //drawGrid[i, j].Size = new Vector2f(WINDOW_WIDTH / 10, WINDOW_HEIGHT / 20); //drawGrid[i, j].Size = new Vector2f(20, 20); } } #region End text endText = new Text("You have lost\npress space\nto reset\nthe game", StaticVars.font); FloatRect textRect = endText.GetLocalBounds(); endText.Origin = new Vector2f(textRect.Left + textRect.Width / 2.0f, textRect.Top + textRect.Height / 2.0f); endText.Position = new Vector2f(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2); #endregion FloatRect textRectPause = StaticVars.pauseText.GetLocalBounds(); StaticVars.pauseText.Origin = new Vector2f(textRectPause.Left + textRectPause.Width / 2.0f, textRectPause.Top + textRectPause.Height / 2.0f); StaticVars.pauseText.Position = new Vector2f(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2); //Make it so the game is playing gameState = GameState.Playing; pieceQueue = new PieceQueue(); stats = new Stats(); //Select a new active piece NewPiece(); //Add the piece to the grid, with a movement of 0,0 grid.AddPiece(activePiece, new Vector2i(0, 0)); StaticVars.queueSprite.Position = new Vector2f(StaticVars.gridXPos + StaticVars.imageSize.X * (StaticVars.drawGrid.GetLength(1) + 2.25f), StaticVars.gridYPos); StaticVars.holdSprite.Position = new Vector2f(StaticVars.gridXPos - StaticVars.holdTexture.Size.X - (StaticVars.imageSize.X * 2.25f), StaticVars.gridYPos); StaticVars.drawGridSprite.Position = new Vector2f(StaticVars.gridXPos - StaticVars.imageSize.X * 1.5f, StaticVars.gridYPos - StaticVars.imageSize.Y * 2f); #region Queue setup queueSpriteArray4x4 = new Sprite[3][, ] { new Sprite[4, 4], new Sprite[4, 4], new Sprite[4, 4] }; for (int i = 0; i < queueSpriteArray4x4.Length; i++) { for (int j = 0; j < queueSpriteArray4x4[0].GetLength(0); j++) { for (int k = 0; k < queueSpriteArray4x4[0].GetLength(1); k++) { queueSpriteArray4x4[i][j, k] = new Sprite(); queueSpriteArray4x4[i][j, k].Position = new Vector2f(StaticVars.queueSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * k, StaticVars.queueSprite.Position.Y + StaticVars.imageSize.Y * 2.5f + StaticVars.imageSize.Y * j + StaticVars.imageSize.Y * (queueSpriteArray4x4[0].GetLength(0) - 1) * i - StaticVars.imageSize.Y); } } } queueSpriteArray1x4 = new Sprite[3][, ] { new Sprite[1, 4], new Sprite[1, 4], new Sprite[1, 4] }; for (int i = 0; i < queueSpriteArray1x4.Length; i++) { for (int j = 0; j < queueSpriteArray1x4[0].GetLength(0); j++) { for (int k = 0; k < queueSpriteArray1x4[0].GetLength(1); k++) { queueSpriteArray1x4[i][j, k] = new Sprite(); queueSpriteArray1x4[i][j, k].Position = new Vector2f(StaticVars.queueSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * k, StaticVars.queueSprite.Position.Y + StaticVars.imageSize.Y * 2.5f + StaticVars.imageSize.Y * j + StaticVars.imageSize.Y * (queueSpriteArray4x4[0].GetLength(0) - 1) * i + StaticVars.imageSize.Y * 0.5f); } } } queueSpriteArray3x3 = new Sprite[3][, ] { new Sprite[3, 3], new Sprite[3, 3], new Sprite[3, 3] }; for (int i = 0; i < queueSpriteArray3x3.Length; i++) { for (int j = 0; j < queueSpriteArray3x3[0].GetLength(0); j++) { for (int k = 0; k < queueSpriteArray3x3[0].GetLength(1); k++) { queueSpriteArray3x3[i][j, k] = new Sprite(); queueSpriteArray3x3[i][j, k].Position = new Vector2f(StaticVars.queueSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * k + StaticVars.imageSize.X * 0.5f, StaticVars.queueSprite.Position.Y + StaticVars.imageSize.Y * 2.5f + StaticVars.imageSize.Y * j + StaticVars.imageSize.Y * queueSpriteArray3x3[0].GetLength(0) * i); } } } #endregion #region Hold queue holdSprite3x3 = new Sprite[3, 3]; for (int i = 0; i < holdSprite3x3.GetLength(0); i++) { for (int j = 0; j < holdSprite3x3.GetLength(1); j++) { holdSprite3x3[i, j] = new Sprite(); holdSprite3x3[i, j].Position = new Vector2f(StaticVars.holdSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * j + StaticVars.imageSize.X * 0.5f, StaticVars.holdSprite.Position.Y + StaticVars.imageSize.Y * 3.5f + StaticVars.imageSize.Y * i); } } holdSprite4x4 = new Sprite[4, 4]; for (int i = 0; i < holdSprite4x4.GetLength(0); i++) { for (int j = 0; j < holdSprite4x4.GetLength(1); j++) { holdSprite4x4[i, j] = new Sprite(); holdSprite4x4[i, j].Position = new Vector2f(StaticVars.holdSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * j, StaticVars.holdSprite.Position.Y + StaticVars.imageSize.Y * 2.5f + StaticVars.imageSize.Y * i); } } holdSprite1x4 = new Sprite[1, 4]; for (int i = 0; i < holdSprite1x4.GetLength(0); i++) { for (int j = 0; j < holdSprite1x4.GetLength(1); j++) { holdSprite1x4[i, j] = new Sprite(); holdSprite1x4[i, j].Position = new Vector2f(StaticVars.holdSprite.Position.X + StaticVars.imageSize.X * 1.5f + StaticVars.imageSize.X * j, StaticVars.holdSprite.Position.Y + StaticVars.imageSize.Y * 2.5f + StaticVars.imageSize.Y * i + StaticVars.imageSize.Y * 1.5f); } } #endregion #region Text score = new Score(); level = new Level(); realTime = new RealTime(); #endregion menu = new Menu("Play", "Options", "Exit"); optionsMenu = new Options(); soundplayer = new SoundPlayer(selectedSong); StaticVars.statsSprite.Position = new Vector2f(StaticVars.holdSprite.Position.X, realTime.Position.Y + StaticVars.imageSize.Y); StaticVars.controlsText.Position = new Vector2f(StaticVars.queueSprite.Position.X, StaticVars.queueSprite.Position.Y + StaticVars.queueTexture.Size.Y + StaticVars.imageSize.Y); }