diff --git a/src/main/java/pikelake/Marnage.java b/src/main/java/pikelake/Marnage.java index 9d785961355d7609b76dcbfa0d29f3138ee05279..13a9301aadc372f56ae700f3919cf4fd82f7014c 100644 --- a/src/main/java/pikelake/Marnage.java +++ b/src/main/java/pikelake/Marnage.java @@ -1,27 +1,42 @@ package pikelake; import java.io.File; -import java.io.FileNotFoundException; import java.util.Scanner; import java.util.StringTokenizer; +import java.io.FileNotFoundException; -import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess; -import pikelake.environment.FichierMarnage; -import pikelake.environment.Time; import pikelake.pikes.Pike; import pikelake.pikes.PikesGroup; +import pikelake.environment.Time; +import pikelake.environment.FichierMarnage; + +import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess; +/** + * Classe qui met a jour les cellules accessibles du lac, ainsi que leurs HSI + * en fonction du marnage calcule par la classe FichierMarnage + * @author Guillaume GARBAY + * @version 1.0 + */ public class Marnage extends AquaNismsGroupProcess<Pike,PikesGroup> { public static String marnageOld = null, marnageNew = null; public static String saison = ""; - + + /** + * MAJ de la grille, augmentation ou diminution du nombre de cellules accessibles + * Modification du HSI de chaque cellule + * @param object Represente les individus + * @return / + */ @Override public void doProcess(PikesGroup object) { + // Recuperation de la grille Grid grid = (Grid) pilot.getAquaticWorld().getEnvironment(); grid = grid.getGrid(); + // Calcul du marnage marnageNew = FichierMarnage.dateMarnage[Time.jourMois][Time.mois][Time.heure]; - + // MAJ de la grille seulement si le marnage est modifie if (!marnageNew.equals(marnageOld)) { synchronized (grid) { // synchronization to be sure that graphical observer read synchronized values majCote(grid); @@ -29,6 +44,12 @@ public class Marnage extends AquaNismsGroupProcess<Pike,PikesGroup> { } } + /** + * MAJ de la grille, augmentation ou diminution du nombre de cellules accessibles + * Modification du HSI de chaque cellule + * @param grid Represente le lac et les cellules non accessibles + * @return / + */ public void majCote (Grid grid) { StringTokenizer sLigne; @@ -41,15 +62,18 @@ public class Marnage extends AquaNismsGroupProcess<Pike,PikesGroup> { // Initialisation de toute la grille avec hsi = -1 for (int cptCell = 0; cptCell < (grid.getGridWidth() * grid.getGridHeight() - 1); cptCell++) grid.setCell(cptCell, -1); + // Lecture fichier contenant les HSI de toutes les mailles String filePath = "data/input/HSI/hsi_BRO" + Time.getSeason() + marnageNew + ".txt"; Scanner scanner; try { scanner = new Scanner(new File(filePath)); String line = scanner.nextLine(); + // On boucle sur chaque ligne detectée while (scanner.hasNextLine()) { - line = scanner.nextLine(); + line = scanner.nextLine(); + // Decoupage ligne : id, hsiStd, hsiMoy sLigne = new StringTokenizer (line); if (sLigne.hasMoreTokens()) @@ -58,21 +82,26 @@ public class Marnage extends AquaNismsGroupProcess<Pike,PikesGroup> { hsiStd = Double.parseDouble(sLigne.nextToken()); if (sLigne.hasMoreTokens()) hsiMoy = Double.parseDouble(sLigne.nextToken()); + // Conversion idCell en coordonnees (x, y) // (x, y) avec les id de cellules de 0 à n-1 yPike = (int) Math.floor(idCell / grid.getGridWidth()); xPike = (int) idCell - (yPike * grid.getGridWidth()); + // Inversion des coordonnees en Y (place l'origine en bas à gauche) yPike = (grid.getGridHeight()-1) - yPike ; + // Conversion des coordonnees (x, y) en idCell idCell = xPike + yPike * grid.getGridWidth(); + // Initialisation du hsi de la cellule(idCell) grid.setCell(idCell, hsiMoy); } - scanner.close(); + scanner.close(); // Fermeture du fichier } catch (FileNotFoundException e) { - // TODO Auto-generated catch block + // Auto-generated catch block, erreur de lecture du fichier e.printStackTrace(); } } } +