public void Update(GameTime gameTime, ref SelectMode mode, float mouseSens, float volume) { //Camera movements newMouse = Mouse.GetState(); Mouse.SetPosition(middleScreen.X, middleScreen.Y); mouseDiff.X = (int)Math.Round((newMouse.X - middleScreen.X) * mouseSens); mouseDiff.Y = (int)Math.Round((newMouse.Y - middleScreen.Y) * mouseSens); //Update background position in relation to mouse movement Game1_Methods.CameraMovement(ref viewSource, mouseDiff, screenDim, new Point(background.Width, background.Height)); if (go) { elapsedTime = gameTime.ElapsedGameTime.TotalSeconds; totalElapsedTime = gameTime.TotalGameTime.TotalSeconds; timeRemaining -= elapsedTime; ticking.Volume = volume * 0.75f; MediaPlayer.Volume = volume; if (MediaPlayer.State == MediaState.Stopped) { MediaPlayer.Play(gameSong); } //Target check if (target.Contains(middleScreen)) { if (target.color == Color.Yellow) { timeOn += elapsedTime; } else { numberOfTimesOn++; } target.color = Color.Yellow; if (ticking.State != SoundState.Playing) { ticking.Play(); } } else { if (target.color == Color.Yellow) { timeOn += elapsedTime; } target.color = Color.White; if (ticking.State == SoundState.Playing) { ticking.Stop(); } } //Target movement logic target.ContinuousMove(elapsedTime, totalElapsedTime); //Stats precision = (timeOn / (gameTotalTime - timeRemaining)) * 100; avgTimeOn = timeOn / numberOfTimesOn; if (timeRemaining < 0) { MediaPlayer.Stop(); mode = SelectMode.results; score = (int)precision; ticking.Stop(); endTrackerGame?.Invoke(this, new TrackerGameEventArgs(precision, avgTimeOn, score)); } } else { effectiveDiff.X = viewSource.X - oldViewSource.X; effectiveDiff.Y = viewSource.Y - oldViewSource.Y; oldViewSource = viewSource; goButtonRectangle.X = goButtonRectangle.X - effectiveDiff.X; goButtonRectangle.Y = goButtonRectangle.Y - effectiveDiff.Y; goButton.rectangle = goButtonRectangle; if (goButton.IsPressed(newMouse, oldMouse, volume)) { go = true; } oldMouse = newMouse; //difference between hittingGame: not necessary to update oldMouse after game start,small optimization } }
public void Update(GameTime gameTime, ref SelectMode mode, float mouseSens, float volume) { newMouse = Mouse.GetState(); Mouse.SetPosition(middleScreen.X, middleScreen.Y); mouseDiff.X = (int)Math.Round(mouseSens * (newMouse.X - middleScreen.X)); mouseDiff.Y = (int)Math.Round(mouseSens * (newMouse.Y - middleScreen.Y)); Game1_Methods.CameraMovement(ref viewSource, mouseDiff, screenDim, new Point(background.Width, background.Height)); if (go) //check if the game has started { timeRemaining -= (int)(gameTime.ElapsedGameTime.TotalMilliseconds); elapsedTime = gameTime.ElapsedGameTime.TotalSeconds; MediaPlayer.Volume = volume; if (MediaPlayer.State == MediaState.Stopped) { MediaPlayer.Play(gameSong); } if (timeRemaining < 0) { mode = SelectMode.results; MediaPlayer.Stop(); //normalize score to be in percentage score = 100 * score / ((target.cameraDistance + target.zRange) * 60); //60 = empyrichal limits for targetsDestroyed HittingGameEnded(new HittingGameEventArgs(targetsDestroyed, clicks, totalTime, (int)score)); } /*newMouse = Mouse.GetState(); * Mouse.SetPosition(middleScreen.X, middleScreen.Y); * * mouseDiff.X = (int)Math.Round(mouseSens * (newMouse.X - middleScreen.X)); * mouseDiff.Y = (int)Math.Round(mouseSens * (newMouse.Y - middleScreen.Y)); * * Game1_Methods.CameraMovement(ref viewSource, mouseDiff, screenDim, new Point(background.Width, background.Height));*/ if (newMouse.LeftButton == ButtonState.Pressed && oldMouse.LeftButton == ButtonState.Released) { clicks++; if (target.Contains(middleScreen)) { score += target.distance; targetsDestroyed++; //target.sphere.isExploding = true; //little trick to set up explosion for target in list explodingTargets.Add(target.CloneTarget()); //target.sphere.isExploding = false; //little trick to set up explosion for target in list target.SpawnMove(screenDim); //glassBreak[rand.Next(glassBreak.Length)].Play(); //not working, miss some shoots. Why? SoundEffectInstance newSound = glassBreak[rand.Next(glassBreak.Length)].CreateInstance(); newSound.Play(); soundEffectInstancesList.Add(newSound); } } List <SoundEffectInstance> soundToRemove = new List <SoundEffectInstance>(); foreach (SoundEffectInstance sound in soundEffectInstancesList) { if (sound.State == SoundState.Stopped) { soundToRemove.Add(sound); } } foreach (SoundEffectInstance sound in soundToRemove) { soundEffectInstancesList.Remove(sound); } foreach (SoundEffectInstance sound in soundEffectInstancesList) { sound.Volume = volume; if (sound.State == SoundState.Paused) { sound.Play(); } } //oldMouse = newMouse; //this is necessary to store the previous value of left button } else { effectiveDiff.X = viewSource.X - oldViewSource.X; effectiveDiff.Y = viewSource.Y - oldViewSource.Y; oldViewSource = viewSource; goButtonRectangle.X = goButtonRectangle.X - effectiveDiff.X; goButtonRectangle.Y = goButtonRectangle.Y - effectiveDiff.Y; goButton.rectangle = goButtonRectangle; if (goButton.IsPressed(newMouse, oldMouse, volume)) { go = true; } } oldMouse = newMouse; //this is necessary to store the previous value of left button }