package org.pixelgaffer.turnierserver.codr; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.util.Properties; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.scene.image.Image; import org.pixelgaffer.turnierserver.codr.utilities.Dialog; import org.pixelgaffer.turnierserver.codr.utilities.ErrorLog; import org.pixelgaffer.turnierserver.codr.utilities.Paths; import org.pixelgaffer.turnierserver.codr.utilities.Resources; /** * Managet das Laden der SimplePlayer aus dem Downloads-Ordner. * Ist auẞerdem der Grundbaustein für AiSaved, da hier schon die loadAi-Methode existiert. * * @author Philip */ public class AiSimple extends AiBase { /** * Lädt eine Ai aus dem Dateisystem * * @param tit der übergebene Titel */ protected AiSimple(String ttitle, AiMode mmode) { super(ttitle, mmode); } public AiSimple(String ttitle) { super(ttitle, AiMode.simplePlayer); loadProps(); loadVersions(); } /** * Lädt aus dem Dateiverzeichnis die Eigenschaften des Players. */ public void loadProps() { try { Reader reader = new FileReader(Paths.aiProperties(this)); Properties prop = new Properties(); prop.load(reader); reader.close(); gametype = prop.getProperty("gametype"); description = prop.getProperty("description"); language = prop.getProperty("language"); } catch (IOException e) { e.printStackTrace(); ErrorLog.write("Fehler bei Laden aus der aiProperties.txt"); } } /** * Lädt die Versionen aus dem Dateisystem, mit Hilfe der versionAmount-Property */ public void loadVersions() { versions.clear(); int versionAmount = 0; try { Reader reader = new FileReader(Paths.aiProperties(this)); Properties prop = new Properties(); prop.load(reader); reader.close(); versionAmount = Integer.parseInt(prop.getProperty("versionAmount")); } catch (IOException e) { ErrorLog.write("Fehler bei Laden aus der properties.txt (loadVerions)"); } for (int i = 0; i < versionAmount; i++) { versions.add(new Version(this, i, mode)); } } /** * Gibt das gespeicherte Bild des Spielers zurück. * * @return das gespeicherte Bild */ public ObjectProperty<Image> getPicture() { ObjectProperty<Image> img = new SimpleObjectProperty<>(Resources.imageFromFile(Paths.aiPicture(this))); if (img.get() == null) { img = new SimpleObjectProperty<>(Resources.defaultPicture()); } return img; } public File getPictureFile() { String path = Paths.aiPicture(this); if (path == null) return null; else return new File(path); } /** * Speichert das Bild des Spielers in der Datei picture.png. * * @param img das zu speichernde Bild */ @Override public void setPicture(File file) { if (Paths.aiPicture(this) != null) new File(Paths.aiPicture(this)).delete(); if (file.getName().equals("")) { return; } String ending = null; if (file.getName().endsWith(".png")) ending = "png"; if (file.getName().endsWith(".jpg")) ending = "jpg"; if (file.getName().endsWith(".jpeg")) ending = "jpeg"; if (file.getName().endsWith(".bmp")) ending = "bmp"; if (file.getName().endsWith(".gif")) ending = "gif"; if (ending == null) { Dialog.error("Dieses Bildformat wird nicht unterstützt"); return; } try { Files.copy(file.toPath(), new File(Paths.ai(this) + "/picture." + ending).toPath(), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { ErrorLog.write("Bild konnte nicht kopiert werden"); } } }