package org.ntlab.irisclient;
import androidx.appcompat.app.AppCompatActivity;
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);
//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);
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;
}
}