package fr.lyrgard.hexScape.server.listener;
import java.util.ArrayList;
import java.util.List;
import com.google.common.eventbus.Subscribe;
import fr.lyrgard.hexScape.bus.CoreMessageBus;
import fr.lyrgard.hexScape.message.DiceThrownMessage;
import fr.lyrgard.hexScape.message.ThrowDiceMessage;
import fr.lyrgard.hexScape.model.Universe;
import fr.lyrgard.hexScape.model.game.Game;
import fr.lyrgard.hexScape.model.player.Player;
import fr.lyrgard.hexScape.model.player.User;
import fr.lyrgard.hexscape.server.network.ServerNetwork;
public class DiceMessageListener {
private static DiceMessageListener instance;
public static void start() {
if (instance == null) {
instance = new DiceMessageListener();
CoreMessageBus.register(instance);
}
}
private DiceMessageListener() {
}
@Subscribe public void onThrowDiceMessage(ThrowDiceMessage message) {
String diceTypeId = message.getDiceTypeId();
int number = message.getNumber();
int numberOfFaces = message.getNumberOfFaces();
String userId = message.getSessionUserId();
User user = Universe.getInstance().getUsersByIds().get(userId);
if (user != null && user.getGame() != null) {
Game game = user.getGame();
Player player = game.getPlayerByUserId(userId);
if (player != null) {
List<Integer> results = new ArrayList<>();
for (int i = 0; i < number; i++) {
results.add(roll(numberOfFaces));
}
ServerNetwork.getInstance().sendMessageToGame(new DiceThrownMessage(player.getId(), diceTypeId, results), game.getId());
}
}
}
private int roll(int numberOfFace) {
return (int)(Math.random() * (numberOfFace));
}
}