diff --git a/src/main/java/com/ntlab/irisserver/entities/DrawingController.java b/src/main/java/com/ntlab/irisserver/entities/DrawingController.java index 0ef55d2..13a7222 100644 --- a/src/main/java/com/ntlab/irisserver/entities/DrawingController.java +++ b/src/main/java/com/ntlab/irisserver/entities/DrawingController.java @@ -17,6 +17,16 @@ //ニックネームからメンバーを特定するマップ private Map membersMap= new HashMap<>(); + private long startTime; //ステージの開始時刻 + private long nowTime; //現在の時刻 + private int drawingTime; //お絵描きのタイムリミット + private int countdown; //あと何秒でタイムリミットになるか + private boolean isDrawingTimer; //タイマーを使うかどうか + + //描いている最中にタイムリミット(countdown==0)がくれば、描いている途中のものをputさせる。既に描き終わっている人は何もしない + //時間が0になったときに、描き終わっていない人は「描いている最中の絵をput」する。(クライアントサイド) デバッグがしにくい assingmentのgetで見れるようにする + //getdnoの番号が変わっていたら、「新しい絵を描く」 + public DrawingController(IStateListener stateListener, List members, Game game) { @@ -33,6 +43,13 @@ membersMap.put(nick,mem); } + //お絵描きのタイムリミットを記録 + Settings setting = game.getSettings(); + startTime = System.currentTimeMillis(); + this.drawingTime = setting.getDrawingTimerTimes(); + this.isDrawingTimer = setting.isDrawingTimer(); + + } //絵がアップロードされたときに、ステージを進めるか確認する @@ -55,20 +72,54 @@ if(canUpdate) { stage += 1; - //ゲームに必要な枚数がそろうと、roomのstateを「お絵描き中」から「ゲーム中」に変更 + //タイマーをリセット + startTime = System.currentTimeMillis(); + countdown = drawingTime; + + //ゲームに必要な枚数がそろうと、roomのstateを「お絵描き中2」から「ゲーム中3」に変更 if(stage == maxstage){ stateListener.changeState(); } } } + //お絵描き中のタイマーを更新 + private void updateTimer(){ + //経過した時間を計算(秒) + nowTime = System.currentTimeMillis(); + int count = ((int)nowTime - (int)startTime)/1000; + + if(drawingTime - count > 0){ + countdown = drawingTime - count; + }else{ + countdown = 0; + } + + + } + + //pathパラメーターを引数にするので、memberではなくてString //nicknameから書いてほしいdnoを返す - public int getDno(String nickname) { + public Integer getDno(String nickname) { Member mem = membersMap.get(nickname); + if(mem == null){ + return null; + } List dnoList = assignments.get(mem); int dno = dnoList.get(stage); return dno; } + //これはどこのRESTで使う? assignmentでもいいけど、名前と機能が一致しない assignmentの下にtimerを作ってもいい + public Integer getCountdown(){ + if(isDrawingTimer){ + updateTimer(); + return countdown; + }else{ + return null; + } + + } + }