예제 #1
0
        protected override void UpdateWorld()
        {
            if (GamePad.ButtonBackClicked())
            {
                Exit();
            }

            if (GamePad.ButtonAClicked())
            {
                mPatrols.Add(new PatrolObject());
            }

            if (GamePad.ButtonBClicked())
            {
                if (mPatrols.Count > 0)
                {
                    PatrolObject p = mPatrols[0];
                    p.RemoveFromAutoDrawSet();
                    mPatrols.RemoveAt(0);
                }
            }

            foreach (PatrolObject p in mPatrols)
            {
                p.Update();
            }

            EchoToTopStatus("A to add a new patrol, B to remove a patrol");
            EchoToBottomStatus("Currently NumPatrol=" + mPatrols.Count);
        }
예제 #2
0
        protected override void UpdateWorld()
        {
            if (GamePad.ButtonBackClicked())
            {
                Exit();
            }

            #region change speed by inc/dec time for travelling
            mSecondsToTravel += GamePad.ThumbSticks.Right.Y;
            if (mSecondsToTravel <= 0f)
            {
                mSecondsToTravel = 0.1f;
            }
            #endregion

            #region recompute new speed for ball
            if (GamePad.ButtonAClicked())
            {
                ComputeBallSpeed();
                mBall.AddToAutoDrawSet();
                ResetBallShootInfo();
            }
            #endregion

            #region recompute new velocity direction for ball
            if (GamePad.ButtonBClicked())
            {
                GenerateRandomBallVelocityDirection();
                ResetBallShootInfo();
                mBall.TopOfAutoDrawSet();
            }
            #endregion

            #region determine if should contiune to draw the ball
            if (mBall.IsInAutoDrawSet())
            {
                Vector2 delta = mBall.Center - kInitPosition;
                mDistanceTravelled = delta.Length();

                if (mDistanceTravelled > kDistanceCovered)
                {
                    mBall.RemoveFromAutoDrawSet();
                }
                else
                {
                    mUpdatesSinceShoot++;
                }
            }
            #endregion

            EchoToTopStatus("Ball velocity:" + mBall.Velocity + "  position:" + mBall.Center);
            EchoToBottomStatus("Travel across " + kDistanceCovered + " units in: " + mSecondsToTravel + " seconds"
                               + " UpdatesSinceShoot(" + mUpdatesSinceShoot + ")");
        }
예제 #3
0
        protected override void UpdateWorld()
        {
            if (GamePad.ButtonBackClicked())
            {
                Exit();
            }

            #region add a new ViewVector
            if (GamePad.ButtonAClicked())
            {
                if (null != mCurrentVec)
                {
                    mCurrentVec.FinalizeVector();
                    mCurrentPos = mCurrentVec.EndPos();
                }
                mCurrentVec = new ShowVector(mCurrentPos, mDir, mVectorSize);
            }
            #endregion

            #region Update vectorDir by right thumbStick
            mDir += GamePad.ThumbSticks.Right;
            mDir.Normalize();
            #endregion

            #region Update vectorSize by left thumbStick y
            mVectorSize += GamePad.ThumbSticks.Left.Y;
            #endregion

            #region show another Vector addition
            if (null != mCurrentVec)
            {
                mCurrentVec.SetVectorDir(mDir);
                mCurrentVec.SetVectorSize(mVectorSize);
            }
            #endregion

            #region restart ...
            if (GamePad.ButtonBClicked())
            {
                World.RemoveAllFromDrawSet();
                mCurrentVec   = null;
                mAlreadyShown = 0;
                mCurrentPos   = kInitPosition;
                DrawGrid();
            }
            #endregion

            EchoToTopStatus("Segments shown:" + mAlreadyShown + "CurrentPos=" + mCurrentPos);
            EchoToBottomStatus("Vector Direction" + mDir + " Size: " + mVectorSize);
        }
예제 #4
0
        protected override void UpdateWorld()
        {
            if (GamePad.ButtonBackClicked())
            {
                this.Exit();
            }

            if (GamePad.ButtonAClicked())
            {
                if (mBall.IsInAutoDrawSet())
                {
                    mMissed++;
                }

                mBall.InitializeNewBall();
            }

            if (GamePad.ButtonBClicked())
            {
                mBall.RemoveFromAutoDrawSet();
                mMissed++;
            }


            float userLeft  = GamePad.Triggers.Left;
            float userRight = GamePad.Triggers.Right;

            for (int i = 0; i < kNumPaddlesPerSide; i++)
            {
                if ((mLeftPaddles[i].Update(userLeft, mBall)) ||
                    (mRightPaddles[i].Update(userRight, mBall)))
                {
                    mHit++;
                }
            }

            if (mBall.IsInAutoDrawSet())
            {
                mBall.Update();
                EchoToBottomStatus("Ball position: " + mBall.Center);
            }
            else
            {
                EchoToBottomStatus("No Ball in the world");
            }

            EchoToTopStatus("Hit: " + mHit + "   Missed:" + mMissed);
        }
예제 #5
0
        protected override void UpdateWorld()
        {
            if (GamePad.ButtonBackClicked())
            {
                Exit();
            }

            if (GamePad.ButtonAClicked())
            {
                mPatrols.Add(new PatrolObject());
            }

            if (GamePad.ButtonBClicked())
            {
                if (mPatrols.Count > 0)
                {
                    PatrolObject p = mPatrols[0];
                    p.RemoveFromAutoDrawSet();
                    mPatrols.RemoveAt(0);
                }
            }

            int numChase = 0;

            for (int i = 0; i < mPatrols.Count; i++)
            {
                PatrolObject p = mPatrols[i];

                if (p.ChasingHero())
                {
                    numChase++;
                }

                if (p.Update(mHero))
                {
                    mPatrols.Remove(p);
                    p.RemoveFromAutoDrawSet();
                }
            }


            mHero.Update(GamePad.ThumbSticks.Right);

            EchoToTopStatus("A to add a new patrol, B to remove a patrol");
            EchoToBottomStatus("Currently NumPatrol=" + mPatrols.Count + " NumChasing=" + numChase + "    Hero caught=" + mHero.NumTimesCaught);
        }
예제 #6
0
        /// <summary>
        /// This is the "Controller" in the MVC software architecture.
        /// In this function, we accept user input and forward appropriate user actions
        /// to our model.
        /// </summary>
        protected override void UpdateWorld()
        {
            if (GamePad.ButtonBackClicked())
            {
                Exit();
            }

            /// Forward user input to our model
            if (GamePad.ButtonAClicked())
            {
                mMyTarget.CreateTarget();
            }

            if (GamePad.ButtonBClicked())
            {
                mMyTarget.DestroyTarget();
            }

            mMyTarget.UpdateTarget(GamePad.ThumbSticks.Right);
        }
예제 #7
0
        protected override void UpdateWorld()
        {
            if (GamePad.ButtonBackClicked())
            {
                Exit();
            }

            #region add a new road segment
            if (GamePad.ButtonAClicked())
            {
                mRoad.FinalizeRoadSegment(mDir, mLength);
            }
            #endregion

            #region Update vectorDir and size by thumbSticks
            mDir           += GamePad.ThumbSticks.Right;
            mLength        += GamePad.ThumbSticks.Left.Y;
            mTicksToTravel += GamePad.ThumbSticks.Left.X;
            mRoad.UpdateRoadSegment(mDir, mLength);
            mBall.TopOfAutoDrawSet();
            #endregion

            #region tell the Ball to update itself
            mTicksHasPassed++;
            if (mBall.Update(mTicksToTravel))
            {
                mTicksHasPassed = 0;
            }
            #endregion

            #region restart ...
            if (GamePad.ButtonBClicked())
            {
                mRoad.ResetRoad();
                mBall.ResetBallPosition();
            }
            #endregion

            EchoToTopStatus("Number of updates to travel each segment:" + mTicksToTravel + "  NumHasPassed(" + mTicksHasPassed + ")");
            EchoToBottomStatus("Vector Direction" + mDir + " Size: " + mLength);
        }
예제 #8
0
        protected override void UpdateWorld()
        {
            if (GamePad.ButtonBackClicked())
            {
                Exit();
            }

            #region add a new road segment
            if (GamePad.ButtonAClicked())
            {
                mRoad.FinalizeRoadSegment(mDir, mLength);
            }

            #endregion

            #region Update vectorDir and size by thumbSticks
            mDir    += GamePad.ThumbSticks.Right;
            mLength += GamePad.ThumbSticks.Left.Y;
            mRoad.UpdateRoadSegment(mDir, mLength);
            mCar.TopOfAutoDrawSet();
            #endregion

            #region tell the car to update itself
            mTurnRate += 0.02f * GamePad.ThumbSticks.Left.X;
            mTurnRate  = MathHelper.Clamp(mTurnRate, 0f, 1f);
            mCar.Update(mTurnRate);
            #endregion

            #region restart ...
            if (GamePad.ButtonBClicked())
            {
                mRoad.ResetRoad();
                mCar.ResetCarPosition();
            }
            #endregion

            EchoToTopStatus("Turn rate: " + mTurnRate);
        }
예제 #9
0
        protected override void UpdateWorld()
        {
            #region game is going on
            if (gameStarted && !gameOver && !win)
            {
                int roomX = (int)theLevel.currentRoom.X;
                int roomY = (int)theLevel.currentRoom.Y;

                #region removing while testing new pause screen
                //if (pauseScreen == null) { //we are creating the pause screen every update!
                //    float x = theLevel.currentOrigin.X + 50f;
                //    float y = theLevel.currentOrigin.Y + (9f/16f)*50f;
                //    pauseScreen = new XNACS1Rectangle(new Vector2(x, y), 100f, (9f / 16f)*100f);
                //    pauseScreen.Color = Color.Black;

                //    map = new Map(new Vector2(x, y));// betania added this
                //    map.Visible = false;
                //    map.RemoveFromAutoDrawSet();// betania added this
                //}
                #endregion

                if (GamePad.ButtonStartClicked() && !exiting)
                {
                    paused = paused ? false : true;                     //toggle the pause button
                }
                if (theLevel.paused)
                {
                    World.Paused = true;
                }

                if (!theLevel.paused && lostLifeScreen != null)
                {
                    lostLifeScreen.RemoveFromAutoDrawSet();
                    lostLifeScreen = null;
                }

                if (!theLevel.paused && !paused)
                {
                    World.Paused = false;
                }

                if (!paused && !theLevel.paused)
                {
                    //if (theLevel.paused)
                    //	World.Paused = true;

                    if (GamePad.ButtonBackClicked() || exiting)
                    {
                        exiting      = true;
                        World.Paused = true;
                        float x = theLevel.rooms[roomX, roomY].roomOrigin.X + 50f;
                        float y = theLevel.rooms[roomX, roomY].roomOrigin.Y + 27f;
                        if (areYouSure == null)
                        {
                            areYouSure       = new XNACS1Rectangle(new Vector2(x, y), 50, 27f);
                            areYouSure.Color = Color.Black;
                            areYouSure.Label = "Are you sure you want to quit? All progress will be lost.\n"
                                               + "Press A to exit or B or cancel and return to the game";
                            areYouSure.LabelColor = Color.White;
                            areYouSure.AddToAutoDrawSet();
                        }

                        if (GamePad.ButtonAClicked())
                        {
                            Exit();
                        }

                        else if (GamePad.ButtonBClicked())
                        {
                            areYouSure.RemoveFromAutoDrawSet();
                            areYouSure   = null;
                            World.Paused = false;
                            exiting      = false;
                        }
                    }
                    else
                    {
                        if (!loading)
                        {
                            newLevel = false;
                            newLevel = theLevel.updateLevel(GamePad.Buttons, GamePad.ThumbSticks, hero);
                            if (newLevel)
                            {
                                loading = true;
                                currentLevel++;
                            }
                        }

                        if (loading)
                        {
                            if (currentLevel <= totalLevels)
                            {
                                float x = theLevel.rooms[roomX, roomY].roomOrigin.X + 50f;
                                float y = theLevel.rooms[roomX, roomY].roomOrigin.Y + 28.2f;
                                if (levelScreen == null)
                                {
                                    levelScreen            = new XNACS1Rectangle(new Vector2(x, y), 100f, 56f);
                                    levelScreen.Color      = Color.Black;
                                    levelScreen.Label      = "Level " + currentLevel;
                                    levelScreen.LabelColor = Color.White;
                                    levelScreen.AddToAutoDrawSet();
                                }

                                World.Paused = true;
                                if (tick > 0)
                                {
                                    tick--;
                                }
                                else
                                {
                                    tick = 120;
                                    levelScreen.RemoveFromAutoDrawSet();
                                    levelScreen = null;
                                    theLevel.unloadLevel();
                                    // delete all rooms
                                    //map.removeRoom();
                                    switch (currentLevel)
                                    {
                                    case 1:
                                        path = @"level1.txt";
                                        break;

                                    case 2:
                                        path = @"level2.txt";
                                        break;

                                    case 3:
                                        path = @"level3.txt";
                                        break;

                                    case 4:
                                        path = @"level4.txt";
                                        break;

                                    default:
                                        win = true;
                                        break;
                                    }
                                    s = new StreamReader(path);
                                    XmlDocument xml = new XmlDocument();
                                    theLevel = new Level(ref s, xml);
                                    theLevel.loadInitialRoom(difficulty, hero);
                                    World.Paused = false;
                                    loading      = false;
                                }
                            }

                            else
                            {
                                win = true;
                            }
                        }

                        if (pauseScreen.IsInAutoDrawSet())
                        {
                            pauseScreen.RemoveFromAutoDrawSet();
                            pauseScreen = null;
                            if (map.IsInAutoDrawSet())
                            {
                                map.RemoveFromAutoDrawSet();
                                map.removeRoom();
                                map.Visible = false;
                                // map = null;
                            }
                        }
                    }
                }
                else if (paused && !theLevel.paused)
                {
                    pauseScreen.AddToAutoDrawSet();
                    if (!map.Visible)
                    {
                        map.AddToAutoDrawSet();                        // betania added this
                        map.drawRoom(map.LowerLeft);                   // betania added this

                        map.displayMap(theLevel);                      // betania added

                        map.Visible = true;
                    }
                }

                else
                {
                    if (lostLifeScreen == null)
                    {
                        lostLifeScreen = new XNACS1Rectangle(
                            new Vector2(theLevel.currentOrigin.X + 50f,
                                        theLevel.currentOrigin.Y + ((9f / 16f) * 100) / 2), 100f, 56f);

                        lostLifeScreen.Label      = "Princess Lives Left " + hero.NumTimesCaught;
                        lostLifeScreen.Color      = Color.Black;
                        lostLifeScreen.LabelColor = Color.White;
                        lostLifeScreen.AddToAutoDrawSet();
                    }
                    theLevel.updateLevel(GamePad.Buttons, GamePad.ThumbSticks, hero);
                }


                gameOver = hero.lives < 0;
                //String message = "Number of Lives: " + hero.lives + "   Level Number: " + currentLevel;
                //SetTopEchoColor(Color.White);
                //EchoToTopStatus(message);
                theLevel.rooms[(int)theLevel.currentRoom.X, (int)theLevel.currentRoom.Y].wand.UpdateWand(currentLevel);

                //if (w == null)
                //    w = new Wizard(Vector2.One);
                //w.Update(hero, theLevel.rooms[(int)theLevel.currentRoom.X, (int)theLevel.currentRoom.Y].wand);
            }
            #endregion

            #region game is won or lost
            else if (gameOver || win)
            {
                World.SetWorldCoordinate(new Vector2(0, 0), 100f);
                if (gameOver)
                {
                    #region duplicate check
                    //if (gameOverText == null)
                    //{
                    //    cover = new XNACS1Rectangle(
                    //        new Vector2(50f, ((9f / 16f) * 100f) / 2f), 100, (9f / 16f) * 100f);
                    //    cover.Color = Color.Black;
                    //}
                    #endregion

                    if (gameOverText == null)
                    {
                        gameOverText            = new XNACS1Rectangle(new Vector2(50, 40), 40, 10);
                        gameOverText.Label      = "GAME OVER \n A TO RESTART \n B TO EXIT";
                        gameOverText.Color      = Color.Black;
                        gameOverText.LabelColor = Color.White;
                    }
                }

                else
                {
                    if (winScreen == null)
                    {
                        winScreen = new XNACS1Rectangle(
                            new Vector2(50f, ((9f / 16f) * 100f) / 2f), 100, (9f / 16f) * 100f);
                        winScreen.Color      = Color.Black;
                        winScreen.Label      = "You've escaped the evil wizard's castle!\n You're free at last!";
                        winScreen.LabelColor = Color.White;
                    }
                }

                //unload everything
                if (theLevel != null)
                {
                    theLevel.unloadLevel();
                }
                theLevel = null;

                if (hero != null)
                {
                    hero.RemoveFromAutoDrawSet();
                }

                hero = null;

                if (GamePad.ButtonAClicked())
                {
                    gameOverText.RemoveFromAutoDrawSet();
                    gameOverText = null;
                    cover.RemoveFromAutoDrawSet();
                    cover = null;
                    setupGame();
                }

                if (GamePad.ButtonBClicked())
                {
                    Exit();
                }
            }
            #endregion

            #region game hasn't been started yet


            else if (!gameStarted)
            {
                if (GamePad.ButtonAClicked())
                {
                    if (selected.Center == easy.Center)
                    {
                        difficulty = 1;
                    }
                    else if (selected.Center == medium.Center)
                    {
                        difficulty = 2;
                    }
                    else
                    {
                        difficulty = 3;
                    }
                    hero = new Hero(new Vector2(0f, 0f), difficulty);
                    theLevel.loadInitialRoom(difficulty, hero);
                    //EchoToTopStatus(difficulty.ToString());
                    gameStarted = true;
                    selected.RemoveFromAutoDrawSet();
                }

                if (tick > 0)
                {
                    tick--;
                }
                else
                {
                    if (GamePad.ThumbSticks.Left.Y > 0)
                    {
                        if (selected.Center != easy.Center)
                        {
                            if (selected.Center != medium.Center)
                            {
                                selected.Center = medium.Center;
                            }
                            else
                            {
                                selected.Center = easy.Center;
                            }
                        }
                        tick = 8;
                    }
                    else if (GamePad.ThumbSticks.Left.Y < 0)
                    {
                        if (selected.Center != hard.Center)
                        {
                            if (selected.Center != medium.Center)
                            {
                                selected.Center = medium.Center;
                            }
                            else
                            {
                                selected.Center = hard.Center;
                            }
                        }
                        tick = 8;
                    }
                }
            }
            #endregion
        }
예제 #10
0
        protected override void UpdateWorld()
        {
            if (GamePad.Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            if (GamePad.ButtonAClicked() && mMyBall == null)
            {
                PlayACue("powerup");
                mMyBall = new Ball((World.WorldMax + World.WorldMin) / 2f, RandomFloat(0.5f, 2f));
            }

            if (mMyPaddle != null)
            {
                mMyPaddle.updatePaddle(
                    GamePad.ButtonXClicked(),
                    GamePad.ButtonBClicked(),
                    GamePad.ThumbSticks.Right);
                World.ClampAtWorldBound(mMyPaddle.mPaddle);
            }

            if (mMyBall != null)
            {
                mMyBall.updateBall(
                    GamePad.Buttons.LeftShoulder,
                    GamePad.Buttons.RightShoulder);
                bool collided = mMyBall.mBall.Collided(mMyPaddle.mPaddle);
                if (collided)
                {
                    Score++;
                    mMyBall.PaddleCollide(mMyPaddle);
                }

                BoundCollideStatus collideStatus = World.CollideWorldBound(mMyBall.mBall);

                switch (collideStatus)
                {
                case BoundCollideStatus.CollideBottom:
                    Score = 0;
                    mMyBall.DestroyBall();
                    mMyBall = null;
                    break;

                case BoundCollideStatus.CollideTop:
                    World.ClampAtWorldBound(mMyBall.mBall);
                    mMyBall.WallCollide(true);
                    EchoToTopStatus(collideStatus.ToString());
                    break;

                case BoundCollideStatus.CollideLeft:
                case BoundCollideStatus.CollideRight:
                    World.ClampAtWorldBound(mMyBall.mBall);
                    mMyBall.WallCollide(false);
                    EchoToTopStatus(collideStatus.ToString());
                    break;
                }
            }

            EchoToBottomStatus("Score: " + Score.ToString());
        }
예제 #11
0
        protected override void UpdateWorld()
        {
            if (GamePad.ButtonBackClicked())
            {
                Exit();
            }

            // Update all of them!!
            for (int i = 0; i < kTotalPlots; i++)
            {
                if (i != mCurrentPlot)
                {
                    mPlotPath[i].Update(Vector2.Zero, 0f, 0f, 0f, Vector2.Zero);
                }
            }

            if (GamePad.ButtonXClicked())
            {
                mCurrentPlot++;
                if (mCurrentPlot >= kTotalPlots)
                {
                    mCurrentPlot = 0;
                }
            }

            if (GamePad.ButtonBClicked())
            {
                mPlotPath[mCurrentPlot].ShowPlots = !mPlotPath[mCurrentPlot].ShowPlots;
            }

            if (GamePad.ButtonAClicked())
            {
                mPlotPath[mCurrentPlot].ConstantSpeed = !mPlotPath[mCurrentPlot].ConstantSpeed;
            }

            float deltaW = GamePad.Triggers.Left;

            if (GamePad.Buttons.LeftShoulder == ButtonState.Pressed)
            {
                deltaW -= 0.2f;
            }

            float deltaH = GamePad.Triggers.Right;

            if (GamePad.Buttons.RightShoulder == ButtonState.Pressed)
            {
                deltaH -= 0.2f;
            }

            float deltaR = 0f;

            if (GamePad.Dpad.Up == ButtonState.Pressed)
            {
                deltaR += 2f;
            }
            else if (GamePad.Dpad.Down == ButtonState.Pressed)
            {
                deltaR -= 2f;
            }

            mPlotPath[mCurrentPlot].Update(GamePad.ThumbSticks.Right, deltaW, deltaH, deltaR, GamePad.ThumbSticks.Left);

            EchoToTopStatus("LeftThumb.X/Y adjust Amplitude/Period; Box: Pos-RightStick Size:Left/Right Trigger/Button; Rotate-Dpad Up/Down");
            EchoToBottomStatus("XButton=NextPlot BButton=PlotAreaVisibility ... XCovearge=" + mPlotPath[mCurrentPlot].XCoverage +
                               "   YCoverage=" + mPlotPath[mCurrentPlot].YCoverage + "   ConstantSpeed=" + mPlotPath[mCurrentPlot].ConstantSpeed);
        }