package cross;
import game_timer.TimerNotify;
import java.util.ArrayList;
import java.util.Map;
import logger.Logger;
import route.Route;
import vehicles.Vehicle;
import _main.Game;
/**
* Cross oszt�ly:
*Ez egy olyan absztrakt keresztez�d�s oszt�ly,
*amib�l �r�k�lnek m�s oszt�lyok (Bank, StopCross, stb.).
*Kezeli a keresztez�d�sben l�v� bemen� �s kimen� utakat, a
*rajtuk l�v� j�rm�veket. Egyszerre csak egy j�rm� lehet a keresztez�d�sben.
*Az oszt�ly implement�lja a TimerNotify interface-t.
*/
public abstract class Cross implements TimerNotify {
private Map m;
private ArrayList<Route> inroutes = new ArrayList<Route>();
private ArrayList<Route> outroutes = new ArrayList<Route>();
private ArrayList<Vehicle> vehicleInCross = new ArrayList<Vehicle>();
/** The vehicles at cross. */
private ArrayList<Vehicle> vehiclesAtCross = new ArrayList<Vehicle>();
/**
* friss�ti a vehiclesAtCross-t a keresztez�d�s bemen� �tjain tal�lhat� aut�kr�l
*
*/
public void updateVehiclesAtCross() {
Logger.get().addMethodCall("", "Cross", "updateVehiclesAtCross");
for(Route r : inroutes){//get dummy cars from the routes
vehiclesAtCross.add(r.test_getACar());
}
stepIntoCross();
vehicleOut();
Logger.get().addMethodReturn("", "Cross", "updateVehiclesAtCross");
}
/**
* �tk�z�s figyel�se; ha vannak a keresztez�d�sben �s j�n a bankrabl� befel�,
* akinek nagyobb a sebess�ge 0-n�l, akkor �tk�z�s lesz
*/
public void collisionDetect() {
Logger.get().addMethodCall("", "Cross", "collisionDetect");
Logger.get().addOrdinaryMessage("\tcollision detect logikaja: ha van valaki a keresztezodesbe(tehat a vehicleInCross nem ures) es ugy akar belepni, akkor utkozes tortent!");
if(vehicleInCross.size() > 0){
Logger.get().addOrdinaryMessage("\t[A keresztezodesben levo autok szama nagyobb, mint 0: utkozes tortent!]: a Game.finishGame() meghivasa!");
Game.getInstance().finishGame();
}
Logger.get().addMethodReturn("", "Cross", "collisionDetect");
}
/**
*
* a keresztez�d�sben l�v� aut�t kil�pteti
*/
public void vehicleOut() {
Logger.get().addMethodCall("", "Cross", "vehicleOut");
Route selectedOutRoute = vehicleInCross.get(0).selectRoute(outroutes);
selectedOutRoute.addVehicle(vehicleInCross.get(0));
Logger.get().addMethodReturn("", "Cross", "vehicleOut");
}
/**
*
* egy �tr�l bel�ptet egy j�rm�t a keresztez�d�sbe (a megadott szab�lyok alapj�n,
* mely a keresztez�d�s t�pus�t�l f�gg
*/
public void stepIntoCross() {
Logger.get().addMethodCall("", "Cross", "stepIntoCross");
Logger.get().addOrdinaryMessage("[Cross.stepIntoCross]: A [vehiclesAtCross] tombbol a kovetkezo auto kivalasztasa, majd a bemeno uttol valo elkerese!");
vehicleInCross.add(inroutes.get(0).getAndRemoveLastCar());//get the car and add it to the cross
Logger.get().addMethodReturn("", "Cross", "stepIntoCross");
}
/**
*
* az id�l�ptet� f�ggv�ny; megh�vja a megfelel� f�ggv�nyeket adott id�k�z�nk�nt
*/
public void onTick() {
throw new UnsupportedOperationException();
}
/**
* az inroutes t�mbh�z hozz�ad egy bemen� utat
* @param r bemen� �t hozz�ad�sa
*/
public void addInRoutes(Route r) {//TODO: addInRoute es nem Routes
Logger.get().addOrdinaryMessage("[Cross.addInRoutes]: Called! and [inRoute added!]");
inroutes.add(r);
}
/**
* az outroutes t�mbh�z hozz�ad egy bemen� utat
* @param r kimen� �t hozz�ad�sa
*/
public void addOutRoutes(Route r) {//TODO: addOutRoute es nem Routes
Logger.get().addOrdinaryMessage("[Cross.addOutRoutes]: Called! and [outRoute added!]");
outroutes.add(r);
}
/**
* Aut�t tesz a keresztez�d�sbe
* @param v a keresztez�d�sbe teend� aut�
*/
public void addVehicleToCross(Vehicle v) {
vehicleInCross.add(v);
}
}