|
@@ -0,0 +1,124 @@
|
|
|
|
|
+package gui.simulator;
|
|
|
|
|
+
|
|
|
|
|
+import java.awt.BasicStroke;
|
|
|
|
|
+import java.awt.Color;
|
|
|
|
|
+import java.awt.Font;
|
|
|
|
|
+import java.awt.Graphics2D;
|
|
|
|
|
+import java.awt.Point;
|
|
|
|
|
+import java.awt.Rectangle;
|
|
|
|
|
+import java.awt.Window;
|
|
|
|
|
+import java.awt.event.MouseEvent;
|
|
|
|
|
+import java.awt.event.MouseListener;
|
|
|
|
|
+import java.awt.geom.GeneralPath;
|
|
|
|
|
+import java.awt.image.BufferedImage;
|
|
|
|
|
+import java.io.IOException;
|
|
|
|
|
+import java.util.Calendar;
|
|
|
|
|
+import java.util.GregorianCalendar;
|
|
|
|
|
+
|
|
|
|
|
+import javax.imageio.ImageIO;
|
|
|
|
|
+
|
|
|
|
|
+public class Topbar implements MouseListener {
|
|
|
|
|
+ private int oldwidth, people;
|
|
|
|
|
+ private GeneralPath background;
|
|
|
|
|
+ BufferedImage t1,t2,t3,t4,t5;
|
|
|
|
|
+ private GregorianCalendar time;
|
|
|
|
|
+ private Rectangle[] buttons;
|
|
|
|
|
+ private Terrain terrain;
|
|
|
|
|
+
|
|
|
|
|
+ public Topbar(Terrain terrain){
|
|
|
|
|
+ background = new GeneralPath();
|
|
|
|
|
+ time = new GregorianCalendar();
|
|
|
|
|
+ buttons = new Rectangle[5];
|
|
|
|
|
+ this.terrain = terrain;
|
|
|
|
|
+ try {
|
|
|
|
|
+ t2 = ImageIO.read(Window.class.getResource("/topbar/play.png"));
|
|
|
|
|
+ t1 = ImageIO.read(Window.class.getResource("/topbar/stop.png"));
|
|
|
|
|
+ t3 = ImageIO.read(Window.class.getResource("/topbar/faster.png"));
|
|
|
|
|
+ t4 = ImageIO.read(Window.class.getResource("/topbar/grid.png"));
|
|
|
|
|
+ t5 = ImageIO.read(Window.class.getResource("/topbar/people.png"));
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public void draw(Graphics2D g2, int screenwidth){
|
|
|
|
|
+ screenwidth += 100;
|
|
|
|
|
+ if(oldwidth != screenwidth){
|
|
|
|
|
+ //only create a new general path when the window is resized
|
|
|
|
|
+ background.reset();
|
|
|
|
|
+ background.moveTo(screenwidth/4, 0);
|
|
|
|
|
+ background.curveTo(screenwidth/4, 0, screenwidth/4 -20, 20, screenwidth/4 +30, 40);
|
|
|
|
|
+ background.lineTo(screenwidth/4*3-30, 40);
|
|
|
|
|
+ background.curveTo(screenwidth/4*3-30, 40, screenwidth/4*3 + 20, 20, screenwidth/4*3, 0);
|
|
|
|
|
+ background.closePath();
|
|
|
|
|
+ oldwidth = screenwidth;
|
|
|
|
|
+ buttons[0] = new Rectangle(screenwidth/4+40,7,26,26);
|
|
|
|
|
+ buttons[1] = new Rectangle(screenwidth/4+90,7,26,26);
|
|
|
|
|
+ buttons[2] = new Rectangle(screenwidth/4+130,7,26,30);
|
|
|
|
|
+ buttons[3] = new Rectangle(screenwidth/4*3-60,7,26,26);
|
|
|
|
|
+ buttons[4] = new Rectangle(screenwidth/4*3-150,7,48,26);
|
|
|
|
|
+ }
|
|
|
|
|
+ g2.setColor(Color.GRAY);
|
|
|
|
|
+ g2.fill(background);
|
|
|
|
|
+ g2.setColor(Color.BLACK);
|
|
|
|
|
+ g2.setStroke(new BasicStroke(2));
|
|
|
|
|
+ g2.draw(background);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ g2.drawImage(t1, screenwidth/4 + 40, 7, null );
|
|
|
|
|
+ g2.drawImage(t2, screenwidth/4 + 90, 7, null );
|
|
|
|
|
+ g2.drawImage(t3, screenwidth/4 + 130, 7, null );
|
|
|
|
|
+
|
|
|
|
|
+ g2.setFont(new Font("Sans-serif", Font.BOLD, 22));
|
|
|
|
|
+ g2.drawString(time.get(Calendar.HOUR_OF_DAY) + ":" + time.get(Calendar.MINUTE), screenwidth/2-10 , 28);
|
|
|
|
|
+
|
|
|
|
|
+ g2.drawImage(t4, screenwidth/4*3 -60, 7, null );
|
|
|
|
|
+
|
|
|
|
|
+ g2.drawImage(t5, screenwidth/4*3 -150, 7, null );
|
|
|
|
|
+ g2.setFont(new Font("Sans-serif", Font.PLAIN, 18));
|
|
|
|
|
+ g2.drawString(people + "", screenwidth/4*3 - 120, 27);
|
|
|
|
|
+ }
|
|
|
|
|
+ public void setTime(GregorianCalendar t){
|
|
|
|
|
+ time = t;
|
|
|
|
|
+ }
|
|
|
|
|
+ public void setPeople(int p){
|
|
|
|
|
+ people = p;
|
|
|
|
|
+ }
|
|
|
|
|
+ public Rectangle[] getButtons(){
|
|
|
|
|
+ return buttons;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void mouseClicked(MouseEvent e) {
|
|
|
|
|
+ int button = clickedButton(e.getPoint());
|
|
|
|
|
+ if(button >=0){
|
|
|
|
|
+ if(button == 3) terrain.toggleGrid();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void mouseEntered(MouseEvent e) {
|
|
|
|
|
+ }
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void mouseExited(MouseEvent e) {
|
|
|
|
|
+ }
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void mousePressed(MouseEvent e) {
|
|
|
|
|
+ }
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void mouseReleased(MouseEvent e) {
|
|
|
|
|
+ }
|
|
|
|
|
+ public boolean containsMouse(Point point){
|
|
|
|
|
+ if(clickedButton(point)>=0)
|
|
|
|
|
+ return true;
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ private int clickedButton(Point point){
|
|
|
|
|
+ for(int i = 0; i < getButtons().length; i++){
|
|
|
|
|
+ if(getButtons()[i].contains(point)){
|
|
|
|
|
+ return i;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|