package simulation.entity;
import java.beans.PropertyChangeSupport;
import sim.engine.SimState;
import sim.engine.Steppable;
import sim.util.Int2D;
import simulation.SimulationModel;
import utils.Constants;
public class VegetationManager extends Entity implements Steppable {
private PropertyChangeSupport support = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1L;
private SimulationModel myModel;
private Grass[][] Grasses;
public PropertyChangeSupport getPropertyChangeSupport(){
return support;
}
public VegetationManager(SimulationModel simModel) {
super(simModel);
myModel = simModel;
Grasses= new Grass[myModel.getYard().getWidth()][myModel.getYard().getHeight()];
System.out.println("Init Vegetation\n\n");
Float[][] Vegetation = myModel.getVegetation();
for(int i=0;i<myModel.getYard().getWidth();i++){
for(int j=0;j<myModel.getYard().getHeight();j++){
Vegetation[i][j]=(float) (/*Math.random()**/Constants.VEGETATION_MAX_WEIGHT_PER_CELL);
// System.out.print(Vegetation[i][j]+"|");
Grass g = new Grass(simModel);
Grasses[i][j]=g;
myModel.schedule.scheduleRepeating(g);
myModel.getYard().setObjectLocation(g, new Int2D(i,j));
}
//System.out.print("\n");
}
//System.out.print("\n\n");
support.firePropertyChange("grown",null,Grasses);
}
public void growVegetation(){
System.out.println("Grow Vegetation !\n\n");
Float[][] Vegetation = myModel.getVegetation();
for(int i=0;i<myModel.getYard().getWidth();i++){
for(int j=0;j<myModel.getYard().getHeight();j++){
float grownWeight = Vegetation[i][j]+Constants.VEGETATION_WEIGHT_GAINED_PER_STEP;
if(grownWeight>=Constants.VEGETATION_MAX_WEIGHT_PER_CELL){
grownWeight=Constants.VEGETATION_MAX_WEIGHT_PER_CELL;
}
Vegetation[i][j]=grownWeight;
//System.out.print(Vegetation[i][j]+"|");
}
//System.out.println("");
}
//System.out.println("\n\n");
support.firePropertyChange("grown",null,Grasses);
}
@Override
public void step(SimState simState) {
growVegetation();
}
}