Esempio n. 1
0
        /// <summary>
        /// Advance the game in time
        /// </summary>
        public void Advance()
        {
            // How much time change has there been?
            long  time  = stopwatch.ElapsedMilliseconds;
            float delta = (time - lastTime) * 0.001f;       // Delta time in milliseconds

            lastTime = time;


            while (delta > 0)
            {
                float step = delta;
                if (step > 0.05f)
                {
                    step = 0.05f;
                }

                float maxspeed = Math.Max(Math.Abs(player.V.X), Math.Abs(player.V.Y));
                if (maxspeed > 0)
                {
                    step = (float)Math.Min(step, 0.05 / maxspeed);
                }
                player.PostStood(stood);  // post stood condition variable to GameSprite object
                player.Advance(step);

                foreach (Polygon p in world)
                {
                    p.Advance(step);
                }

                foreach (Polygon p in world)
                {
                    if (collision.Test(player, p))
                    {
                        float depth = collision.P1inP2 ?
                                      collision.Depth : -collision.Depth;
                        player.P = player.P + collision.N * depth;
                        Vector2 v = player.V;
                        if (collision.N.X != 0)
                        {
                            v.X = 0;
                        }
                        if (collision.N.Y != 0)
                        {
                            v.Y   = 0;
                            stood = true;
                        }



                        //
                        if (p.ismapped)
                        {
                            score.AddFlyingScore(-1, PlayerFeet().X, PlayerFeet().Y, lastTime);
                        }



                        // IF PLAYER is not on GROUND and touches a MONSTER!!!
                        if (p.isMonster && player.V.Y != 0)
                        {
                            v.Y   = 5.5f;
                            stood = false;

                            v.X = -10.5f;

                            player.A = new Vector2(0, -6.8f);

                            if (p.points_to_give > 0)
                            {
                                if (p.is2)
                                {
                                    v.X = -125.5f;
                                    score.AddFlyingScore(2, PlayerFeet().X, PlayerFeet().Y, lastTime);
                                    p.points_to_give   += 1; // this will always give points
                                    lives.lives_number -= 1;
                                    if (lives.lives_number < 1)
                                    {
                                        lives.lives_number = 0;
                                        game_over.gameOver = true;
                                    }
                                }
                                if (p.is748)
                                {
                                    score.AddFlyingScore(748, PlayerFeet().X, PlayerFeet().Y, lastTime);
                                    v.X = -25.5f;
                                    lives.lives_number -= 1;
                                    if (lives.lives_number < 1)
                                    {
                                        lives.lives_number = 0;
                                        game_over.gameOver = true;
                                    }
                                }
                                else if (!p.isBig)
                                {
                                    score.AddFlyingScore(100, PlayerFeet().X, PlayerFeet().Y, lastTime);
                                }
                                else
                                {
                                    score.AddFlyingScore(500, PlayerFeet().X, PlayerFeet().Y, lastTime);
                                }
                                p.points_to_give -= 1;
                                audio.PNT();
                            }
                        }

                        else if (p.isMonster && player.V.Y != 0)
                        {
                            v.X = -25.5f;
                            lives.lives_number -= 1;
                            if (lives.lives_number < 1)
                            {
                                lives.lives_number = 0;
                                game_over.gameOver = true;
                            }
                            audio.JMP();
                        }

                        //if hit monster's right side... you lose/ game over
                        else if (p.isMonster && player.V.X <= 0)
                        {
                            lives.lives_number -= 3;
                            if (lives.lives_number < 1)
                            {
                                lives.lives_number = 0;
                                game_over.gameOver = true;
                            }
                        }
                        player.V = v;
                        player.Advance(0);
                    }
                }

                delta -= step;
            }

            score.Advance(time);

            if (!game_over.gameOver)
            {
                audio.BGD();
            }
            else
            {
                audio.BGD(true);  audio.OVR();
            }
        }