package trafficjams.model.visualization;
import trafficjams.model.Numbers;
import trafficjams.model.interfaces.ICrossRoad;
import trafficjams.model.interfaces.IRoad;
import trafficjams.model.interfaces.IVehicle;
import trafficjams.model.registers.RoadMap;
import trafficjams.model.registers.TrafficRegister;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Created by IntelliJ IDEA.
* User: Администратор
* Date: 12.11.11
* Time: 19:18
* To change this template use File | Settings | File Templates.
*/
public class RoadMapCanvas extends JPanel {
static {
instance = new RoadMapCanvas();
}
private static final RoadMapCanvas instance;
private Timer timer;
private boolean repaintAllowed = false;
private RoadMapCanvas(){
super();
super.setSize( (int)Numbers.mapWidth, (int)Numbers.mapHeight);
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
repaint();
}
};
timer = new Timer(Numbers.repaintInterval, al);
timer.start();
}
public boolean isRepaintAllowed() {
return repaintAllowed;
}
public void setRepaintAllowed(boolean repaintAllowed) {
this.repaintAllowed = repaintAllowed;
}
public static RoadMapCanvas getInstance() {
return instance;
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.PINK);
g.drawLine(0,0,0, (int)Numbers.mapHeight);
g.drawLine(0,0,(int) Numbers.mapWidth,0);
g.drawLine((int) Numbers.mapWidth,(int)Numbers.mapHeight,0, (int)Numbers.mapHeight);
g.drawLine((int) Numbers.mapWidth,(int)Numbers.mapHeight, (int) Numbers.mapWidth,0);
if (this.repaintAllowed){
RoadMap map = TrafficRegister.getInstance().getRoadMap();
if (map == null)
return;
g.setColor(Color.yellow);
for (ICrossRoad cr : map.getL_CrossRoads() ) {
Point p = cr.getCoord().toAwtPoint();
g.fillRect(p.x-5,p.y-5, 10, 10);
}
g.setColor(Color.blue);
for (IRoad r : map.getRoads()){
Point p1 = r.getFCross().getCoord().toAwtPoint();
Point p2 = r.getLCross().getCoord().toAwtPoint();
g.drawLine(p1.x, p1.y, p2.x , p2.y);
}
for (IVehicle v : TrafficRegister.getInstance().getVehicleRegister().getVehicles()){
Point p = v.getCoord().toAwtPoint();
try{
float f = ((Float)v.getCurrentPosition().getValue()).floatValue();
if (f>=0){
g.setColor(Color.red);
g.fillOval(p.x - 4 , p.y - 4 , 5 , 5);
}else {
g.setColor(Color.blue);
g.fillOval(p.x , p.y , 5 , 5);
}
}catch (Exception ex){
g.setColor(Color.GREEN);
g.fillOval(p.x - 3, p.y - 3 , 5 , 5);
}
}
}
}
}