SimulatorPane.java 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package gui.simulator;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import javax.swing.Timer;
  7. import java.util.TimerTask;
  8. import javax.swing.BorderFactory;
  9. import javax.swing.JPanel;
  10. import agenda.Agenda;
  11. public class SimulatorPane extends JPanel{
  12. private Agenda agenda;
  13. private Terrain terrain;
  14. private Timer framestimer, updatetimer;
  15. //terrain type enums
  16. public enum Terrains{BEACH, GRASS, URBAN, UNDEFINED};
  17. //object type enums
  18. public enum Objects{STAGE, DRINK, SNACKBAR, RESTROOM, SUNGLAS, WAYPOINT, ENTRANCE, EXIT, BORDER, TREE1, PALMTREE1, FENCE};
  19. //time control enums
  20. public enum Time{STOP, PAUZE, PLAY, FASTER, FASTEST};
  21. public SimulatorPane(Agenda agenda, int length, int width, Terrains terrains){
  22. super.setLayout(new BorderLayout());
  23. this.agenda = agenda;
  24. this.setOpaque(true);
  25. this.setBackground(Color.WHITE);
  26. this.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
  27. this.terrain = new Terrain(length, width, terrains, this.agenda, this);
  28. this.add(this.terrain, BorderLayout.CENTER);
  29. framestimer = new Timer(1000/30, new ActionListener() {
  30. @Override
  31. public void actionPerformed(ActionEvent arg0) {
  32. terrain.repaint();
  33. }
  34. });
  35. updatetimer = new Timer(1000/100, new ActionListener() {
  36. @Override
  37. public void actionPerformed(ActionEvent arg0) {
  38. terrain.calculate();
  39. }
  40. });
  41. framestimer.start();
  42. //updatetimer.start();
  43. }
  44. public void changeSpeed(Time time){
  45. switch(time){
  46. case FASTEST:
  47. updatetimer.setDelay(1000/150); break;
  48. case FASTER:
  49. updatetimer.setDelay(1000/100); break;
  50. case PLAY:
  51. updatetimer.start(); updatetimer.setDelay(1000/50); break;
  52. case PAUZE:
  53. updatetimer.stop(); break;
  54. case STOP:
  55. updatetimer.stop(); terrain.clearVisitors(); break;
  56. default:
  57. break;
  58. }
  59. }
  60. }