tarot-ens-info/app/src/main/java/fr/ynerant/tarot/ui/newgame/NewGameFragment.java

323 lines
9.4 KiB
Java

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<Player> 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;
}
}