package com.tacoid.superflu.entities;
import java.util.ArrayList;
import java.util.Arrays;
import com.tacoid.superflu.GameLogic;
public class Carte implements Entity {
private static double TAUX_MIGRATION = 200;
private static final int longueur_courbe = 100;
private static int courbe_morts[] = null;
private static int courbe_infectes[] = null;
private static int courbe_vaccines[] = null;
private static int dephasage_courbes;
@Override
public String toString() {
return "Carte [courbe_infectes=" + Arrays.toString(courbe_infectes)
+ ", courbe_morts=" + Arrays.toString(courbe_morts)
/* + ", courbe_pop=" + Arrays.toString(courbe_pop) */
+ ", courbe_vaccines=" + Arrays.toString(courbe_vaccines)
+ ", dephasage_courbes=" + dephasage_courbes + "]";
}
private ArrayList<Zone> zones;
private GameLogic gameLogic;
private int counter = 10;
public Carte(GameLogic gameLogic) {
this.gameLogic = gameLogic;
zones = new ArrayList<Zone>();
courbe_morts = new int[longueur_courbe];
courbe_infectes = new int[longueur_courbe];
courbe_vaccines = new int[longueur_courbe];
dephasage_courbes = 0;
for (int i = 0; i < longueur_courbe; i++) {
/* courbe_pop[i] = 0; */
courbe_morts[i] = 0;
courbe_infectes[i] = 0;
courbe_vaccines[i] = 0;
}
}
public void addZone(Zone zone) {
zones.add(zone);
}
public ArrayList<Zone> getZones() {
return zones;
}
public void update(int delta) {
if (counter >= 10) {
for (Zone zone : zones) {
zone.update(counter * delta);
}
migrations(counter * delta);
counter = 0;
} else {
counter++;
}
}
private void migrations(int delta) {
for (Zone z1 : zones) {
for (Ville v1 : z1.getVilles()) {
if(v1.isUsine()) continue;
if (v1.getHabitants() == 0) continue;
double taux_sain = (double)v1.getHabitantsSains() / v1.getHabitants();
double taux_infection = (double)v1.getHabitantsInfectes() / v1.getHabitants();
double taux_immunisation = (double)v1.getHabitantsImmunises() / v1.getHabitants();
for (Zone z2 : zones) {
for (Ville v2 : z2.getVilles()) {
if(v2.isUsine()) continue;
if (v1 == v2) continue;
double d = Ville.distance_carre(v1, v2);
double flux = Math.floor((Math.random() * v1.getHabitants() * TAUX_MIGRATION) / (d + 3 * this.gameLogic.getPopulationInfectee()) * delta/1000.0f);
double flux_sain = Math.floor(taux_sain * flux);
double flux_infecte = Math.floor(taux_infection * flux);
double flux_immunise = Math.floor(taux_immunisation * flux);
/* Mise à jour de la population saine */
if (v1.getHabitantsSains() >= flux_sain) {
v2.ajouteHabitantsSains((int)flux_sain);
v1.retireHabitantsSains((int)flux_sain);
} else {
v2.ajouteHabitantsSains(v1.getHabitantsSains());
v1.retireHabitantsSains(v1.getHabitantsSains());
}
/* Mise à jour de la population infectée */
if (v1.getHabitantsInfectes() >= flux_infecte) {
v2.ajouteHabitantsInfectes((int)flux_infecte);
v1.retireHabitantsInfectes((int)flux_infecte);
} else {
v2.ajouteHabitantsInfectes(v1.getHabitantsInfectes());
v1.retireHabitantsInfectes(v1.getHabitantsInfectes());
}
/* Mise à jour de la population immunisée */
if (v1.getHabitantsImmunises() >= flux_immunise) {
v2.ajouteHabitantsImmunises((int)flux_immunise);
v1.retireHabitantsImmunises((int)flux_immunise);
} else {
v2.ajouteHabitantsImmunises(v1.getHabitantsImmunises());
v1.retireHabitantsImmunises(v1.getHabitantsImmunises());
}
}
}
}
}
}
}