- 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 GameMemberActivity extends AppCompatActivity {
- private GameViewModel gameViewModel;
- //操作可能かどうかを記録。これがfalseの時は何のボタンを押すこともできない。
- //時間があればオフラインの動作はできるようにしたい。
- private boolean isActive = false;
- private String myTeam;
- //赤チームの「ヒント入力」からスタート
- private String currentTeam = "r";
- private int turnState = 0;//0:ヒント入力,1:カード選択
- //ヒントの情報
- private String hint = "a";
- private Integer hintMax = 0;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_member_game);
- // Fragmentを作成します
- DrawingCardFragment fragment = new DrawingCardFragment();
- GamePlayerListFragment RedPlayerList = new GamePlayerListFragment("r");
- GamePlayerListFragment BluePlayerList = new GamePlayerListFragment("b");
- // 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, RedPlayerList);
- transaction.add(R.id.bluePlayerListContainer,BluePlayerList);
- // 最後にcommitを使用することで変更を反映します
- transaction.commit();
- //Irisから必要な情報を取得
- Iris iris = (Iris) this.getApplication();
- String rid = iris.getRid();
- String nickName = iris.getNickname();
- myTeam = iris.getTeam();
- //viewModelに必用な情報をセット
- gameViewModel= new ViewModelProvider(this).get(GameViewModel.class);
- gameViewModel.setRid(rid);
- //ボタンの情報を入力
- buttonProcesses();
- //自分が赤チームマスターの場合はヒントが入力可能
- if(myTeam == null) {
- System.out.println(("myteamがnullです"));
- }else if(myTeam.equals("r")){
- isActive = true;
- }
- //タイマースタート呼び出し
- gameViewModel.start(500,iris);
- //ヒントの変更を監視
- gameViewModel.getHintLiveData().observe(this, new Observer<String>() {
- @Override
- public void onChanged(String new_Hint) {
- hint = new_Hint;
- }
- });
- gameViewModel.getMaxLiveData().observe(this, new Observer<Integer>() {
- @Override
- public void onChanged(Integer new_HintMax) {
- hintMax = new_HintMax;
- }
- });
- //どちらのターンかを監視
- gameViewModel.getTurnsLiveData().observe(this, new Observer<String>() {
- @Override
- public void onChanged(String new_currentTeam) {
- //チームの情報を更新
- currentTeam = new_currentTeam;
- //操作できるかを判断する。
- isActive = CheckActivity();
- }
- });
- //「ヒント入力」か「カード選択」かを監視
- gameViewModel.getTurnStateLiveData().observe(this, new Observer<Integer>() {
- @Override
- public void onChanged(Integer new_turnState) {
- //チームの情報を更新
- turnState = new_turnState;
- //ヒントの情報を反映
- EditText Hint = findViewById(R.id.GameHint);
- EditText HintMax = findViewById(R.id.GameHintMax);
- if(new_turnState == 0){
- //「ヒント入力」になったときは古いヒントを消す
- Hint.getEditableText().clear();
- HintMax.getEditableText().clear();
- }else{
- //「カード選択」のときは新しいヒントを表示する
- Hint.setText(hint);
- HintMax.setText(hintMax.toString());
- }
- //操作できるかを判断する。
- isActive = CheckActivity();
- }
- });
- //触れないボタンを設定
- }
- public void buttonProcesses() {
- Button FinishGuessButton = (Button) findViewById(R.id.finishGuessButton);
- //推測終了を押した時に、ターン終了を通知
- FinishGuessButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (!isActive) {return;}//アクティブのときだけボタンを押せる}
- //次のターンに行くようにする
- gameViewModel.sendTurnState();
- }
- });
- }
- //操作可能かどうかを調べる関数。masterとかturnをオブザーブしておいて、変更があれば反映する。
- private boolean CheckActivity(){
- boolean isActive = false;
- //自分のチームのターンで、かつ「ヒント入力」時間の場合は行動可能
- if(currentTeam.equals(myTeam) && turnState == 1){
- isActive = true;
- }
- //非アクティブであれば推測終了の入力を禁止する
- Button FinishGuessButton = (Button) findViewById(R.id.finishGuessButton);
- if(isActive == false){
- FinishGuessButton.setFocusable(false);
- }else{
- FinishGuessButton.setFocusable(true);
- }
- return isActive;
- }
- }