tarot-ens-info/app/src/main/java/fr/ynerant/tarot/Player.java

140 lines
3.3 KiB
Java

package fr.ynerant.tarot;
import android.annotation.SuppressLint;
import android.preference.PreferenceManager;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
public class Player {
@SuppressLint("UseSparseArrays")
private static final Map<Integer, Player> PLAYERS = new HashMap<>();
public static Player THIS_PLAYER;
private int id;
private String name;
private int score3, score4, score5, score6;
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getScore(Game.GameType type) {
switch (type) {
case THREE_PLAYERS:
return score3;
case FOUR_PLAYERS:
return score4;
case FIVE_PLAYERS:
return score5;
case SIX_PLAYERS:
return score6;
default:
return 0;
}
}
public void setScore(Game.GameType type, int score) {
switch (type) {
case THREE_PLAYERS:
score3 = score;
break;
case FOUR_PLAYERS:
score4 = score;
break;
case FIVE_PLAYERS:
score5 = score;
break;
case SIX_PLAYERS:
score6 = score;
break;
}
}
public void addScore(Game.GameType type, int score) {
setScore(type, getScore(type) + score);
}
@Override
public boolean equals(Object obj) {
return obj instanceof Player && ((Player) obj).getId() == getId();
}
public static void updatePlayers() {
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("https://ynerant.fr/tarot/player.php");
final HttpURLConnection co = (HttpURLConnection) url.openConnection();
co.setRequestMethod("POST");
co.setRequestProperty("token", PreferenceManager.getDefaultSharedPreferences(MainActivity.INSTANCE).getString("token", null));
co.connect();
final List<Player> players = new Gson().fromJson(new InputStreamReader(co.getInputStream()), new TypeToken<ArrayList<Player>>(){}.getType());
PLAYERS.clear();
for (Player p : players) {
PLAYERS.put(p.getId(), p);
}
THIS_PLAYER = PLAYERS.get(PreferenceManager.getDefaultSharedPreferences(MainActivity.INSTANCE).getInt("user_id", 0));
MainActivity.INSTANCE.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.INSTANCE, "Bienvenue " + THIS_PLAYER.getName() + " !", Toast.LENGTH_SHORT).show();
}
});
Game.updateGames();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
public static Collection<Player> getAllPlayers() {
List<Player> list = new ArrayList<>(PLAYERS.values());
list.sort(new Comparator<Player>() {
@Override
public int compare(Player o1, Player o2) {
return String.CASE_INSENSITIVE_ORDER.compare(o1.getName(), o2.getName());
}
});
return list;
}
public static Player getPlayerById(int id) {
return PLAYERS.get(id);
}
@NonNull
@Override
public String toString() {
return name;
}
}