001 /** 002 * TimerBox keeps track of Timer-related tasks. It has a separate Stopwatch for 003 * the black and white players. 004 */ 005 006 package ui; 007 008 import java.util.Timer; 009 010 import core.Color; 011 012 013 public class TimerBox { 014 private Stopwatch whiteWatch; 015 private Stopwatch blackWatch; 016 private GameThread gameThread; 017 private Timer timer; 018 019 /** 020 * Constructor. 021 */ 022 public TimerBox(GameThread g) { 023 gameThread = g; 024 } 025 026 /** 027 * Resets the TimerBox's Stopwatches. Used when starting or loading a game. 028 */ 029 public void setWatches(int whiteTime, int blackTime) { 030 if (timer != null) { 031 timer.cancel(); 032 } 033 if (whiteWatch != null) { 034 whiteWatch.removeStopwatchListener(gameThread); 035 } 036 if (blackWatch != null) { 037 blackWatch.removeStopwatchListener(gameThread); 038 } 039 040 whiteWatch = new Stopwatch(whiteTime); 041 blackWatch = new Stopwatch(blackTime); 042 043 timer = new Timer(); 044 timer.scheduleAtFixedRate(whiteWatch, 100, 100); 045 timer.scheduleAtFixedRate(blackWatch, 100, 100); 046 047 whiteWatch.addStopwatchListener(gameThread); 048 blackWatch.addStopwatchListener(gameThread); 049 } 050 051 /** 052 * Switches the clock to the specified color. If the argument is Color.NONE, 053 * stops both watches. 054 */ 055 public void switchClockTo(Color color) { 056 if (color == Color.WHITE) { 057 blackWatch.stop(); 058 whiteWatch.start(); 059 } 060 else if (color == Color.BLACK) { 061 whiteWatch.stop(); 062 blackWatch.start(); 063 } 064 else { 065 blackWatch.stop(); 066 whiteWatch.stop(); 067 } 068 } 069 070 /** 071 * Returns the Stopwatch object keeping track of white's time left. 072 */ 073 public Stopwatch getWhiteWatch() { 074 return whiteWatch; 075 } 076 077 /** 078 * Returns the Stopwatch object keeping track of black's time left. 079 */ 080 public Stopwatch getBlackWatch() { 081 return blackWatch; 082 } 083 }