Newer
Older
IrisClient / app / src / main / java / org / ntlab / irisclient / GameMasterActivity.java
package org.ntlab.irisclient;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import org.ntlab.irisclient.entities.TurnJson;
import org.ntlab.irisclient.models.Game;
import org.ntlab.irisclient.viewmodels.DrawingStateViewModel;
import org.ntlab.irisclient.viewmodels.GameViewModel;


public class GameMasterActivity extends AppCompatActivity{

    private GameViewModel gameViewModel;

    //操作可能かどうかを記録。これがfalseの時は何のボタンを押すこともできない。
    //時間があればオフラインの動作はできるようにしたい。
    private boolean IsActive = false;

    //Irisから必要な情報を取得
    Iris iris = (Iris) this.getApplication();
    private String myTeam = iris.getTeam();

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game_master);

      // Fragmentを作成します
        DrawingCardFragment fragment = new DrawingCardFragment();
        GamePlayerListFragment RedPlayerListFragment = new GamePlayerListFragment();
        GamePlayerListFragment BluePlayerListFragment = new GamePlayerListFragment();

        // Fragmentの追加や削除といった変更を行う際は、Transactionを利用します
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        // 新しく追加を行うのでaddを使用します
        // 他にも、よく使う操作で、replace removeといったメソッドがあります
        // メソッドの1つ目の引数は対象のViewGroupのID、2つ目の引数は追加するfragment
        transaction.add(R.id.container, fragment);
       /* transaction.add(R.id.RedPlayerListContainer, RedPlayerListFragment);
        transaction.add(R.id.BluePlayerListContainer, BluePlayerListFragment);*/
        // 最後にcommitを使用することで変更を反映します
        transaction.commit();

        //Irisから必要な情報を取得
        Iris iris = (Iris) this.getApplication();
        String rid = iris.getRid();
        String nickName = iris.getNickname();

        //viewModelに必用な情報をセット
        gameViewModel= new ViewModelProvider(this).get(GameViewModel.class);
        gameViewModel.setRid(rid);

        //ここでカードとかメンバーを表示する

        //ボタンの情報を入力
        buttonProcesses();

        //自分が赤チームマスターの場合はヒントが入力可能
        if(myTeam.equals("r")){
            IsActive = true;
        }

        //タイマースタート呼び出し
        gameViewModel.start(500,iris);

        gameViewModel.getTurnLiveData().observe(this, new Observer<TurnJson>() {
            @Override
            public void onChanged(TurnJson turnJson) {

                //turnJsonから情報を貰ってきて、操作できるのかどうかとかを判断する。
                IsActive = CheckActivity(turnJson);

                //時間があれば何をしてほしいのかのアナウンスを入れる
                //時間があれば背景の色を変える

            }
        });
    }

    public void buttonProcesses(){
        Button SendHintButton = (Button) findViewById(R.id.SendHint);

        SendHintButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                EditText Hint = findViewById(R.id.GameHint);
                EditText HintMax = findViewById(R.id.GameHintMax);

                //テキストを適した変数に変更
                String hint = Hint.getText().toString();
                Integer hintMax;
                if(HintMax != null){
                    hintMax = Integer.parseInt(HintMax.getText().toString());
                }else{
                    hintMax = null;
                }


                //ニックネームまたは部屋番号が入力されていない場合エラーメッセージを表示する
                if (hint.isEmpty()) {
                    Hint.setError("ヒントが入力されていません");
                } else if (hintMax == null) {
                    HintMax.setError("数字が入力されていません");
                } else {
                    //ビューモデルにhintとhintMaxを送信する。まとめて送信できるようになるかも知れないので、いったん放置
                    gameViewModel.putHint(hint,hintMax);                                                    //マスターブランチに修正が入ったらコメントアウトを外す
                }

            }
        });
    }

    //操作可能かどうかを調べる関数。masterとかturnをオブザーブしておいて、変更があれば反映する。
    public boolean CheckActivity(TurnJson turnjson){

        IsActive = false;

        //最新のゲームの状況を取得
        String CurrentTeam = turnjson.getTeam();
        int turnState = turnjson.getTurnstate();

        //自分のチームのターンで、かつ「ヒント入力」時間の場合は行動可能
        if(CurrentTeam.equals(myTeam) && turnState == 0){
            IsActive = true;
        }

        return IsActive;
    }

}