Mercurial > hg > ristipolku
changeset 131:67b2322fda91
Add spawning of animated score elements when player finishes a turn.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 24 Nov 2011 21:11:06 +0200 |
parents | 792bf87886e7 |
children | 333df3e1155b |
files | game/Engine.java |
diffstat | 1 files changed, 60 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/game/Engine.java Thu Nov 24 21:10:13 2011 +0200 +++ b/game/Engine.java Thu Nov 24 21:11:06 2011 +0200 @@ -13,6 +13,8 @@ import javax.imageio.*; import javax.swing.*; import java.util.*; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantReadWriteLock; import java.io.*; import game.*; import javax.sound.sampled.*; @@ -210,6 +212,9 @@ int currX, currY, currPoint; Sound sndPlaced; + + private final ReentrantReadWriteLock pointLock = new ReentrantReadWriteLock(); + private ArrayList<AnimatedPointElement> pointElems; public GameBoard(IDMPoint pos, float ps) { @@ -218,6 +223,8 @@ // sndPlaced = G.smgr.getSound("sounds/placed.wav"); + pointElems = new ArrayList<AnimatedPointElement>(); + startNewGame(); } @@ -259,6 +266,21 @@ pscale - pscale / 10); } + Lock read = pointLock.readLock(); + read.lock(); + try + { + for (AnimatedPointElement elem : pointElems) + { + elem.paint(g); + } + } + finally + { + read.unlock(); + } + + if (!flagGameOver) { if (nextPiece != null) @@ -308,6 +330,26 @@ { board[x][y].animate(time); } + + Lock write = pointLock.writeLock(); + write.lock(); + try + { + ArrayList<AnimatedPointElement> tmp = new ArrayList<AnimatedPointElement>(); + + for (AnimatedPointElement elem : pointElems) + { + elem.animate(time); + if (elem.active) + tmp.add(elem); + } + + pointElems = tmp; + } + finally + { + write.unlock(); + } } public void pieceRotate(Piece.RotateDir dir) @@ -423,6 +465,24 @@ { connections++; finished = pieceCheck(board[currX][currY]); + + if (!finished) + { + Lock write = pointLock.writeLock(); + write.lock(); + try + { + pointElems.add(new AnimatedPointElement( + new IDMPoint( + getScaledX() + ((currX + 0.5f) * pscale), + getScaledY() + ((currY + 0.5f) * pscale)), + "" + connections)); + } + finally + { + write.unlock(); + } + } } else {