package com.znv.linkup.core.status; import java.util.Timer; import java.util.TimerTask; import com.znv.linkup.core.config.GameMode; /** * 游戏时间处理 * * @author yzb * */ class GameTime { public GameTime(GameMode mode) { this(mode, 0, null); } public GameTime(int totalTime) { this(GameMode.Level, totalTime, null); } public GameTime(GameMode mode, int totalTime, IGameStatus listener) { this.mode = mode; this.totalTime = totalTime; // 抵消第一次tick if (mode == GameMode.Level) { this.gameTime = totalTime + 1; } else if (mode == GameMode.Time || mode == GameMode.ScoreTask || mode == GameMode.TimeTask || mode == GameMode.Star) { this.gameTime = -1; } this.listener = listener; } /** * 计时开始 */ public void start() { if (mode == GameMode.Level || mode == GameMode.Time || mode == GameMode.ScoreTask || mode == GameMode.TimeTask || mode == GameMode.Star) { timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { timerTick(); } }, 0, 1000); } else { timer = null; } } private void timerTick() { if (mode == GameMode.Level) { if (gameTime < 1) { gameTime = 0; stop(); // 时间用完时游戏失败 if (listener != null) { listener.onGameFail(); } } else { gameTime -= 1; if (listener != null) { listener.onTimeChanged(gameTime); } } } else if (mode == GameMode.Time || mode == GameMode.ScoreTask || mode == GameMode.TimeTask || mode == GameMode.Star) { gameTime += 1; if (listener != null) { listener.onTimeChanged(gameTime); } } } /** * 计时停止 */ public void stop() { if (timer != null) { timer.cancel(); timer = null; } } /** * 增加游戏时间 * * @param seconds * 增加的时间数,单位秒 */ public void addTime(int seconds) { // 只有闯关模式增加游戏时间 if (mode == GameMode.Level) { gameTime += seconds; if (gameTime > totalTime) { gameTime = totalTime; } if (listener != null) { listener.onTimeChanged(gameTime); } } } /** * 获取游戏时间 * * @return 游戏时间 */ public int getGameTime() { return gameTime; } private Timer timer = null; private int gameTime; private int totalTime; private GameMode mode = null; private IGameStatus listener; }