public LevelInfo(XElement levelInfo, ContentManager content, IControlScheme controls, GraphicsDeviceManager graphics) { foreach (XElement element in levelInfo.Elements()) { if (element.Name == XmlKeys.LEVEL_NAME) mLevel = new Level(WorldSelect.LEVEL_DIRECTORY + element.Value.ToString() + ".xml", controls, graphics.GraphicsDevice.Viewport); if (element.Name == XmlKeys.TIMERSTAR) mTimeStars = mLevel.TimerStar = Convert.ToInt32(element.Value); if (element.Name == XmlKeys.COLLECTIONSTAR) mCollectableStars = mLevel.CollectionStar = Convert.ToInt32(element.Value); if (element.Name == XmlKeys.DEATHSTAR) mDeathStars = mLevel.DeathStar = Convert.ToInt32(element.Value); if (element.Name == XmlKeys.GOALTIME) mGoalTime = Convert.ToInt32(element.Value); if (element.Name == XmlKeys.GOALCOLLECTABLE) mGoalCollectable = Convert.ToInt32(element.Value); if (element.Name == XmlKeys.UNLOCKED) mUnlocked = element.Value == XmlKeys.TRUE; } mContent = content; mGraphics = graphics; mControls = controls; }
/// <summary> /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// </summary> protected override void Initialize() { mGraphics.PreferredBackBufferWidth = mGraphics.GraphicsDevice.DisplayMode.Width; mGraphics.PreferredBackBufferHeight = mGraphics.GraphicsDevice.DisplayMode.Height; mGraphics.ToggleFullScreen(); mGraphics.ApplyChanges(); mObjects = new List<PhysicsObject>(); mCurrentLevel = new Level(); mPhysicsEnvironment = new PhysicsEnvironment(); base.Initialize(); }
/// <summary> /// Constructor for the credits screen. Sets up the list of names and categories to scrolll up /// </summary> /// <param name="controlScheme">Player's method of control</param> /// <param name="graphics">Graphics Manager for the game</param> public Credits(IControlScheme controlScheme, GraphicsDeviceManager graphics) { mControls = controlScheme; mGraphics = graphics; mTopY = mGraphics.GraphicsDevice.Viewport.TitleSafeArea.Bottom; mBackgroundLevel = Level.MainMenuLevel("Content\\Levels\\MainMenu.xml", mControls, mGraphics.GraphicsDevice.Viewport, mGraphics.GraphicsDevice.Viewport.Bounds); mBackgroundLevel.StartingPoint = new Vector2(mGraphics.GraphicsDevice.Viewport.Bounds.Center.X + mGraphics.GraphicsDevice.Viewport.Bounds.Center.X * .2f, mGraphics.GraphicsDevice.Viewport.Bounds.Center.Y + mGraphics.GraphicsDevice.Viewport.Bounds.Center.Y * .1f); //Easily add names and titles here mTitles = new Dictionary<string, string[]>(); mTitles.Add("Angry Newton Production", new string[] { "", "Angry" }); mTitles.Add("Developed At", new string[] { "University Of Utah; Senior EAE Capstone Class" }); mTitles.Add("Executive Producer", new string[]{"Roger Altizer", "Dr. Bob Kessler"}); mTitles.Add("Original Concept & Design", new string[] { "Tyler Robinson" }); mTitles.Add("Team Lead", new string[] { "Curtis Taylor" }); mTitles.Add("-Programming-", new string[]{ "", "Surprise"}); mTitles.Add("Lead Programmer", new string[] { "Tyler Robinson" }); mTitles.Add("Programmers", new string[] { "Curtis Taylor", "Nate Bradford", "Jeremy Heintz", "Casey Spencer", "Kamron Egan", "Morgan Reynolds" }); mTitles.Add("Xbox Tech", new string[] { "Kamron Egan" }); mTitles.Add("-Art-", new string[] { "", "Laugh" }); mTitles.Add("Lead Artist", new string[] { "Lukas Black" }); mTitles.Add("Artists", new string[] { "Nate Bradford", "Jeremy Heintz", "Casey Spencer" }); mTitles.Add("Animations", new string[] { "Lukas Black", "Nate Bradford", "Jeremy Heintz", "Kamron Egan" }); mTitles.Add("-Design & Development-", new string[] { "", "Bored" } ); mTitles.Add("Character Design", new string[] { "Lukas Black" }); mTitles.Add("Level Design", new string[]{"Nate Bradford", "Curtis Taylor", "Jeremy Heintz", "Morgan Reynolds", "Steven Doxey", "Casey Spencer"}); mTitles.Add("Game Mechanics", new string[] { "Tyler Robinson", "Curtis Taylor", "Morgan Reynolds" }); mTitles.Add("-Music & Sound-", new string[] { "", "Worry" }); mTitles.Add("Music Lead", new string[] { "Steven Doxey" }); mTitles.Add("Music", new string[] { "Michelle MacArt", "Cuyler Stuwe" }); mTitles.Add("Sound FX Lead", new string[] { "Steven Doxey" }); mTitles.Add("Sound FX", new string[] { "Michelle MacArt", "Tyler Robinson", "Morgan Reynolds" }); mTitles.Add("Find Us", new string[] { "", "Laugh2" }); mTitles.Add("Our Official Website", new string[] { "TBD" }); mTitles.Add("EAE Website", new string[] { "http://eae.utah.edu" }); mTitles.Add("Like us on Facebook", new string[] { "http://www.facebook.com/", "Search Mr. Gravity" }); mTitles.Add("Follow us on Twitter", new string[] { "http://www.twitter.com/AngryNewton", "Or @AngryNewton"}); }
/// <summary> /// Handles when the A key is pressed /// </summary> private void HandleAKey(ref GameStates gameState, ref Level currentLevel) { if (mControls.isAPressed(false) || mControls.isStartPressed(false)) { if (GameSound.volume != 0) GameSound.menuSound_select.Play(); if (mLevels[mCurrentWorld * 6 + mCurrentIndex].Unlocked) mLoading = START_LOAD; //Handle level select } }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // current viewport float screenscaleX = (float)mGraphics.GraphicsDevice.Viewport.Width / 1280.0f; float screenscaleY = (float)mGraphics.GraphicsDevice.Viewport.Height / 720.0f; // Create the scale transform for Draw. // Do not scale the sprite depth (Z=1). scale = Matrix.CreateScale(screenscaleX, screenscaleY, 1); //mGraphics.PreferredBackBufferWidth = 1280; //mGraphics.PreferredBackBufferHeight = 720; //mGraphics.ApplyChanges(); mTitle.Load(Content, mGraphics.GraphicsDevice); mMainMenu.Load(Content); mMainMenuLevel = Level.MainMenuLevel("Content\\Levels\\MainMenu.xml", mControls, mGraphics.GraphicsDevice.Viewport, mMainMenu.GetInnerRegion()); mMainMenuLevel.Load(Content); mCredits.Load(Content); mOptions.Load(Content); //mMenu.Load(Content, mGraphics.GraphicsDevice); mScoring.Load(Content, mGraphics.GraphicsDevice); mPause.Load(Content); GameSound.Load(Content); mCurrentLevel = new Level(mLevelLocation, mControls, GraphicsDevice.Viewport); mCurrentLevel.Load(Content); mWorldSelect.Load(Content); mAfterScore.Load(Content, GraphicsDevice); mResetConfirm.Load(Content); mController.Load(Content); mSoundOptions.Load(Content); mStartLevelSplash.Load(Content, GraphicsDevice); // Create a new SpriteBatch, which can be used to draw textures. mSpriteBatch = new SpriteBatch(GraphicsDevice); mDefaultFont = Content.Load<SpriteFont>("Fonts/Kootenay"); mQuartz = Content.Load<SpriteFont>("Fonts/QuartzLarge"); mHUDTrans = Content.Load<Texture2D>("Images/HUD/HUDTrans"); mLives = new Texture2D[6]; mLives[5] = Content.Load<Texture2D>("Images/Player/Laugh2"); mLives[4] = Content.Load<Texture2D>("Images/Player/Laugh"); mLives[3] = Content.Load<Texture2D>("Images/Player/Smile"); mLives[2] = Content.Load<Texture2D>("Images/Player/Surprise"); mLives[1] = Content.Load<Texture2D>("Images/Player/Worry"); mLives[0] = Content.Load<Texture2D>("Images/Player/Dead2"); }
/* * Draw * * This function will draw the current menu * * SpriteBatch spriteBatch: The current sprite batch used to draw * * GraphicsDeviceManager graphics: The current graphics manager */ public void Draw(SpriteBatch spriteBatch, GraphicsDeviceManager graphics, Matrix scale, Level currentLevel) { spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.None, RasterizerState.CullCounterClockwise, null, scale); float[] mSize = new float[2] { (float)mScreenRect.Width / (float)graphics.GraphicsDevice.Viewport.Width, (float)mScreenRect.Height / (float)graphics.GraphicsDevice.Viewport.Height }; spriteBatch.Draw(mTrans, new Rectangle(mScreenRect.Left, mScreenRect.Top, mScreenRect.Width, mScreenRect.Height), Color.White); if (!mDoOnce) { if (currentLevel.CollectionStar == 3 && (mWorldSelect.getLevelCollect()) != 3) { starList.Add(gemString); } if (currentLevel.TimerStar == 3 && (mWorldSelect.getLevelTime()) != 3) { starList.Add(timeString); } if (currentLevel.DeathStar == 3 && (mWorldSelect.getLevelDeath()) != 3) { starList.Add(deathString); } mDoOnce = true; } if (starList.Count == 1) { if (current >= xCoord) { current-= 100; } spriteBatch.DrawString(mQuartz, starList[0], new Vector2(current, centerYCoord), Color.White, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); spriteBatch.DrawString(mQuartz, starList[0], new Vector2(current + 4, centerYCoord + 4), Color.SteelBlue, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); } else if (starList.Count == 2) { if (current >= xCoord) { current -= 100; } spriteBatch.DrawString(mQuartz, starList[0], new Vector2(current, topYCoord2), Color.White, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); spriteBatch.DrawString(mQuartz, starList[0], new Vector2(current + 4, topYCoord2 + 4), Color.SteelBlue, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); spriteBatch.DrawString(mQuartz, starList[1], new Vector2(current, bottomYCoord2), Color.White, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); spriteBatch.DrawString(mQuartz, starList[1], new Vector2(current + 4, bottomYCoord2 + 4), Color.SteelBlue, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); } else if (starList.Count == 3) { if (current >= xCoord) { current -= 100; } spriteBatch.DrawString(mQuartz, starList[0], new Vector2(current, topYCoord3), Color.White, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); spriteBatch.DrawString(mQuartz, starList[0], new Vector2(current + 4, topYCoord3 + 4), Color.SteelBlue, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); spriteBatch.DrawString(mQuartz, starList[1], new Vector2(current, centerYCoord), Color.White, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); spriteBatch.DrawString(mQuartz, starList[1], new Vector2(current + 4, centerYCoord + 4), Color.SteelBlue, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); spriteBatch.DrawString(mQuartz, starList[2], new Vector2(current, bottomYCoord3), Color.White, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); spriteBatch.DrawString(mQuartz, starList[2], new Vector2(current + 4, bottomYCoord3 + 4), Color.SteelBlue, 0.0f, Vector2.Zero, mScale, SpriteEffects.None, 0.0f); } spriteBatch.End(); }
/* * Update * * Updates the menu depending on what the user has selected. * It will handle the title, options, load and all other menu * screens * * GameTime gameTime: The current game time variable */ public void Update(GameTime gameTime, ref GameStates gameState, ref Level level) { elapsedTime += gameTime.ElapsedGameTime.TotalSeconds; if (mScale < 1 && !upToScale) { mScale += 0.05f; } else if (mScale >= 1.0f && mScale <= 1.02f && !pulse) { upToScale = false; mScale += 0.001f; if (mScale > 1.02f) pulse = true; } else if (pulse) { mScale -= 0.001f; if (mScale <= 1.002f) pulse = false; } /* If the user selects one of the menu items */ if (mControls.isAPressed(false) || mControls.isStartPressed(false) || elapsedTime >= 3.0) { GameSound.menuSound_select.Play(GameSound.volume, 0.0f, 0.0f); /*Back To Level Selection*/ gameState = GameStates.Score; reset(); } }
/* * Update * * Updates the menu depending on what the user has selected. * It will handle the title, options, load and all other menu * screens * * GameTime gameTime: The current game time variable */ public void Update(GameTime gameTime, ref GameStates gameState, ref Level level) { /* If the user hits up */ if (mControls.isUpPressed(false)) { /* If we are not on the first element already */ if (mCurrent > 0) { GameSound.menuSound_rollover.Play(GameSound.volume, 0.0f, 0.0f); /* Decrement current and change the images */ mCurrent--; for (int i = 0; i < NUM_OPTIONS; i++) mItems[i] = mUnselItems[i]; mItems[mCurrent] = mSelItems[mCurrent]; } } /* If the user hits the down button */ if (mControls.isDownPressed(false)) { /* If we are on the last element in the menu */ if (mCurrent < NUM_OPTIONS - 1) { GameSound.menuSound_rollover.Play(GameSound.volume, 0.0f, 0.0f); /* Increment current and update graphics */ mCurrent++; for (int i = 0; i < NUM_OPTIONS; i++) mItems[i] = mUnselItems[i]; mItems[mCurrent] = mSelItems[mCurrent]; } } /* If the user selects one of the menu items */ if (mControls.isAPressed(false) || mControls.isStartPressed(false)) { level.mTimer = 0; GameSound.menuSound_select.Play(GameSound.volume, 0.0f, 0.0f); /* Level Select */ if (mCurrent == 0) { /*Back To Level Selection*/ gameState = GameStates.Level_Selection; mCurrent = 0; mItems[0] = mSelectLevelSel; mItems[1] = mRestartUnsel; mItems[2] = mMainMenuUnsel; } /* Restart Level */ else if (mCurrent == 1) { /* Start the game*/ gameState = GameStates.StartLevelSplash; level.ResetAll(); mCurrent = 0; mItems[0] = mSelectLevelSel; mItems[1] = mRestartUnsel; mItems[2] = mMainMenuUnsel; } /* Main Menu */ else if (mCurrent == 2) { gameState = GameStates.Main_Menu; mCurrent = 0; mItems[0] = mSelectLevelSel; mItems[1] = mRestartUnsel; mItems[2] = mMainMenuUnsel; } } }
/* * Update * * Updates the menu depending on what the user has selected. * It will handle the title, options, load and all other menu * screens * * GameTime gameTime: The current game time variable */ public void Update(GameTime gameTime, ref GameStates gameState, ref Level level, WorldSelect worldSelect) { if (mControls.isStartPressed(false) || mControls.isAPressed(false)) { gameState = GameStates.AfterScore; //#if XBOX360 // mSelect.Save(((ControllerControl)mControls).ControllerIndex); //#else // mSelect.Save(PlayerIndex.One); //#endif } }
/* GetRank * * int time: time to complete level * * int timeGoal: goal time * * int collect: collectables received * * int collectGoal: Total collectables in level * * int deathTotal: number of deaths * * return int[] (number of stars-- 0=Bad, 1=Okay, 2=Good, 3=Perfect): [Time, Collectables, Death] public int[] GetRank(int time, int timeGoal, int collect, int collectGoal, int deathTotal) { int[] result = new int[3]; // TIME -- 100%+, <120%, <140%, >140% if (time < timeGoal) { result[0] = 3; } else if (((double) time / (double) timeGoal) < 1.2) { result[0] = 2; } else { result[0] = 1; } // COLLECTABLES -- 100%, >80%, >60%, <60% if (collect == collectGoal) { result[1] = 3; } else if (((double) collect / (double) collectGoal) > 0.8) { result[1] = 2; } else { result[1] = 1; } // DEATHS -- 0, 1, 2-3, >3 // if (deathTotal == 0) { result[2] = 3; } else if (deathTotal >= 2) { result[2] = 2; } else { result[2] = 1; } return result; }*/ /* * Draw * * This function will draw the current menu * * SpriteBatch spriteBatch: The current sprite batch used to draw * * GraphicsDeviceManager graphics: The current graphics manager */ public void Draw(SpriteBatch spriteBatch, GraphicsDeviceManager graphics, Level level, Matrix scale) { spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.None, RasterizerState.CullCounterClockwise, null, scale); // TODO - CHANGE TO DYNAMIC PLACEMENT float textLength = mQuartz.MeasureString("Deaths:").Length(); float bufferLength = mQuartz.MeasureString("999/999 ").Length(); int topPadding = mScreenRect.Top + mScreenRect.Height / 4; int[] attempt = {level.TimerStar, level.CollectionStar, level.DeathStar}; int[] previous = { mWorldSelect.getLevelTime(), mWorldSelect.getLevelCollect(), mWorldSelect.getLevelDeath() }; //attempt = GetRank((int)level.mTimer, (int)level.IdealTime, (int)GravityShift.Level.mNumCollected, (int)GravityShift.Level.mNumCollectable, (int)GravityShift.Level.mDeaths); spriteBatch.Draw(mBackground, new Rectangle(0, 0, graphics.GraphicsDevice.Viewport.Width, graphics.GraphicsDevice.Viewport.Height), Color.White); spriteBatch.Draw(mTitle, new Vector2(mScreenRect.Left + (mScreenRect.Width - mTitle.Width) / 2, mScreenRect.Top), Color.White); spriteBatch.DrawString(mQuartz, "Time:", new Vector2(mScreenRect.Left + (mScreenRect.Width / 6), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Time:", new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + 1, topPadding + 1), Color.SteelBlue); spriteBatch.DrawString(mQuartz, (int)level.mTimer + " Sec", new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + 20, topPadding), Color.White); //Draw Stars if (attempt[0] >= 1) spriteBatch.Draw(mStar, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + bufferLength, topPadding), null, Color.White, 0.0f, Vector2.Zero, 0.75f, SpriteEffects.None, 0.0f); if (attempt[0] >= 2) spriteBatch.Draw(mStar, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + bufferLength + (0.5f * (mStar.Width)), topPadding), null, Color.White, 0.0f, Vector2.Zero, 0.75f, SpriteEffects.None, 0.0f); if (attempt[0] == 3) spriteBatch.Draw(mStar, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + bufferLength + (0.5f * (2 * mStar.Width)), topPadding), null, Color.White, 0.0f, Vector2.Zero, 0.75f, SpriteEffects.None, 0.0f); level.TimerStar = attempt[0]; if (previous[0] > attempt[0]) { spriteBatch.DrawString(mQuartz, "Your Best: " + previous[0] + "/3", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Your Best: " + previous[0] + "/3", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16) + 1, topPadding + 1), Color.SteelBlue); } else if(attempt[0] < 3) { spriteBatch.DrawString(mQuartz, "Best So Far!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Best So Far!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16) + 1, topPadding + 1), Color.SteelBlue); } else { spriteBatch.DrawString(mQuartz, "Perfect!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Perfect!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16) + 1, topPadding + 1), Color.SteelBlue); } topPadding += 65; spriteBatch.DrawString(mQuartz, "Gems:", new Vector2(mScreenRect.Left + (mScreenRect.Width / 6), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Gems:", new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + 1, topPadding + 1), Color.SteelBlue); spriteBatch.DrawString(mQuartz, (int)GravityShift.Level.mNumCollected + " / " + GravityShift.Level.mNumCollectable, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + 20, topPadding), Color.White); if (attempt[1] >= 1) spriteBatch.Draw(mStar, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + bufferLength, topPadding), null, Color.White, 0.0f, Vector2.Zero, 0.75f, SpriteEffects.None, 0.0f); if (attempt[1] >= 2) spriteBatch.Draw(mStar, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + bufferLength + (0.5f * (mStar.Width)), topPadding), null, Color.White, 0.0f, Vector2.Zero, 0.75f, SpriteEffects.None, 0.0f); if (attempt[1] == 3) spriteBatch.Draw(mStar, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + bufferLength + (0.5f * (2 * mStar.Width)), topPadding), null, Color.White, 0.0f, Vector2.Zero, 0.75f, SpriteEffects.None, 0.0f); level.CollectionStar = attempt[1]; if (previous[1] > attempt[1]) { spriteBatch.DrawString(mQuartz, "Your Best: " + previous[0] + "/3", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Your Best: " + previous[0] + "/3", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16) + 1, topPadding + 1), Color.SteelBlue); } else if (attempt[1] < 3) { spriteBatch.DrawString(mQuartz, "Best So Far!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Best So Far!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16) + 1, topPadding + 1), Color.SteelBlue); } else { spriteBatch.DrawString(mQuartz, "Perfect!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Perfect!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16) + 1, topPadding + 1), Color.SteelBlue); } topPadding += 65; spriteBatch.DrawString(mQuartz, "Deaths:", new Vector2(mScreenRect.Left + (mScreenRect.Width / 6), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Deaths:", new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + 1, topPadding + 1), Color.SteelBlue); spriteBatch.DrawString(mQuartz, "" + (int)GravityShift.Level.mDeaths, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + 20, topPadding), Color.White); //Draw Stars if (attempt[2] >= 1) spriteBatch.Draw(mStar, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + bufferLength, topPadding), null, Color.White, 0.0f, Vector2.Zero, 0.75f, SpriteEffects.None, 0.0f); if (attempt[2] >= 2) spriteBatch.Draw(mStar, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + bufferLength + (0.5f * (mStar.Width)), topPadding), null, Color.White, 0.0f, Vector2.Zero, 0.75f, SpriteEffects.None, 0.0f); if (attempt[2] == 3) spriteBatch.Draw(mStar, new Vector2(mScreenRect.Left + (mScreenRect.Width / 6) + textLength + bufferLength + (0.5f * (2 * mStar.Width)), topPadding), null, Color.White, 0.0f, Vector2.Zero, 0.75f, SpriteEffects.None, 0.0f); level.DeathStar = attempt[2]; if (previous[2] > attempt[2]) { spriteBatch.DrawString(mQuartz, "Your Best: " + previous[0] + "/3", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Your Best: " + previous[0] + "/3", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16) + 1, topPadding + 1), Color.SteelBlue); } else if (attempt[2] < 3) { spriteBatch.DrawString(mQuartz, "Best So Far!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Best So Far!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16) + 1, topPadding + 1), Color.SteelBlue); } else { spriteBatch.DrawString(mQuartz, "Perfect!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16), topPadding), Color.White); spriteBatch.DrawString(mQuartz, "Perfect!", new Vector2(mScreenRect.Left + (11 * mScreenRect.Width / 16) + 1, topPadding + 1), Color.SteelBlue); } string request = "Press Start or A To Access The Menu"; Vector2 stringSize = mQuartz.MeasureString(request); spriteBatch.DrawString(mQuartz, request, new Vector2(mScreenRect.Center.X - (stringSize.X / 2), mScreenRect.Bottom - (stringSize.Y) * 2), Color.SteelBlue); spriteBatch.DrawString(mQuartz, request, new Vector2(mScreenRect.Center.X - (stringSize.X / 2) + 2, mScreenRect.Bottom - (stringSize.Y) * 2 + 2), Color.White); spriteBatch.End(); }
/// <summary> /// Handles when the A key is pressed /// </summary> private void HandleAKey(ref GameStates gameState, ref Level currentLevel) { if (mControls.isAPressed(false) || mControls.isStartPressed(false)) { if (mShowCongrats) { mShowCongrats = false; return; } if (GameSound.volume != 0) GameSound.menuSound_select.Play(); if (mLevels[mCurrentWorld * 6 + mCurrentIndex].Unlocked) mLoading = START_LOAD; #if XBOX360 else if (TrialMode) { if (!Guide.IsVisible) { SignedInGamer gamer = Gamer.SignedInGamers[((ControllerControl)mControls).ControllerIndex]; if (gamer != null && !gamer.IsGuest && gamer.IsSignedInToLive) { if (gamer.Privileges.AllowPurchaseContent) { Guide.ShowMarketplace(((ControllerControl)mControls).ControllerIndex); } } } } #endif //Handle level select } }
/* * Draw * * This function will draw the current menu * * SpriteBatch spriteBatch: The current sprite batch used to draw * * GraphicsDeviceManager graphics: The current graphics manager */ public void Draw(SpriteBatch spriteBatch, GraphicsDeviceManager graphics, Level level, Matrix scale) { spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.None, RasterizerState.CullCounterClockwise, null, scale); float[] mSize = new float[2] { (float)mScreenRect.Width / (float)graphics.GraphicsDevice.Viewport.Width, (float)mScreenRect.Height / (float)graphics.GraphicsDevice.Viewport.Height }; float mHeight = mScreenRect.Top; spriteBatch.Draw(mTrans, graphics.GraphicsDevice.Viewport.Bounds, Color.White); //spriteBatch.Draw(mTitle, new Rectangle(mScreenRect.Center.X - (int)(mTitle.Width * mSize[0]) / 2, mScreenRect.Top, (int)(mTitle.Width * mSize[0]), (int)(mTitle.Height * mSize[1])), Color.White); string request = "Goals for " + level.Name + ":"; Vector2 stringSize = mQuartzLarge.MeasureString(request); spriteBatch.DrawString(mQuartzLarge, request, new Vector2(mScreenRect.Center.X - stringSize.X / 2, mHeight), Color.DarkTurquoise); spriteBatch.DrawString(mQuartzLarge, request, new Vector2(mScreenRect.Center.X - stringSize.X / 2 + 2, mHeight + 2), Color.White); mHeight += (mQuartzLarge.LineSpacing + mQuartzSmall.LineSpacing); request = "Gems:"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X - stringSize.X / 2, mHeight), Color.DarkTurquoise); mHeight += mQuartzSmall.LineSpacing; /* Print the collectable goals for the level */ if ((int)(level.NumCollectable * .8) - 1 != 0) request = " 0 - " + ((int)(level.NumCollectable * .8) - 1) + " gems"; else request = " 0 gems"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X - mScreenRect.Width / 3 - stringSize.X / 2, mHeight), Color.White); if ((level.NumCollectable - 1) != (int)(level.NumCollectable * .8)) request = (int)(level.NumCollectable * .8) + " - " + (level.NumCollectable - 1).ToString() + " gems"; else request = (int)(level.NumCollectable * .8) + " gems"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X - stringSize.X / 2, mHeight), Color.White); request = level.NumCollectable.ToString() + " gems"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 - stringSize.X / 2, mHeight), Color.White); mHeight += mQuartzSmall.LineSpacing; /* 1 Star */ spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X - mScreenRect.Width / 3 - mStar.Width / 2, mHeight), Color.White); /* 2 Star */ spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X - mStar.Width, mHeight), Color.White); spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X, mHeight), Color.White); /* 3 Star */ spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 - 3*mStar.Width/2, mHeight), Color.White); spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 - mStar.Width / 2, mHeight), Color.White); spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 + mStar.Width / 2, mHeight), Color.White); mHeight += (mStar.Height + mQuartzSmall.LineSpacing); request = "Time in seconds:"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X - stringSize.X / 2, mHeight), Color.DarkTurquoise); mHeight += mQuartzSmall.LineSpacing; /* Print the timer goals for the level */ request = "Over " + (int)(level.IdealTime * 1.2) + " secs"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X - mScreenRect.Width / 3 - stringSize.X / 2, mHeight), Color.White); if((int)(level.IdealTime + 1) != (int)(level.IdealTime * 1.2)) request = (int)(level.IdealTime + 1) + " - " + (int)(level.IdealTime * 1.2) + " secs"; else request = (int)(level.IdealTime * 1.2) + " secs"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X - stringSize.X / 2, mHeight), Color.White); request = (int)(level.IdealTime) +" secs"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 - stringSize.X / 2, mHeight), Color.White); mHeight += mQuartzSmall.LineSpacing; /* 1 Star */ spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X - mScreenRect.Width / 3 - mStar.Width / 2, mHeight), Color.White); /* 2 Star */ spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X - mStar.Width, mHeight), Color.White); spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X, mHeight), Color.White); /* 3 Star */ spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 - 3 * mStar.Width / 2, mHeight), Color.White); spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 - mStar.Width / 2, mHeight), Color.White); spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 + mStar.Width / 2, mHeight), Color.White); mHeight += (mStar.Height + mQuartzSmall.LineSpacing); request = "Deaths:"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X - stringSize.X / 2, mHeight), Color.DarkTurquoise); mHeight += mQuartzSmall.LineSpacing; /* Print the death goals for the level */ request = " 3 - 5 Deaths"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X - mScreenRect.Width / 3 - stringSize.X / 2, mHeight), Color.White); request = " 1 - 2 Deaths"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X - stringSize.X / 2, mHeight), Color.White); request = " 0 Deaths"; stringSize = mQuartzSmall.MeasureString(request); spriteBatch.DrawString(mQuartzSmall, request, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 - stringSize.X / 2, mHeight), Color.White); mHeight += mQuartzSmall.LineSpacing; /* 1 Star */ spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X - mScreenRect.Width / 3 - mStar.Width / 2, mHeight), Color.White); /* 2 Star */ spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X - mStar.Width, mHeight), Color.White); spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X, mHeight), Color.White); /* 3 Star */ spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 - 3 * mStar.Width / 2, mHeight), Color.White); spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 - mStar.Width / 2, mHeight), Color.White); spriteBatch.Draw(mStar, new Vector2(mScreenRect.Center.X + mScreenRect.Width / 3 + mStar.Width / 2, mHeight), Color.White); spriteBatch.End(); }
/// <summary> /// Handles when the A key is pressed /// </summary> private void HandleAKey(ref GameStates gameState, ref Level currentLevel) { if (mControls.isAPressed(false) || mControls.isStartPressed(false)) { if (mShowCongrats) { mShowCongrats = false; return; } if (GameSound.volume != 0) GameSound.menuSound_select.Play(); if (mLevels[mCurrentWorld * 6 + mCurrentIndex].Unlocked) mLoading = START_LOAD; #if XBOX360 else if (TrialMode) { gameState = GameStates.WorldPurchaseScreen; } #endif //Handle level select } }
/// <summary> /// Handle any changes while on the level selection menu /// </summary> /// <param name="gameTime">Current time within the game</param> /// <param name="gameState">Current gamestate of the game</param> /// <param name="currentLevel">Current level of the game</param> public void Update(GameTime gameTime, ref GameStates gameState, ref Level currentLevel) { //Handle loading after loading screen has been drawn if (mLoading == LOADING) { mLoading = NONE; currentLevel = mLevels[mCurrentWorld * 6 + mCurrentIndex].Level; currentLevel.Load(mContent); currentLevel.IdealTime = mLevels[mCurrentWorld * 6 + mCurrentIndex].GetGoal(LevelInfo.StarTypes.Time); currentLevel.CollectableCount = mLevels[mCurrentWorld * 6 + mCurrentIndex].GetGoal(LevelInfo.StarTypes.Collection); currentLevel.TimerStar = mLevels[mCurrentWorld * 6 + mCurrentIndex].GetStar(LevelInfo.StarTypes.Time); currentLevel.CollectionStar = mLevels[mCurrentWorld * 6 + mCurrentIndex].GetStar(LevelInfo.StarTypes.Collection); currentLevel.DeathStar = mLevels[mCurrentWorld * 6 + mCurrentIndex].GetStar(LevelInfo.StarTypes.Death); gameState = GameStates.StartLevelSplash; } HandleAKey(ref gameState, ref currentLevel); HandleBKey(ref gameState); HandleDirectionKey(); }
public static Level MainMenuLevel(string filepath, IControlScheme controls, Viewport viewport, Rectangle region) { Level main = new Level(filepath, controls, viewport); main.isCameraFixed = true; main.shouldAnimate = false; main.Size = new Vector2(region.Width * 4 / 3, region.Height * 4 / 3); main.mStartingPoint = new Vector2(region.Width * 11 / 18, region.Height / 4); return main; }
public void Update(GameTime gameTime, ref GameStates gameState, ref Level level) { /* If the user hits up */ if (mControls.isUpPressed(false)) { /* If we are not on the first element already */ if (mCurrent > 0) { GameSound.menuSound_rollover.Play(GameSound.volume, 0.0f, 0.0f); /* Decrement current and change the images */ mCurrent--; for (int i = 0; i < NUM_OPTIONS; i++) mItems[i] = mUnselItems[i]; mItems[mCurrent] = mSelItems[mCurrent]; } } /* If the user hits the down button */ if (mControls.isDownPressed(false)) { /* If we are on the last element in the menu */ if (mCurrent < NUM_OPTIONS - 1) { GameSound.menuSound_rollover.Play(GameSound.volume, 0.0f, 0.0f); /* Increment current and update graphics */ mCurrent++; for (int i = 0; i < NUM_OPTIONS; i++) mItems[i] = mUnselItems[i]; mItems[mCurrent] = mSelItems[mCurrent]; } } /* If the user selects a menu item */ if (mControls.isAPressed(false) || mControls.isStartPressed(false)) { GameSound.menuSound_select.Play(GameSound.volume, 0.0f, 0.0f); /* Continue */ if (mCurrent == 0) { gameState = GameStates.New_Level_Selection; level.Reset(); mCurrent = 1; for (int i = 0; i < NUM_OPTIONS; i++) mItems[i] = mUnselItems[i]; mItems[mCurrent] = mSelItems[mCurrent]; } /* Back */ else if (mCurrent == 1) { gameState = GameStates.Options; } } }
public void Update(GameTime gametime, ref GameStates states, Level mainMenuLevel) { PhysicsEnvironment env = mainMenuLevel.Environment; if (mControls.isBackPressed(false) || mControls.isBPressed(false)) states = GameStates.Main_Menu; if (mControls.isAPressed(false) || mControls.isStartPressed(false)) { if (mCurrentChoice == MenuChoices.Volume) { states = GameStates.SoundOptions; mainMenuLevel.Reload(); } if (mCurrentChoice == MenuChoices.Controls) { states = GameStates.Controls; mainMenuLevel.Reload(); } if (mCurrentChoice == MenuChoices.Reset) { states = GameStates.ResetConfirm; mainMenuLevel.Reload(); } if (mCurrentChoice == MenuChoices.Back) states = GameStates.Main_Menu; env.GravityDirection = GravityDirections.Down; } if (env.GravityDirection == GravityDirections.Down) mCurrentChoice = MenuChoices.Controls; if (env.GravityDirection == GravityDirections.Left) mCurrentChoice = MenuChoices.Reset; if (env.GravityDirection == GravityDirections.Right) mCurrentChoice = MenuChoices.Volume; if (env.GravityDirection == GravityDirections.Up) mCurrentChoice = MenuChoices.Back; }