@Override public boolean onTouchEvent(MotionEvent event) { // Only process if game is active if (GameActive && !GamePaused) { // If the next obstacle is not a tap type check for swipe if (nearestObstacle.getType() != Obstacle.TYPE.T_TAP && FingerDown == false) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { InitialPos.Set(event.getX(), event.getY()); } break; case MotionEvent.ACTION_MOVE: LastPos.Set(event.getX(), event.getY()); break; case MotionEvent.ACTION_UP: DirectionVector.Set(LastPos.operatorMinus(InitialPos)); break; } } // else check for tap else { if (event.getAction() == MotionEvent.ACTION_DOWN) { FingerDown = true; Tapped = true; } else if (event.getAction() == MotionEvent.ACTION_UP) { FingerDown = false; } } // Check if touch pause button if (event.getAction() == MotionEvent.ACTION_DOWN) { // If touch pause button if (CheckTouch( event.getX(), event.getY(), Pause_button.getPosX(), Pause_button.getPosY(), (int) Pause_button.getPosX() + Pause_button.getImgWidth(), (int) Pause_button.getPosY() + Pause_button.getImgHeight())) { GamePaused = true; } } return true; } else if (GameActive && GamePaused) { if (event.getAction() == MotionEvent.ACTION_DOWN) { if (CheckTouch( event.getX(), event.getY(), Unpause_button.getPosX(), Unpause_button.getPosY(), (int) Unpause_button.getPosX() + Unpause_button.getImgWidth(), (int) Unpause_button.getPosY() + Unpause_button.getImgHeight())) { GamePaused = false; } } return true; } // To process other taps while game is not active else { if (event.getAction() == MotionEvent.ACTION_DOWN) { // If touch restart button if (CheckTouch( event.getX(), event.getY(), Restart_button.getPosX(), Restart_button.getPosY(), (int) Restart_button.getPosX() + Restart_button.getImgWidth(), (int) Restart_button.getPosY() + Restart_button.getImgHeight())) { // Restart the game soundManager.PlaySFX(); Reset(); } // If touch mainmenu button else if (CheckTouch( event.getX(), event.getY(), Mainmenu_button.getPosX(), Mainmenu_button.getPosY(), (int) Mainmenu_button.getPosX() + Mainmenu_button.getImgWidth(), (int) Mainmenu_button.getPosY() + Mainmenu_button.getImgHeight())) { soundManager.PlaySFX(); Intent intent = new Intent(); intent.setClass(getContext(), Mainmenu.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); getContext().startActivity(intent); } } return true; } }
// Update method to update the game play public void update(float dt, float fps) { FPS = fps; switch (GameState) { case 0: { // Only if game is not paused if (!GamePaused) { bgX -= ScrollSpeed * dt; // Speed of background scrolling // Reset once reaches 0 if (bgX < -ScreenWidth) { bgX = 0; } // Only when game is active we update the following if (GameActive) { SpawnTimer += dt; timer += dt; if (timer > 5.f) { ScrollSpeed += 100; timer = 0; } if (SpawnTimer > SpawnRate) { FetchObstacle(); SpawnTimer = 0.f; } stickman_anim.update(System.currentTimeMillis()); // Adventure mode if (GameMode == 1) { Progress_bar.setPosX(Progress_bar.getPosX() + BarSpeed * 0.015f); if (Progress_bar.getPosX() > DestinationPoint) { Win = true; GameActive = false; } } } // Feedback for game over if (GameActive == false) { if (UpdateHighscore && GameMode == 0) { Vector<Integer> highscores = appPrefs.getHighscore(); Vector<Integer> updatedscores = new Vector<Integer>(); boolean scoreentered = false; int index = 0; for (int i = 0; i < highscores.size(); ++i) { if (score > highscores.get(index) && !scoreentered) { updatedscores.addElement(score); scoreentered = true; } else { updatedscores.addElement(highscores.get(index)); ++index; } } for (int i = 0; i < updatedscores.size(); ++i) { appPrefs.setHighscore(i, updatedscores.get(i)); } UpdateHighscore = false; } // Vibration feedback vibrateTime += dt; if (vibrateTime > MaxVibrateTime) { stopVibrate(); } else { startVibrate(); } } if (nearestObstacle.isActive()) { // Detecting user tap for tapping obstacle if (nearestObstacle.getType() == Obstacle.TYPE.T_TAP && Tapped == true) { score += 10; nearestObstacle.setActive(false); DirectionVector.SetZero(); Tapped = false; } // Detecting user swipe direction for direction obstacle else if (DirectionVector.IsZero() == false && Obstacle.fromInteger(ProcessSwipe(DirectionVector)) == nearestObstacle.getType()) { score += 10; nearestObstacle.setActive(false); DirectionVector.SetZero(); } DirectionVector.SetZero(); } // Updating game elements for (int i = 0; i < obstacleList.length; ++i) { if (obstacleList[i].isActive()) { obstacleList[i].setPosX(obstacleList[i].getPosX() - ScrollSpeed * dt); // if out of screen if (obstacleList[i].getPosX() < 0) { obstacleList[i].setActive(false); } // Only if game is active we check these collisions if (GameActive == true) { // Player collision against obstacles if (CheckCollision( stickman_anim.getX(), stickman_anim.getY(), stickman_anim.getSpriteWidth(), stickman_anim.getSpriteHeight(), (int) obstacleList[i].getPosX(), (int) obstacleList[i].getPosY(), obstacleList[i].getImgWidth(), obstacleList[i].getImgHeight())) { obstacleList[i].setActive(false); GameActive = false; // Game status set to false // Enable buttons Restart_button.setActive(true); Mainmenu_button.setActive(true); } // Get nearest obstacle if (nearestObstacle.isActive() == false) { nearestObstacle = obstacleList[i]; } else if (obstacleList[i].getPosX() < nearestObstacle.getPosX()) { nearestObstacle = obstacleList[i]; } } } } } } break; } }