public Battle(ContentManager contentManager, RenderTarget2D final, GraphicsDevice graphicsDevice, PresentationParameters pp, int score) { //Generates 0, 1, 2 enemyType = new Random().Next(0, 3); exitReady = false; curPhase = Phase.IntroPhase; effect = contentManager.Load <Effect>("Battle/BattleBG"); effect.CurrentTechnique = effect.Techniques[0]; flash = contentManager.Load <Effect>("Battle/SpriteFlash"); combatTimer = 0; threshHold = 0.15; combatIndicator = contentManager.Load <Texture2D>("Battle/Icons/Attack"); youWon = contentManager.Load <Texture2D>("Battle/Icons/YouWon"); victoryColor = Color.White; flashColor = Color.White; secondsPerBeat = 0.5f; world = new World(ConvertUnits.ToSimUnits(0, Game1.width)); waiter = null; options = new Icons(contentManager, score >= 20); //shuffle spells only after 20 wins blackRect = new Texture2D(graphicsDevice, 1, 1); blackRect.SetData(new Color[] { Color.Black }); travis = new Battler(contentManager, world); enemy = new Enemy(contentManager, world, secondsPerBeat, enemyType, threshHold); enemyDraw = true; MultiSampleCount = pp.MultiSampleCount; palette = contentManager.Load <Texture2D>("Battle/003Palette"); effect.Parameters["palette"].SetValue(palette); effect.Parameters["paletteWidth"].SetValue((float)palette.Width); effect.Parameters["time"].SetValue((float)bgTimer); flash.Parameters["time"].SetValue((float)flashTimer); firstEffect = new RenderTarget2D(graphicsDevice, Game1.width, Game1.height, false, SurfaceFormat.Color, DepthFormat.None, MultiSampleCount, RenderTargetUsage.DiscardContents); content = contentManager; background = contentManager.Load <Texture2D>("Battle/005_GRN"); background2 = content.Load <Texture2D>("Battle/Yellow"); magic = contentManager.Load <Texture2D>("Battle/Effects/PkFireA"); magicAnim = new Animation(0, 24); bgTimer = 0; this.final = final; //required for scaling this.graphicsDevice = graphicsDevice; text = new Hud(new string[] { "@" + enemy.GetStageName() + " draws near!" }, content, 22, 2, posY: 3, canClose: true); text.finishMessage(); text.finishText(); //text.finishText(); commandName = new Hud(new string[] { options.GetSelectedName() }, content, 6, 0, Game1.width / 3 - 50, 2, canClose: false, centered: true); offsetHeightBottom = text.getHeight(); offsetHeightTop = 32; flashCounter = 1; timerMult = 1; magicColor = Color.White; darkenTimer = 1; toReturn = 1; }
void Screen.Update(GameTime dt) { if (!prevStateKb.GetPressedKeys().Equals(Keyboard.GetState().GetPressedKeys())) { game.IsMouseVisible = false; } MouseState state = Mouse.GetState(); if (prevStateM.X != state.X || prevStateM.Y != state.Y) { game.IsMouseVisible = true; } int mouseX = (int)(state.X * Game1.resMultiplier); int mouseY = (int)(state.Y * Game1.resMultiplier); pauseButton.Update(mouseX, mouseY); if ((curPhase == Phase.Transition || curPhase == Phase.BetweenGames) && ((Keyboard.GetState().IsKeyUp(Keys.Escape) && prevStateKb.IsKeyDown(Keys.Escape)) || (curPhase != Phase.Paused && pauseButton.IsPressed(prevStateM)))) { prevStateM = state; prevPhase = curPhase; MediaPlayer.Pause(); curPhase = Phase.Paused; pauseMenu.SetSelectionY(0); //timer = 0.2; } else { switch (curPhase) { case Phase.Introduction: exitButton.Update(mouseX, mouseY); introText.Update(dt, prevStateKb, prevStateM); if (controlHint) { if ((prevStateKb.IsKeyUp(Keys.Escape) && Keyboard.GetState().IsKeyDown(Keys.Escape)) || exitButton.IsPressed(prevStateM)) { controlHint = false; introText.finishMessage(); introText.finishText(); if (controlRevisit) { curPhase = Phase.MainMenu; } else { curPhase = Phase.FinalMessage; introText = new Hud(new string[] { "You can revisit that screen in Settings.\nHave fun!" }, cm, 30, 2, posY: -1, canClose: true); } } } if (introText.messageComplete()) { if (controlHint) { controlHint = false; //exitButton.Update(mouseX, mouseY); if ((prevStateKb.IsKeyUp(Keys.Escape) && Keyboard.GetState().IsKeyDown(Keys.Escape)) || exitButton.IsPressed(prevStateM)) { if (controlRevisit) { curPhase = Phase.MainMenu; } else { curPhase = Phase.FinalMessage; introText = new Hud(new string[] { "You can revisit that screen in Settings.\nHave fun!" }, cm, 30, 2, posY: -1, canClose: true); } } } else if (!controlsShown) { controlsShown = true; break; } else { //exitButton.Update(mouseX, mouseY); //Hit the wrong buttons to continue if ((prevStateKb.IsKeyUp(Keys.Space) && Keyboard.GetState().IsKeyDown(Keys.Space)) || !exitButton.IsPressed(prevStateM) && (prevStateM.LeftButton == ButtonState.Pressed && Mouse.GetState().LeftButton == ButtonState.Released)) { controlHint = true; introText = new Hud(new string[] { "You can click the button in the upper left corner\nor hit the Escape key to exit this screen." }, cm, 30, 2, posY: -1, canClose: true); } else if ((prevStateKb.IsKeyUp(Keys.Escape) && Keyboard.GetState().IsKeyDown(Keys.Escape)) || exitButton.IsPressed(prevStateM)) { if (controlRevisit) { curPhase = Phase.MainMenu; } else { curPhase = Phase.FinalMessage; introText = new Hud(new string[] { "You can revisit that screen in Settings.\nHave fun!" }, cm, 30, 2, posY: -1, canClose: true); } } } } else { } break; case Phase.FinalMessage: if (controlRevisit) { curPhase = Phase.MainMenu; break; } introText.Update(dt, prevStateKb, prevStateM); if (introText.messageComplete()) { //TODO: Make an exit button if (prevStateKb.IsKeyUp(Keys.Space) && Keyboard.GetState().IsKeyDown(Keys.Space) || (prevStateM.LeftButton == ButtonState.Pressed && Mouse.GetState().LeftButton == ButtonState.Released)) { byte[] bytes = Encoding.UTF8.GetBytes("Palette: 0\nPractice: 0\nBattle: 0W 0L\nApples: 0W 0L\n"); fs.Write(bytes, 0, bytes.Length); fs.Close(); curPhase = Phase.MainMenu; } } break; case Phase.PracticeUnlock: introText.Update(dt, prevStateKb, prevStateM); if (introText.messageComplete()) { //TODO: Make an exit button if (prevStateKb.IsKeyUp(Keys.Space) && Keyboard.GetState().IsKeyDown(Keys.Space) || (prevStateM.LeftButton == ButtonState.Pressed && Mouse.GetState().LeftButton == ButtonState.Released)) { UpdateSaveElem("Practice", 1); curPhase = Phase.MainMenu; } } break; case Phase.MainMenu: switch (microgame.Update(dt, prevStateKb, prevStateM)) { case 1: microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; practiceMode = false; microgame = ChooseGame(); //microgame = new TitleScreen(cm); curPhase = Phase.Transition; break; case 2: microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; practiceMode = true; microgame = GetMostLost(); //microgame = new TitleScreen(cm); curPhase = Phase.Transition; break; case 3: game.Exit(); break; case 4: controlRevisit = true; curPhase = Phase.Introduction; break; } break; case Phase.Transition: if (beginSong) { if (microgame is BetweenGames) { MediaPlayer.Play(transitionSong); } else { MediaPlayer.Play(previewSong); } beginSong = false; } if ((currentFlashes & 1) == 0) { timer += dt.ElapsedGameTime.TotalSeconds; } else { timer -= dt.ElapsedGameTime.TotalSeconds; } transition.Parameters["time"].SetValue((float)timer * 4); //Lets the transition animation start while borders are still animating if (microgame is BetweenGames && currentFlashes > maxFlashes) { microgame.Update(dt, prevStateKb, prevStateM); } break; case Phase.InGame: if (beginSong) { //if (microgame is Battle) MediaPlayer.Stop(); MediaPlayer.Play(battleSong); //else //MediaPlayer.Play(previewSong); beginSong = false; } byte result = microgame.Update(dt, prevStateKb, prevStateM); if (result != 254) { countdownTimer += dt.ElapsedGameTime.TotalSeconds * timerMult; } //Won game if (result == 255) { UpdateSaveGame(microgame.ToString(), true); score++; if (score == 10) { timerMult = 1.25; } else if (score == 20) { timerMult = 1.5; } countdownTimer = 0.0; microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; if (continues <= 2) { if (score % 10 == 0) { microgame = new BetweenGames(cm, score, betweenGamesOffset, pauseButton, continues, false, true); continues++; } else { microgame = new BetweenGames(cm, score, betweenGamesOffset, pauseButton, continues, false, false); } } else { microgame = new BetweenGames(cm, score, betweenGamesOffset, pauseButton, continues, false); } curPhase = Phase.Transition; beginSong = true; fromGame = true; } //Lost game else if (countdownTimer >= 11 || result == 2) { UpdateSaveGame(microgame.ToString(), false); countdownTimer = 0.0; microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; continues--; microgame = new BetweenGames(cm, score, betweenGamesOffset, pauseButton, continues, true); curPhase = Phase.Transition; beginSong = true; fromGame = true; //BetweenGames phase will handle switching to TitleScreen on 0 continues } break; case Phase.BetweenGames: if (beginSong) { beginSong = false; MediaPlayer.Stop(); MediaPlayer.Play(previewSong); //MediaPlayer.IsRepeating = true; } if (microgame.Update(dt, prevStateKb, prevStateM) == 255) { microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; if (continues > 0) { if (microgame is BetweenGames) { betweenGamesOffset = ((BetweenGames)microgame).GetAnimOffset(); microgame = ChooseGame(); } else { betweenGamesOffset = 0.0; //beginSong = true; goto case Phase.InGame; } } else { //Out of continues score = 0; timerMult = 1.0; timer = 0.2; betweenGamesOffset = 0.0; lio = contentManager.Load <Texture2D>("Menus/TransitionQuit"); MediaPlayer.Stop(); continues = 3; //First time getting a game over if (!practiceUnlocked) { practiceIntro = true; practiceUnlocked = true; introText = new Hud(new string[] { "You've unlocked practice mode!\nYou can play the games you've lost more frequently.", "Check it out in the menu!" }, cm, 30, 2, posY: -1, canClose: true); } microgame = new TitleScreen(cm, paletteShader, practiceUnlocked); } curPhase = Phase.Transition; fromGame = false; beginSong = false; } break; case Phase.Paused: resumeButton.Update(mouseX, mouseY); if (!exitConfirm && (Keyboard.GetState().IsKeyUp(Keys.Escape) && prevStateKb.IsKeyDown(Keys.Escape) || resumeButton.IsPressed(prevStateM))) { prevStateM = state; curPhase = prevPhase; MediaPlayer.Resume(); } else { pauseMenu.Update(dt, prevStateKb, prevStateM, mouseX, mouseY); if (!exitConfirm) { switch (pauseMenu.GetSelectionY(prevStateKb, prevStateM, mouseX, mouseY)) { case 0: int indX = pauseMenu.GetSelectionX(prevStateKb, prevStateM, mouseX, mouseY); if (indX > 0) { Console.WriteLine("tryna set color"); SetColor(indX - 1); } break; case 1: if (Mouse.GetState().LeftButton == ButtonState.Released && prevStateM.LeftButton == ButtonState.Pressed || Keyboard.GetState().IsKeyUp(Keys.Space) && prevStateKb.IsKeyDown(Keys.Space)) { exitConfirm = true; } break; default: break; } } else { //Check for OK, No yesButton.Update(mouseX, mouseY); noButton.Update(mouseX, mouseY); backButton.Update(mouseX, mouseY); if (yesButton.IsPressed(prevStateM) || (prevStateKb.IsKeyDown(Keys.Enter)) && Keyboard.GetState().IsKeyUp(Keys.Enter)) { microgame.Unload(); cm.Dispose(); cm = new ContentManager(contentManager.ServiceProvider); cm.RootDirectory = contentManager.RootDirectory; lio = contentManager.Load <Texture2D>("Menus/TransitionQuit"); if (score < 10) { timer = 1.8; } else { timer = 1.4; } betweenGamesOffset = 0.0; MediaPlayer.Stop(); microgame = new TitleScreen(cm, paletteShader, practiceUnlocked); //microgame = new Battle(cm, mainTarget, graphicsDevice, pp); curPhase = Phase.Transition; beginSong = false; fromGame = true; } else if (noButton.IsPressed(prevStateM) || backButton.IsPressed(prevStateM) || ((prevStateKb.IsKeyDown(Keys.Escape)) && Keyboard.GetState().IsKeyUp(Keys.Escape))) { exitConfirm = false; } } //pauseMenu.GetSelection(prevStateKb, prevStateM, mouseX, mouseY); } break; } } //microgame.Update(dt, prevStateKb, prevStateM); prevStateKb = Keyboard.GetState(); prevStateM = Mouse.GetState(); }
public void HandleInput(GameTime gameTime) { if (Keyboard.GetState().IsKeyDown(Keys.A) && prevState.IsKeyUp(Keys.A)) hud.finishMessage(); }
byte MiniScreen.Update(GameTime gameTime, KeyboardState prevStateKb, MouseState prevStateM) { if (flasher != null) { if ((flashCounter & 1) == 0) { flashTimer -= gameTime.ElapsedGameTime.TotalSeconds * timerMult * 4.2; } else { flashTimer += gameTime.ElapsedGameTime.TotalSeconds * timerMult * 4.2; } if (flasher.health > 0) //Attack Flash { flash.Parameters["time"].SetValue((float)(flashTimer + 0.1)); } else //Dying flash { flash.Parameters["time"].SetValue((float)(flashTimer / 1.1 + 0.01)); //the added value controls the offset, multiplication controls transition speed } if (flashTimer > 0.2) // || flashTimer < 0) { flashTimer = 0.2; flashCounter++; //flashColor = Color.Red; } else if (flashTimer < 0) { flashTimer = 0; flashCounter++; //flashColor = Color.Blue; } if (flashCounter > 11) { flasher = null; flashTimer = 0; flashCounter = 1; //flashColor = Color.Green; } switch (flashCounter) { case 0: flashColor = Color.Red; break; case 1: //Final color flashColor = Color.Transparent; break; case 2: flashColor = Color.Transparent; break; case 3: flashColor = new Color(128, 128, 64); break; case 4: flashColor = new Color(192, 192, 128); break; case 5: flashColor = new Color(192, 192, 128); break; case 6: flashColor = new Color(192, 192, 128); break; case 7: flashColor = new Color(128, 128, 64); break; case 8: flashColor = new Color(128, 128, 64); break; case 9: flashColor = new Color(128, 128, 64); break; case 10: flashColor = Color.Black; break; default: flashColor = Color.Transparent; break; } } enemy.Update(gameTime); travis.Update(gameTime, Keyboard.GetState()); world.Step((float)gameTime.ElapsedGameTime.TotalSeconds); combatTimer += gameTime.ElapsedGameTime.TotalSeconds; waiterTimer += gameTime.ElapsedGameTime.TotalSeconds; turnWaiter += gameTime.ElapsedGameTime.TotalSeconds; commandName.finishMessage(); commandName.Update(gameTime, prevStateKb, prevStateM); UpdateBackground(gameTime); if (curPhase == Phase.EnemyDeathPhase) { if (flasher == null) //Executed after flashing finishes { //Renders an extra frame at the end so the sprite is invisible during transition if (exitReady) { return(255); } if (enemy.IsKilled() && !deathMessageDisplayed) { exitReady = true; //return 255; text = new Hud(new string[] { enemy.deathMessage }, content, 30, 2, posY: 3, canClose: true); text.finishMessage(); text.visible = false; deathMessageDisplayed = true; } enemy.Kill(); } Console.WriteLine("flash: " + flashCounter); if (text.messageComplete()) { if (flashCounter == 1) { text = new Hud(new string[] { "" }, content, 30, 2, posY: 3, canClose: false); text.finishMessage(); //text.finishText(); //text.visible = false; victory = true; turnWaiter = 0; } } } if (turnWaiter > 0.2) { if (text.messageComplete()) { if (waiter != null) { if (waiter.attacked) { if (waiter is Enemy) { if (waiter.IsDone(gameTime, combatTimer)) { waiter.ForceFinish(); waiter = null; turnWaiter = 0; } } else { if (waiter.IsDone(gameTime, waiterTimer)) { waiterTimer = 0; waiter.ForceFinish(); waiter = null; turnWaiter = 0; } } } else { waiter.TakeDamage(10, combatTimer); waiter.attacked = true; } } else { advanceBattle(gameTime, prevStateKb, prevStateM); } } //else //text.Update(gameTime, prevState); if (victory && turnWaiter > 0.5) { return(255); } } text.Update(gameTime, prevStateKb, prevStateM); //prevState = Keyboard.GetState(); //if (prevStateKb.IsKeyDown(Keys.Q) && Keyboard.GetState().IsKeyUp(Keys.Q)) // return 255; return(toReturn); }