package org.ntlab.irisclient;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.CompoundButton;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.ToggleButton;
import org.ntlab.irisclient.models.Member;
import org.ntlab.irisclient.viewmodels.DrawingStateViewModel;
import java.util.List;
public class DrawingActivity extends AppCompatActivity implements View.OnClickListener {
private DrawingCanvas drawingCanvas;
private DrawingStateViewModel drawingStateViewModel;
private List<String> keywordList;
private Integer drawingNum;
private Integer drawingNow = 0;
private Integer nowTime;
private Integer alphaNow=255; //今のペンの透明度
private ToggleButton okToggleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawing);
//getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//ステータスバー非表示
//Irisから必要な情報を取得
Iris iris = (Iris) this.getApplication();
Boolean bMaster = iris.isMaster();
List<Member> memberList = iris.getMemberList();
drawingStateViewModel= new ViewModelProvider(this).get(DrawingStateViewModel.class);
findViewById(R.id.clearButton).setOnClickListener(this);//画面クリアボタン
findViewById(R.id.blackPenButton).setOnClickListener(this);
findViewById(R.id.eraserButton).setOnClickListener(this);
//完了ボタン
okToggleButton = (ToggleButton) findViewById(R.id.toggleButton);
okToggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
okToggleButton.setTextOn("完了");
drawingCanvas.setEnabled(true);
drawingCanvas.setClickable(true);
drawingCanvas.setColor(Color.BLACK);
} else {
okToggleButton.setTextOff("描き直す");
drawingCanvas.setEnabled(false);
drawingCanvas.setClickable(false);
drawingCanvas.setColor(Color.TRANSPARENT);
//putDrawing
drawingCanvas.setDrawingCacheEnabled(true);//キャッシュを取得する設定にする
drawingCanvas.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(drawingCanvas.getDrawingCache());
drawingCanvas.destroyDrawingCache();//既存のキャッシュをクリアする
drawingStateViewModel.putDrawing(bitmap);
}
}
});
TextView textPenSize =(TextView)findViewById(R.id.penSizeText);
TextView textAlpha =(TextView)findViewById(R.id.alphaText);
textPenSize.setText("サイズ: 10%");
textAlpha.setText("透明度: 255%");
//筆の大きさを変えるシークバー
SeekBar seekbar = findViewById(R.id.seekBar);
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {//変更中
drawingCanvas.setPenWidth(i);
textPenSize.setText("サイズ: "+ i + "%");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {//変更開始時
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {//変更終了時
}
});
//筆の透明度を変えるシークバー
SeekBar seekbar2 = findViewById(R.id.seekBar2);
seekbar2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {//変更中
drawingCanvas.setAlpha(i);
textAlpha.setText("透明度: "+ i + "%");
alphaNow = i;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {//変更開始時
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {//変更終了時
}
});
TextView textKeyword =(TextView)findViewById(R.id.keywordText);//keywordのTextView
TextView textMemberNum = (TextView)findViewById(R.id.drawingNowText);//残りのイラスト枚数のTextView
TextView timerText = (TextView)findViewById(R.id.timerText);//TimerのTextView
drawingCanvas = (DrawingCanvas) findViewById(R.id.drawingCanvas);
//残りのイラスト枚数の表示
//drawingNum = 16 / 2; // 一人あたりが描く枚数(テスト部屋用,部屋作成からスタートする場合はこの行をコメントアウトして ↓ ふたつのコメントを解除)
drawingNum = 16 / memberList.size(); // 一人あたりが描く枚数
if (16 % memberList.size() != 0) drawingNum++; // 余りが出た場合プラス1枚
//getKeywords
drawingStateViewModel.getKeywords().observe(this, new Observer<List<String>>(){
@Override
public void onChanged(List<String> keywords) {
keywordList = keywords;
}
});
//getDno
drawingStateViewModel.getDno().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer dno) {
String keyword = keywordList.get(dno);
textKeyword.setText(keyword);
drawingNow++;
textMemberNum.setText(""+drawingNow+"/"+drawingNum);
drawingCanvas.clearCanvas();
okToggleButton.setChecked(true);
}
});
//getState
drawingStateViewModel.getState().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer state) {
Class nextActivity = GameMemberActivity.class;
if(bMaster) nextActivity = GameMasterActivity.class;//自分がMasterならMaster用のGame画面へ遷移
//stateが変わったらゲーム画面へ遷移
if(state == 3) {
Intent intent = new Intent(DrawingActivity.this, nextActivity);
startActivity(intent);
}
}
});
//getTimer
drawingStateViewModel.getTimer().observe(this, new Observer<Integer>(){
@Override
public void onChanged(Integer time) {
nowTime = time;
timerText.setText(nowTime+"");
if(nowTime == 0){//タイマーが0秒になったら強制put
//putDrawing
drawingCanvas.setDrawingCacheEnabled(true);//キャッシュを取得する設定にする
drawingCanvas.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(drawingCanvas.getDrawingCache());
drawingCanvas.destroyDrawingCache();//既存のキャッシュをクリアする
drawingStateViewModel.putDrawing(bitmap);
}
}
});
//タイマースタート呼び出し
drawingStateViewModel.start(500,(Iris)getApplication());
}
@Override
public void onClick(View v){
if(okToggleButton.isChecked()) {//完了ボタンが押されていないときだけボタンが使える
if (v.getId() == R.id.clearButton) {//clearButtonが押されたときの処理
drawingCanvas.clearCanvas();
} else if (v.getId() == R.id.eraserButton) {//eraserButtonが押されたときの処理
drawingCanvas.setColor(Color.WHITE);
v.setBackgroundColor(Color.rgb(173,216,230));
findViewById(R.id.blackPenButton).setBackgroundColor(Color.rgb(211,211,211));
findViewById(R.id.blackPenButton).setScaleX(0.9f);
findViewById(R.id.blackPenButton).setScaleY(0.9f);
findViewById(R.id.eraserButton).setScaleX(1.0f);
findViewById(R.id.eraserButton).setScaleY(1.0f);
} else if (v.getId() == R.id.blackPenButton) {
drawingCanvas.setColor(Color.BLACK);
drawingCanvas.setAlpha(alphaNow);
v.setBackgroundColor(Color.rgb(173,216,230));
findViewById(R.id.eraserButton).setBackgroundColor(Color.rgb(211,211,211));
findViewById(R.id.eraserButton).setScaleX(0.9f);
findViewById(R.id.eraserButton).setScaleY(0.9f);
findViewById(R.id.blackPenButton).setScaleX(1.0f);
findViewById(R.id.blackPenButton).setScaleY(1.0f);
}
}
}
}