예제 #1
0
        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
            }
        }
예제 #2
0
        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
        }