Example #1
0
 public synchronized void activateBonus(float x, float y) {
   synchronized (m_bonusBalls) {
     for (BonusBall b : m_bonusBalls) {
       if (b.contains(x, y)) {
         b.setTriggered(true);
         break;
       }
     }
   }
 }
Example #2
0
  public void fixCollisions() {

    synchronized (m_bonusBalls) {
      for (int i = 0; i < m_bonusBalls.size() - 1; i++) {
        m_bonusBalls.get(i).moveOnOverlap(m_bonusBalls, i + 1, m_bonusBalls.size());
      }

      synchronized (m_balls) {
        for (Ball ball : m_balls) {
          ball.moveOnOverlap(m_bonusBalls, 0, m_bonusBalls.size());
        }
      }
    }

    synchronized (m_bonusBalls) {
      for (BonusBall ball : m_bonusBalls) {
        synchronized (m_barriers) {
          for (Barrier barrier : m_barriers) {
            if (ball.moveOnOverlap(barrier)) break;
          }
        }
      }
    }

    synchronized (m_balls) {
      for (Ball ball : m_balls) {
        synchronized (m_barriers) {
          for (Barrier barrier : m_barriers) {
            if (barrier.isPassed()) continue;

            if (!(Barrier.hasColor() && barrier.color() == ball.color())) {
              if (ball.moveOnOverlap(barrier)) break;
            }
          }
        }
      }
    }
  }
Example #3
0
  private void updateBonusBalls() {
    Iterator<BonusBall> it = m_bonusBalls.iterator();
    BonusBall b;
    while (it.hasNext()) {
      b = it.next();

      if (b.isExecuted() || b.isOut() || b.isTriggered() || b == null) {
        it.remove();
      }

      if (b.isTriggered() && (!b.isExecuted())) {
        b.execute();
        continue;
      }

      b.drop();
    }
  }
Example #4
0
  public void run() {

    // game loop
    while (m_run) {
      try {
        Thread.sleep(m_sleep);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }

      // if view isn't loaded yet, go to beginning
      if (m_spaceBetweenRectangles == 0) continue;

      if (mPaused) waitOnPause();

      synchronized (m_balls) {
        updateBalls();
      }

      synchronized (m_bonusBalls) {
        updateBonusBalls();
      }

      moveScenario();
      fixCollisions();
      updateScorePoints();

      m_view.postInvalidate();
    }

    Score.onSave(m_gameActivity.getBaseContext(), (int) m_score);

    if (Score.score.get(0) == m_score) playSound("win");
    else playSound("gameover");

    synchronized (m_barriers) {
      m_barriers.clear();
    }
    synchronized (m_balls) {
      m_balls.clear();
    }
    synchronized (m_bonusBalls) {
      BonusBall.runAll = false;

      for (BonusBall ball : m_bonusBalls) {
        if (ball.getThread() != null && ball.getThread().isAlive()) {
          ball.terminateAndReset();
          try {
            ball.getThread().join();
          } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        }
      }

      m_bonusBalls.clear();
    }

    synchronized (m_newScorePoints) {
      m_bonusBalls.clear();
    }

    synchronized (m_nameToMediaPlayer) {
      Iterator<Entry<String, MediaPlayer>> it = m_nameToMediaPlayer.entrySet().iterator();

      while (it.hasNext()) {
        Map.Entry<String, MediaPlayer> entry = (Entry<String, MediaPlayer>) it.next();
        if (!entry.getValue().isPlaying()) {
          entry.getValue().release();
          it.remove();
        }
      }
    }

    System.gc();

    m_view.showGameOverDialog();
  }