package me.corriekay.pokegoutil.gui.controller; import java.text.NumberFormat; import com.pokegoapi.api.inventory.Stats; import com.pokegoapi.api.player.PlayerProfile; import com.pokegoapi.exceptions.LoginFailedException; import com.pokegoapi.exceptions.RemoteServerException; import POGOProtos.Data.PlayerDataOuterClass.PlayerData; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.control.MenuItem; import javafx.scene.image.ImageView; import javafx.scene.image.PixelWriter; import javafx.scene.image.WritableImage; import javafx.scene.layout.BorderPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; import javafx.stage.StageStyle; import me.corriekay.pokegoutil.BlossomsPoGoManager; import me.corriekay.pokegoutil.data.managers.AccountManager; import me.corriekay.pokegoutil.data.managers.InventoryManager; import me.corriekay.pokegoutil.data.managers.PokemonBagManager; import me.corriekay.pokegoutil.data.managers.ProfileManager; /** * The MainWindowController is the main view of the program after logging in. */ public class MainWindowController extends BaseController<BorderPane> { private static final String SLASH = "/"; private final AccountManager accountManager = AccountManager.getInstance(); @FXML private MenuItem settingsMenuItem; @FXML private MenuItem logOffMenuItem; @FXML private MenuItem quitMenuItem; @FXML private MenuItem aboutMenuItem; @FXML private HBox PlayerInfo; @FXML private ImageView teamIcon; @FXML private Label playerNameLabel; @FXML private Label playerLvl; @FXML private Label playerStardustLbl; @FXML private Label nbPkmInBagsLbl; @FXML private Label nbItemsBagsLbl; @FXML private GridPane pokemontable; @FXML private final PokemonTableController pokemontableController; public MainWindowController() { super(); initializeController(); pokemontableController = new PokemonTableController(pokemontable); } @Override public String getFxmlLayout() { return "layout/MainWindow.fxml"; } @FXML // TODO fix exceptions private void initialize() { quitMenuItem.setOnAction(this::onQuitClicked); logOffMenuItem.setOnAction(this::onLogOffClicked); final PlayerProfile pp = ProfileManager.getProfile(); refreshGUI(pp); } @FXML void onAboutClicked(final ActionEvent event) { // Not done } @FXML void onLogOffClicked(final ActionEvent event) { new LoginController(); BlossomsPoGoManager.getPrimaryStage().show(); } @FXML void onQuitClicked(final ActionEvent event) { // TODO Kill in a more humane way, maybe... System.exit(0); } @FXML void onSettingsClicked(final ActionEvent event) { // Not done } /** * The player profile will be used to refresh the interface. * * @param pp the player profile */ private void refreshGUI(final PlayerProfile pp) { boolean done = false; if (pp != null) { while (!done) { done = true; try { final PlayerData pd = pp.getPlayerData(); final Stats stats = pp.getStats(); Color color = null; switch (pd.getTeam().getNumber()) { case 0 :// noteam color = Color.rgb(160, 160, 160, 0.99); break; case 1 :// blue color = Color.rgb(0, 0, 255, 0.99); break; case 2 :// red color = Color.rgb(204, 0, 0, 0.99); break; case 3 :// yellow color = Color.rgb(255, 255, 0, 0.99); break; } if (color != null) { final int width = (int) teamIcon.getFitWidth(); final int height = (int) teamIcon.getFitHeight(); final WritableImage dest = new WritableImage(width, height); final PixelWriter writer = dest.getPixelWriter(); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { writer.setColor(x, y, color); } } teamIcon.setImage(dest); } playerNameLabel.setText(pd.getUsername() + " "); playerLvl.setText("Lvl: " + Integer.toString(stats.getLevel())); final NumberFormat f = NumberFormat.getInstance(); playerStardustLbl.setText(f.format( pp.getCurrency(PlayerProfile.Currency.STARDUST)) + " Stardust"); nbPkmInBagsLbl.setText(Integer.toString(PokemonBagManager.getNbPokemon()) + SLASH + Integer.toString(pp.getPlayerData().getMaxPokemonStorage()) + " Pokémon"); nbItemsBagsLbl.setText( Integer.toString(InventoryManager.getInventories().getItemBag().getItemsCount()) + SLASH + Integer.toString(pp.getPlayerData().getMaxItemStorage()) + " Items"); } catch (LoginFailedException | RemoteServerException e) { System.out.println("bad stuff happened:" + e.toString()); done = false; } } } } @Override public void setGuiControllerSettings() { try { final NumberFormat f = NumberFormat.getInstance(); final PlayerProfile pp = accountManager.getPlayerProfile(); guiControllerSettings.setTitle(String.format( "%s - Stardust: %s - Blossom's Pokémon Go Manager", pp.getPlayerData().getUsername(), f.format(pp.getCurrency(PlayerProfile.Currency.STARDUST)))); } catch (NumberFormatException | NullPointerException e) { guiControllerSettings.setTitle("Blossom's Pokémon Go Manager"); } guiControllerSettings.setStageStyle(StageStyle.DECORATED); guiControllerSettings.setMaximized(true); } }