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; } } } }
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; } } } } } }
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(); } }
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(); }