package fr.ynerant.tarot.ui.newgame; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.Spinner; import android.widget.SpinnerAdapter; import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; import java.util.ArrayList; import java.util.HashSet; import java.util.Locale; import fr.ynerant.tarot.Game; import fr.ynerant.tarot.MainActivity; import fr.ynerant.tarot.Player; import fr.ynerant.tarot.R; import fr.ynerant.tarot.ui.home.HomeFragment; public class NewGameFragment extends Fragment { private NewGameViewModel newGameViewModel; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { newGameViewModel = ViewModelProviders.of(this).get(NewGameViewModel.class); final View root = inflater.inflate(R.layout.fragment_new_game, container, false); if (PreferenceManager.getDefaultSharedPreferences(MainActivity.INSTANCE).getString("token", null) == null) { //noinspection ConstantConditions getFragmentManager().beginTransaction().replace(R.id.nav_host_fragment, new HomeFragment(), "Se connecter").commit(); return root; } TextView textView = root.findViewById(R.id.text_new_game); textView.setText(R.string.menu_new_game); final SeekBar nb_players = root.findViewById(R.id.nb_players); final Spinner player1 = root.findViewById(R.id.player1); final Spinner player2 = root.findViewById(R.id.player2); final Spinner player3 = root.findViewById(R.id.player3); final Spinner player4 = root.findViewById(R.id.player4); final Spinner player5 = root.findViewById(R.id.player5); final Spinner player6 = root.findViewById(R.id.player6); final LinearLayout player4_layout = root.findViewById(R.id.player4_layout); final LinearLayout player5_layout = root.findViewById(R.id.player5_layout); final LinearLayout player6_layout = root.findViewById(R.id.player6_layout); //noinspection ConstantConditions ArrayAdapter adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, new ArrayList<>(Player.getAllPlayers())); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); player1.setAdapter(adapter); player2.setAdapter(adapter); player3.setAdapter(adapter); player4.setAdapter(adapter); player5.setAdapter(adapter); player6.setAdapter(adapter); final Spinner[] spinners = new Spinner[]{player1, player2, player3, player4, player5, player6}; final SeekBar attack_points = root.findViewById(R.id.attack_score); final SeekBar bet = root.findViewById(R.id.bet); final SeekBar nb_ends = root.findViewById(R.id.nb_ends); final Switch chelem_announced = root.findViewById(R.id.chelem_announced); final Switch chelem_realized = root.findViewById(R.id.chelem_realized); final SeekBar little_end = root.findViewById(R.id.little_end); final SeekBar handle = root.findViewById(R.id.handle); final Runnable updateScore = new Runnable() { @Override public void run() { TextView textView = root.findViewById(R.id.nb_points); Game game = new Game(); game.attackScore = attack_points.getProgress(); game.type = Game.GameType.getGameType(nb_players.getProgress() + 3); game.players = new HashSet<>(); for (int i = 0; i < 3 + nb_players.getProgress(); ++i) { game.players.add((Player) spinners[i].getSelectedItem()); } game.bet = Game.Bet.values()[bet.getProgress()]; game.ends = nb_ends.getProgress(); game.chelemAnnounced = chelem_announced.isChecked(); game.chelemRealized = chelem_realized.isChecked(); game.littleForAttacker = little_end.getProgress() == 1; game.littleForDefenser = little_end.getProgress() == 2; game.handle = handle.getProgress(); textView.setText(String.format(Locale.getDefault(), "%d points (hors misères)", game.calculateScore())); } }; updateScore.run(); nb_players.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { TextView nb_players_info = root.findViewById(R.id.nb_players_info); int resource = R.string.players4; switch (progress) { case 0: resource = R.string.players3; break; case 1: resource = R.string.players4; break; case 2: resource = R.string.players5; break; case 3: resource = R.string.players6; break; } nb_players_info.setText(resource); player4_layout.setVisibility(View.GONE); player5_layout.setVisibility(View.GONE); player6_layout.setVisibility(View.GONE); switch (progress + 3) { case 6: player6_layout.setVisibility(View.VISIBLE); case 5: player5_layout.setVisibility(View.VISIBLE); case 4: player4_layout.setVisibility(View.VISIBLE); } } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); attack_points.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { TextView attack = root.findViewById(R.id.nb_points_attack); TextView defense = root.findViewById(R.id.nb_points_defense); attack.setText(String.valueOf(progress)); defense.setText(String.valueOf(91 - progress)); updateScore.run(); } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); bet.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { TextView textView = root.findViewById(R.id.bet_info); switch (progress) { case 1: textView.setText(R.string.guard); break; case 2: textView.setText(R.string.guard_without); break; case 3: textView.setText(R.string.guard_against); break; default: textView.setText(R.string.little); break; } updateScore.run(); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); nb_ends.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { TextView textView = root.findViewById(R.id.nb_ends_info); switch (progress) { case 1: textView.setText(R.string.one_end); break; case 2: textView.setText(R.string.two_ends); break; case 3: textView.setText(R.string.three_ends); break; default: textView.setText(R.string.null_end); break; } updateScore.run(); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); chelem_announced.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateScore.run(); } }); chelem_realized.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateScore.run(); } }); little_end.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { TextView textView = root.findViewById(R.id.little_end_info); switch (progress) { case 1: textView.setText(R.string.for_attacker); break; case 2: textView.setText(R.string.for_defenser); break; default: textView.setText(R.string.no); break; } updateScore.run(); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); attack_points.setProgress(46); handle.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { TextView textView = root.findViewById(R.id.handle_info); switch (progress) { case -3: textView.setText(R.string.handle_3d); break; case -2: textView.setText(R.string.handle_2d); break; case -1: textView.setText(R.string.handle_1d); break; case 1: textView.setText(R.string.handle_1a); break; case 2: textView.setText(R.string.handle_2a); break; case 3: textView.setText(R.string.handle_3a); break; default: textView.setText(R.string.no_handle); break; } updateScore.run(); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); final Button btn = root.findViewById(R.id.add_game_button); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "La partie sera sauvegardée ultérieurement.", Toast.LENGTH_SHORT).show(); } }); return root; } }