rendered paste body/**
*
*/
package solutions;
import de.tu_darmstadt.es.sopra.exercises.Game;
import de.tu_darmstadt.es.sopra.model.external.factories.CommandFactory;
import de.tu_darmstadt.es.sopra.model.external.interfaces.scenario.IScenario;
import de.tu_darmstadt.es.sopra.model.external.interfaces.scenario.ILocation;
import de.tu_darmstadt.es.sopra.model.external.interfaces.scenario.ITransporter;
import de.tu_darmstadt.es.sopra.model.external.interfaces.scenario.IProductionFacility;
import de.tu_darmstadt.es.sopra.model.external.interfaces.scenario.IScenarioElement;
import de.tu_darmstadt.es.sopra.model.external.implementations.type.GoodType;
import de.tu_darmstadt.es.sopra.model.external.implementations.type.LocationType;
import java.util.Vector;
public class Solution09 extends Game {
private Solution08 computer=new Solution08();
private ILocation pumpLocation,millLocation;
private IScenarioElement t1Location;
private IProductionFacility pump=(IProductionFacility) pumpLocation;
private ITransporter t1;
private Vector<String> way = new Vector<String>();
private boolean tcon=true;
private Vector<ILocation> pumps, mills;
private CommandFactory cmd;
private boolean finished=false;
public void planningPhase(IScenario arg0, int arg1) {
if(finished||!tcon)
finished();
else{
if (arg1==1)
beginn(arg0);
else
catchMeIfYouCan(arg0);
}
}
@Override
public void preparationPhase(IScenario arg0) {
check(arg0);
if (tcon){
computeWay(arg0);
}
}
private void check(IScenario arg0){
try {
t1 = arg0.getTransporter("t1");
t1Location = t1.getVisitedScenarioElement();
} catch (Exception e) { t1 = null; t1 = null; }
Solution04 sol = new Solution04();
pumps = sol.getLocationsOfType(arg0, LocationType.PUMP);
mills = sol.getLocationsOfType(arg0, LocationType.MILL);
if ((t1 == null)|| (t1Location == null) ||(pumps == null)|| (mills == null) ||(pumps.size() == 0) || (mills.size() == 0))
tcon=false;
}
private int duration(IScenarioElement arg0, ILocation pump, ILocation mill) {
int i, j;
i = computer.getShortestPathDuration(arg0.getId(), pump.getId());
j = computer.getShortestPathDuration(pump.getId(), mill.getId());
if (i > 2)
return i + j ;
else
return 2 + j ;
}
private void computeWay(IScenario arg0) {
int i, j, min, dur;
String[] locations = (String[]) arg0.getLocations().keySet().toArray(new String[0]);
computer.computeAPSP(arg0, locations);
min = Integer.MAX_VALUE;
for (i = 0; i < pumps.size(); i++)
for (j = 0; j < mills.size(); j++) {
dur = duration(t1Location,pumps.get(i),mills.get(j));
if (dur< min){
pumpLocation = pumps.get(i);
millLocation = mills.get(j);
min = dur;
}
}
String t1locstr = t1Location.getId();
String plocstr = pumpLocation.getId();
if (t1locstr.equals(plocstr))
way.add(t1locstr);
else
way.addAll(computer.getShortestPath(t1locstr, plocstr));
way.addAll(computer.getShortestPath(plocstr, millLocation.getId()));
}
private void move(IScenario scenario) {
ILocation loc;
try{
loc = scenario.getLocation(way.get(0));
t1.assignCommand(cmd.getTravelCommand(t1, loc));
way.remove(0);
} catch (Exception e) { }
}
private void beginn(IScenario arg0){
String strLocation;
try {
pump.assignCommand(cmd.getProduceCommand(pump));
strLocation = way.remove(0);
if (!strLocation.equals(pumpLocation.getId()))
move(arg0);
} catch (Exception e) { }
}
private void getWater(){
if (!pump.hasCommand()) {
try{t1.assignCommand(cmd.getUploadCommand(t1, 20,GoodType.WATER));}catch (Exception e){System.out.println("busy");}
}
}
private void deliverWater(){
try{t1.assignCommand( cmd.getUnloadCommand(t1, 20,GoodType.WATER));}catch (Exception e){System.out.println("fuck ugly");}
finished = true;
}
private void catchMeIfYouCan(IScenario arg0){
String location=t1.getVisitedScenarioElement().getId();
int load=t1.getTransportedGoodSet().getTotalQuantity();
if(location==pumpLocation.getId()){
if(load!=20){
getWater();
}
else {
way.remove(0);
move(arg0);
}
}
else if(location==millLocation.getId()&&load==20 ){
deliverWater();
}
else {
if (t1.getCommand()==null)
move(arg0);
}
}
@Override
public String[] getAuthors() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getTeam() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getVersion() {
// TODO Auto-generated method stub
return null;
}
}