Newer
Older
IrisServer / src / main / java / com / ntlab / irisserver / entities / DrawingController.java
package com.ntlab.irisserver.entities;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DrawingController {

    private int stage = 0;
    private int maxstage;

    private Game game;
    private Map<Member, List<Integer>> assignments;
    private List<Member> members;
    private IStateListener stateListener;


    public DrawingController(IStateListener stateListener, List<Member> members, Game game) {

        this.members = members;
        this.stateListener = stateListener;
        this.game = game;
        assignments = game.getAssignments();

        //16枚の絵をそろえるために必要なステージ数を計算 16/人数のはすう 切り上げ
        maxstage = (16 + members.size() - 1)/members.size();
    }

    //全員の絵がアップロードされたときに、ステージ情報を更新する
    public void update(){

        boolean canUpdate = true;

        //ニックネームからdnoが分かるので、全員文の絵が書き終わっているかを確認
        for(Member mem :members) {
            int dno = getDno(mem.getNickname());
            Drawing drawing = game.getDrawing(dno);

            //まだ描けていない絵があればステージ変更しない
            if(drawing.getIsDrawn() == false){
                canUpdate = false;
            }
        }

        if(canUpdate) {
            stage += 1;

            //ゲームに必要な枚数がそろうと、roomのstateを「お絵描き中」から「ゲーム中」に変更
            if(stage == maxstage){
                stateListener.changeState();
            }
        }
    }

    //pathパラメーターを引数にするので、memberではなくてString
    //nicknameから書いてほしいdnoを返す
    public int getDno(String nickname) {
        List<Integer> dnolist = assignments.get(nickname);
        int dno = dnolist.get(stage);
        return dno;
    }

}