diff --git a/Agenda/AddArtistPanel.java b/Agenda/AddArtistPanel.java index 49e2817..25b1c0c 100644 --- a/Agenda/AddArtistPanel.java +++ b/Agenda/AddArtistPanel.java @@ -49,11 +49,13 @@ public class AddArtistPanel extends JFrame{ JPanel panel5 = new JPanel(); JLabel image = new JLabel("Image: "); + image.setVisible(false); panel5.add(image); center.add(panel5); JPanel panel6 = new JPanel(); JTextField imageTF = new JTextField("null", 15); + imageTF.setVisible(false); panel6.add(imageTF); center.add(panel6); diff --git a/Agenda/AddEventPanel.java b/Agenda/AddEventPanel.java index 4d439aa..527b862 100644 --- a/Agenda/AddEventPanel.java +++ b/Agenda/AddEventPanel.java @@ -92,7 +92,7 @@ public class AddEventPanel extends JFrame{ center.add(panel6); JComboBox minuteE = new JComboBox(minutes); - minuteE.setSelectedIndex(today.get(GregorianCalendar.MINUTE)); + minuteE.setSelectedIndex(today.get(GregorianCalendar.MINUTE+1)); panel6.add(minuteE); panel6.add(new JSeparator(SwingConstants.VERTICAL)); panel6.add(new JSeparator(SwingConstants.VERTICAL)); @@ -205,9 +205,9 @@ public class AddEventPanel extends JFrame{ String stageName = (String)stage2.getSelectedItem(); - Stage stage = null; + AgendaStage stage = null; - for(Stage s : agenda.getStages()) + for(AgendaStage s : agenda.getStages()) { if (s.getName().equals(stageName)) { diff --git a/Agenda/AddStagePanel.java b/Agenda/AddStagePanel.java index d18177e..14cb2cc 100644 --- a/Agenda/AddStagePanel.java +++ b/Agenda/AddStagePanel.java @@ -58,7 +58,7 @@ public class AddStagePanel extends JFrame{ String description = descriptionTF.getText(); boolean alreadyExists = false; - for (Stage stage : agenda.getStages()) + for (AgendaStage stage : agenda.getStages()) { if (stage.getName().equals(name)) { @@ -70,7 +70,7 @@ public class AddStagePanel extends JFrame{ } else if ( alreadyExists == false ) { - Stage s = new Stage(name,description); + AgendaStage s = new AgendaStage(name,description); agenda.addStage(s); JOptionPane.showMessageDialog(null, "Stage added!"); setVisible(false); diff --git a/Agenda/Agenda.java b/Agenda/Agenda.java index 199c762..71576f7 100644 --- a/Agenda/Agenda.java +++ b/Agenda/Agenda.java @@ -17,17 +17,17 @@ public class Agenda implements Serializable { private static final long serialVersionUID = 1; - private ArrayList stages; + private ArrayList stages; private ArrayList events; private ArrayList artists; public Agenda() { - stages = new ArrayList(); + stages = new ArrayList(); events = new ArrayList(); artists = new ArrayList(); } - public void addStage(Stage stage){ + public void addStage(AgendaStage stage){ stages.add(stage); } @@ -47,7 +47,7 @@ public class Agenda implements Serializable { { return artists; } - public ArrayList getStages() + public ArrayList getStages() { return stages; } @@ -179,7 +179,7 @@ public class Agenda implements Serializable { { boolean exists = false; String name = e.getStage().getName(); - for (Stage s : stages) + for (AgendaStage s : stages) { if ( s.getName().equals(name) ) { exists = true; diff --git a/Agenda/Stage.java b/Agenda/AgendaStage.java similarity index 83% rename from Agenda/Stage.java rename to Agenda/AgendaStage.java index 301a11b..103810a 100644 --- a/Agenda/Stage.java +++ b/Agenda/AgendaStage.java @@ -1,14 +1,14 @@ package Agenda; import java.io.Serializable; -public class Stage implements Serializable { +public class AgendaStage implements Serializable { private static final long serialVersionUID = 1; private String name; private String description; - public Stage(String name, String description) + public AgendaStage(String name, String description) { this.name = name; this.description = description; diff --git a/Agenda/EditArtistPanel.java b/Agenda/EditArtistPanel.java index fb78abe..8b6eddc 100644 --- a/Agenda/EditArtistPanel.java +++ b/Agenda/EditArtistPanel.java @@ -49,11 +49,13 @@ public class EditArtistPanel extends JFrame { JPanel panel5 = new JPanel(); JLabel image = new JLabel("Image: "); + image.setVisible(false); panel5.add(image); center.add(panel5); JPanel panel6 = new JPanel(); JTextField imageTF = new JTextField("null", 15); + imageTF.setVisible(false); panel6.add(imageTF); center.add(panel6); diff --git a/Agenda/EditEventPanel.java b/Agenda/EditEventPanel.java index 4133503..9d8c51b 100644 --- a/Agenda/EditEventPanel.java +++ b/Agenda/EditEventPanel.java @@ -221,9 +221,9 @@ public class EditEventPanel extends JFrame{ String stageName = (String)stage2.getSelectedItem(); - Stage stage = null; + AgendaStage stage = null; - for(Stage s : agenda.getStages()) + for(AgendaStage s : agenda.getStages()) { if (s.getName().equals(stageName)) { diff --git a/Agenda/EditStagePanel.java b/Agenda/EditStagePanel.java index cf62338..fd5ae50 100644 --- a/Agenda/EditStagePanel.java +++ b/Agenda/EditStagePanel.java @@ -18,7 +18,7 @@ public class EditStagePanel extends JFrame{ private static final long serialVersionUID = 1; - public EditStagePanel(Agenda agenda, Stage sta) + public EditStagePanel(Agenda agenda, AgendaStage sta) { super("Stage editscreen!"); setDefaultCloseOperation(HIDE_ON_CLOSE); @@ -59,7 +59,7 @@ public class EditStagePanel extends JFrame{ String description = descriptionTF.getText(); boolean alreadyExists = false; - for (Stage stage : agenda.getStages()) + for (AgendaStage stage : agenda.getStages()) { if (stage.getName().equals(name) && !stage.equals(sta)) { @@ -101,10 +101,10 @@ public class EditStagePanel extends JFrame{ if(JOptionPane.showConfirmDialog(null, "Are you sure you want to remove this stage?", "Remove Stage", JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION) { - Iterator it = agenda.getStages().iterator(); + Iterator it = agenda.getStages().iterator(); while(it.hasNext()) { - Stage s = it.next(); + AgendaStage s = it.next(); if(s.equals(sta)) { it.remove(); diff --git a/Agenda/Event.java b/Agenda/Event.java index cc89824..c873c43 100644 --- a/Agenda/Event.java +++ b/Agenda/Event.java @@ -19,13 +19,13 @@ public class Event implements Serializable { private int stopHour; private int stopMinute; private Artist artist; - private Stage stage; + private AgendaStage stage; private String description; private int expectedPopularity; public Event(String eventName, int startYear, int startMonth, int startDay, int startHour, int startMinute, int endYear, int endMonth, - int endDay, int endHour, int endMinute, Artist artist, Stage stage, + int endDay, int endHour, int endMinute, Artist artist, AgendaStage stage, String description, int expectedPopularity) { this.eventName = eventName; this.startDate = new GregorianCalendar(startYear, startMonth - 1, @@ -43,7 +43,7 @@ public class Event implements Serializable { } public Event(String eventName, GregorianCalendar startDate, - GregorianCalendar endDate, Artist artist, Stage stage, + GregorianCalendar endDate, Artist artist, AgendaStage stage, String description, int expectedPopularity) { this.eventName = eventName; this.startDate = startDate; @@ -86,7 +86,7 @@ public class Event implements Serializable { return this.description; } - public Stage getStage() { + public AgendaStage getStage() { return this.stage; } @@ -132,7 +132,7 @@ public class Event implements Serializable { this.expectedPopularity = popularity; } - public void setStage(Stage stage) { + public void setStage(AgendaStage stage) { this.stage = stage; } diff --git a/Agenda/MenuBar.java b/Agenda/MenuBar.java index 6448933..84f451f 100644 --- a/Agenda/MenuBar.java +++ b/Agenda/MenuBar.java @@ -82,7 +82,8 @@ public class MenuBar extends JMenuBar { public void actionPerformed(ActionEvent e) { if(JOptionPane.showConfirmDialog(null, "Are you sure you want to close this program?", "Close Agenda", JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION) { - System.exit(0); + w.setVisible(false); + w.dispose(); } } }); diff --git a/Agenda/PanelArtSta.java b/Agenda/PanelArtSta.java index fa54cb1..b695bd0 100644 --- a/Agenda/PanelArtSta.java +++ b/Agenda/PanelArtSta.java @@ -105,7 +105,7 @@ public class PanelArtSta extends JPanel implements Panel{ else { dataStage = new Object[1]; - dataStage[0] = new Stage("Geen Stages", "Geen Stages"); + dataStage[0] = new AgendaStage("Geen Stages", "Geen Stages"); stages.setEnabled(false); } } diff --git a/Agenda/Window.java b/Agenda/Window.java index 9a2df79..fef9a21 100644 --- a/Agenda/Window.java +++ b/Agenda/Window.java @@ -4,7 +4,6 @@ package Agenda; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; -import java.awt.FlowLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; diff --git a/Applicatie/ControlPanel.java b/Applicatie/ControlPanel.java index dbacaa5..d135e2c 100644 --- a/Applicatie/ControlPanel.java +++ b/Applicatie/ControlPanel.java @@ -19,13 +19,13 @@ public class ControlPanel extends JPanel private static final long serialVersionUID = 6805244250902524351L; private Panel p; + JLabel timeLabel; - public ControlPanel(Panel p) + public ControlPanel() { super(); BoxLayout box = new BoxLayout(this, BoxLayout.X_AXIS); setLayout(box); - this.p = p; setPreferredSize(new Dimension(0,50)); setBorder(BorderFactory.createLineBorder(new Color(180, 180, 180))); setBackground(new Color(220, 220, 220)); @@ -74,11 +74,11 @@ public class ControlPanel extends JPanel add(Box.createRigidArea(new Dimension(10,50))); JPanel timePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - timePanel.setPreferredSize(new Dimension(280,50)); - timePanel.setMaximumSize(new Dimension(280,50)); + timePanel.setPreferredSize(new Dimension(300,50)); + timePanel.setMaximumSize(new Dimension(300,50)); add(timePanel); { - JLabel timeLabel = new JLabel("00:00 00-00-000"); + timeLabel = new JLabel("00:00 00-00-000"); timeLabel.setFont(new Font("Segoe UI", Font.PLAIN, 20)); timePanel.add(timeLabel); @@ -109,7 +109,7 @@ public class ControlPanel extends JPanel peopleButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { - p.addVisitors(300); + p.addVisitors(1); } }); peoplePanel.add(peopleButton); @@ -128,4 +128,19 @@ public class ControlPanel extends JPanel } } + + public void setPanel(Panel p) + { + this.p = p; + } + + public void setTime(String time) + { + timeLabel.setText(time); + } + + public void setPeople(int people) + { + + } } diff --git a/Applicatie/Images.java b/Applicatie/Images.java index 4bb45ff..2059b35 100644 --- a/Applicatie/Images.java +++ b/Applicatie/Images.java @@ -23,6 +23,7 @@ public class Images images.put("stage1", loadImage("images/stage3.png")); images.put("visitor", loadImage("images/visitor.png")); images.put("food", loadImage("images/food.png")); + images.put("waypoint", loadImage("images/waypoint.png")); } public static Image loadImage(String path) diff --git a/Applicatie/MenuBar.java b/Applicatie/MenuBar.java index 9a01e88..bf4854c 100644 --- a/Applicatie/MenuBar.java +++ b/Applicatie/MenuBar.java @@ -6,6 +6,7 @@ import java.awt.event.ActionListener; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; +import javax.swing.JOptionPane; public class MenuBar extends JMenuBar { @@ -17,17 +18,17 @@ public class MenuBar extends JMenuBar JMenu file = new JMenu("File"); - JMenuItem exit = new JMenuItem("Exit"); - exit.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - w.setVisible(false); - w.dispose(); + JMenuItem item = new JMenuItem("New"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + NewWorldPanel world = new NewWorldPanel(w.getPanel()); } }); + file.add(item); - JMenuItem agenda = new JMenuItem("Open Agenda"); + JMenuItem agenda = new JMenuItem("Open Planner"); agenda.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -35,41 +36,91 @@ public class MenuBar extends JMenuBar new Agenda.Window(); } }); - - JMenuItem save = new JMenuItem("Save terrain"); - save.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - SaveLoad.save(w.getPanel()); + file.add(agenda); + + item = new JMenuItem("Load agenda"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + w.getPanel().agenda.loadAgenda(); } }); - - JMenuItem load = new JMenuItem("Load terrain"); - load.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { + file.add(item); + + item = new JMenuItem("Load terrain"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { SaveLoad.load(w.getPanel()); } }); - - JMenuItem loadagenda = new JMenuItem("Load agenda"); - loadagenda.addActionListener(new ActionListener() + file.add(item); + + item = new JMenuItem("Save terrain"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + SaveLoad.save(w.getPanel()); + } + }); + file.add(item); + + file.addSeparator(); + + item = new JMenuItem("Agenda"); + item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - w.getPanel().getAgenda().loadAgenda(); - w.getPanel().addVisitors(); + new Agenda.Window(); + } + }); + file.add(item); + + file.addSeparator(); + + item = new JMenuItem("Exit"); + item.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + w.setVisible(false); + w.dispose(); } }); - file.add(agenda); - file.add(loadagenda); - file.add(load); - file.add(save); - file.add(exit); - + file.add(item); add(file); + + file = new JMenu("Path"); + + item = new JMenuItem("New Path"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + w.getPanel().startPath(); + } + }); + + file.add(item); + add(file); + + file = new JMenu("Help"); + + item = new JMenuItem("About"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + JOptionPane.showMessageDialog(w.getFrames()[0],"Festivalplanner\nMade by: Wesley de Hek, Kenneth van Ewijk, Remco Sannen, Yorick Rommers & Guus van Dongen "); + } + }); + file.add(item); + add(file); + } } \ No newline at end of file diff --git a/Applicatie/NewWorldPanel.java b/Applicatie/NewWorldPanel.java new file mode 100644 index 0000000..235e3ba --- /dev/null +++ b/Applicatie/NewWorldPanel.java @@ -0,0 +1,139 @@ +package Applicatie; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +import javax.imageio.ImageIO; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; + +@SuppressWarnings("serial") +public class NewWorldPanel extends JFrame { + + BufferedImage grass,sand,selectedImage; + + public NewWorldPanel(Panel topPanel) { + super("New World"); + setDefaultCloseOperation(HIDE_ON_CLOSE); + setResizable(false); + + try { + grass = ImageIO.read(new File("images/grassIcon.jpg")); + sand = ImageIO.read(new File("images/sand.jpg")); + selectedImage = grass; + } + catch(IOException e) { + e.printStackTrace(); + } + String[] terrains = {"Grass", "Sand"}; + JPanel mainPanel = new JPanel(new BorderLayout()); + JButton button; + JLabel label; + JTextField heightTextField; + JTextField widthTextField; + JComboBox terrainBox; + JLabel imageLabel; + + //Top: + JPanel panel = new JPanel(); + BoxLayout box = new BoxLayout(panel, BoxLayout.Y_AXIS); + panel.setLayout(box); + panel.add(Box.createRigidArea(new Dimension(0,10))); + JPanel linePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + label = new JLabel(" Enter your preferences: "); + linePanel.add(label); + panel.add(linePanel); + panel.add(Box.createRigidArea(new Dimension(0,10))); + //Width: + linePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + label = new JLabel("Width: "); + widthTextField = new JTextField("1920"); + widthTextField.setPreferredSize(new Dimension(100,20)); + linePanel.add(label); + linePanel.add(widthTextField); + panel.add(linePanel); + //Height: + linePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + label = new JLabel("Height: "); + heightTextField = new JTextField("1080"); + heightTextField.setPreferredSize(new Dimension(100,20)); + linePanel.add(label); + linePanel.add(heightTextField); + panel.add(linePanel); + //Terrain: + linePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + label = new JLabel("Terrain: "); + terrainBox = new JComboBox(terrains); + terrainBox.setPreferredSize(new Dimension(100,20)); + imageLabel = new JLabel(new ImageIcon(selectedImage)); + terrainBox.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + switch(terrainBox.getSelectedIndex()) { + case 0: + selectedImage = grass; + break; + case 1: + selectedImage = sand; + break; + } + imageLabel.setIcon(new ImageIcon(selectedImage)); + } + }); + linePanel.add(label); + linePanel.add(terrainBox); + panel.add(linePanel); + //Image: + linePanel = new JPanel(); + linePanel.add(imageLabel); + panel.add(linePanel); + + mainPanel.add(panel,BorderLayout.NORTH); + //Bottom: + panel = new JPanel(); + //Cancel: + button = new JButton("Cancel"); + button.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + NewWorldPanel.this.dispose(); + } + }); + panel.add(button); + + button = new JButton("Apply"); + button.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + topPanel.newWorld(Integer.parseInt(widthTextField.getText()),Integer.parseInt(heightTextField.getText()),terrainBox.getSelectedIndex()); + NewWorldPanel.this.dispose(); + } + }); + panel.add(button); + + mainPanel.add(panel,BorderLayout.SOUTH); + add(mainPanel); + + //Finishing off + pack(); + setSize(290,330); + setLocationRelativeTo(null); + setVisible(true); + } +} diff --git a/Applicatie/Panel.java b/Applicatie/Panel.java index e5c554b..6a04704 100644 --- a/Applicatie/Panel.java +++ b/Applicatie/Panel.java @@ -17,14 +17,18 @@ import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.GregorianCalendar; import java.util.Iterator; import javax.imageio.ImageIO; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.Timer; import Agenda.Agenda; +import Agenda.AgendaStage; import Listeners.Mouse; import Listeners.MouseMotion; import Listeners.MouseWheel; @@ -38,28 +42,32 @@ import Objects.Toilet; import Objects.Wall; @SuppressWarnings("serial") -public class Panel extends JPanel implements ActionListener +public class Panel extends JPanel implements ActionListener { + BufferedImage grass, sand; BufferedImage background; - BufferedImage podiumImage, toiletImage, entranceImage, pathImage, wallImage, foodImage; + BufferedImage podiumImage, toiletImage, entranceImage, pathImage, wallImage, foodImage, waypointImage; private int panelInfox, panelInfoy, scrollfactor; private ArrayList panelInfo = new ArrayList(); // private ArrayList panelTypes = new ArrayList(); ArrayList visitors = new ArrayList<>(); - + ArrayList waypoints = new ArrayList(); ArrayList objects = new ArrayList<>(); ArrayList paths = new ArrayList<>(); DrawObject dragObject = null; private DrawObject selectedObject; private String clickedOption = "drag"; private Path currentPath; + private int width = 1920; + private int height = 1080; Point2D cameraPoint = new Point2D.Double(getWidth() / 2, getHeight() / 2); float cameraScale = 1; PropertiesPanel pp; + ControlPanel cp; Agenda agenda; Point2D lastClickPosition = new Point(0, 0); Point lastMousePosition = new Point(0, 0); @@ -67,8 +75,12 @@ public class Panel extends JPanel implements ActionListener Images images = new Images(); javax.swing.Timer t; + SimpleDateFormat formatter; + GregorianCalendar date; + int currentTime = 540; int tick = 0; + // how to nieuwe dingen aan het panel toe te voegen: // maak bufferedimage global aan, voeg er een image aan toe, en voeg de // image aan panelInfo toe en het object aan panelTypes. @@ -85,19 +97,25 @@ public class Panel extends JPanel implements ActionListener this.selectionPosition = selectionPosition; } - Panel(PropertiesPanel pp) + Panel(PropertiesPanel pp, ControlPanel cp) { this.pp = pp; + this.cp = cp; + cp.setPanel(this); pp.setPanel(this); + date = new GregorianCalendar(); + formatter = new SimpleDateFormat("H:s dd-MM-yyyy"); try { - background = ImageIO.read(new File("images/grass.jpg")); + grass = ImageIO.read(new File("images/grass.jpg")); + sand = ImageIO.read(new File("images/sand.jpg")); podiumImage = ImageIO.read(new File("images/stageIcon.png")); toiletImage = ImageIO.read(new File("images/wcIcon.png")); entranceImage = ImageIO.read(new File("images/entranceIcon.png")); - pathImage = ImageIO.read(new File("images/pathIcon.png")); wallImage = ImageIO.read(new File("images/wallIcon.png")); foodImage = ImageIO.read(new File("images/foodIcon.png")); + waypointImage = ImageIO.read(new File("images/waypoint.png")); + background = grass; } catch (IOException e) { @@ -106,10 +124,10 @@ public class Panel extends JPanel implements ActionListener panelInfo.add(podiumImage); panelInfo.add(toiletImage); panelInfo.add(entranceImage); - panelInfo.add(pathImage); panelInfo.add(wallImage); panelInfo.add(foodImage); - + panelInfo.add(waypointImage); + agenda = new Agenda(); panelInfox = 0; @@ -125,11 +143,9 @@ public class Panel extends JPanel implements ActionListener addMouseMotionListener(new MouseMotion(this)); addMouseWheelListener(new MouseWheel(this)); - t = new Timer(1000/100, this); + t = new Timer(1000 / 10, this); } - - public int getPanelInfoLength() { int panelInfoLength = 0; @@ -146,17 +162,33 @@ public class Panel extends JPanel implements ActionListener switch (index) { case 0: - return new Stage(null); + ArrayList stages = agenda.getStages(); + Object[] s = new Object[stages.size()]; + AgendaStage stage = null; + if (stages.size() != 0) { + for (int i = 0; i < stages.size(); i++) { + s[i] = stages.get(i); + } + + stage = (AgendaStage) JOptionPane.showInputDialog(null, + "Select the right Stage", "Select Stage", + JOptionPane.PLAIN_MESSAGE, null, s, "stage"); + } + if (stage != null){ + return new Stage(null, stage); + } else { + return null; + } case 1: return new Toilet(null); case 2: return new Entrance(null); case 3: - return new OldPath(null); - case 4: return new Wall(null); - case 5: + case 4: return new Food(null); + case 6: + return new Waypoint(null); default: return null; } @@ -167,14 +199,39 @@ public class Panel extends JPanel implements ActionListener objects.add(dragObject); } + public void addWaypoint(Waypoint w) + { + waypoints.add(w); + } + + public ArrayList getWaypoints() + { + return waypoints; + } + + public int getNextTarget() + { + int last = 0; + for (Waypoint w : waypoints) + { + System.out.println(waypoints); + if (w.getSelf() > last) + { + last = w.getSelf(); + } + } + System.out.println(last); + return last; + } + public void addVisitors() { visitors.add(new Visitor("visitor", new Point(100, 300), agenda, objects)); } - + public void addVisitors(int count) { - for(int i = 0 ; i < count ; i++) + for (int i = 0; i < count; i++) { visitors.add(new Visitor("visitor", new Point(100, 300), agenda, objects)); } @@ -202,7 +259,8 @@ public class Panel extends JPanel implements ActionListener TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0, 0, 100, 100)); g2.setPaint(p); - g2.fill(new Rectangle2D.Double(-1920, -1080, 3840, 2160)); + + g2.fill(new Rectangle2D.Double(-width / 2, -height / 2, width, height)); BasicStroke stroke = new BasicStroke(10); g2.setStroke(stroke); @@ -215,11 +273,12 @@ public class Panel extends JPanel implements ActionListener { o.draw(g2); } - - for (Visitor v : visitors){ + + for (Visitor v : visitors) + { v.draw(g2); } - + g2.setTransform(oldTransform); if (currentPath != null) { // Display text while in path making modes. @@ -522,30 +581,69 @@ public class Panel extends JPanel implements ActionListener { this.agenda = agenda; } - - @Override - public void actionPerformed(ActionEvent e) { - tick++; - if ( tick >= 10 && visitors.size() > 0){ - tick = 0; - currentTime++; - System.out.println(currentTime); - } - - for (Visitor v: visitors){ - v.update(objects, currentTime, visitors); - } - repaint(); - + + public int getFieldWidth() + { + return width; + } + + public int getFieldHeight() + { + return height; } - public javax.swing.Timer getT() + @Override + public void actionPerformed(ActionEvent e) + { + tick++; + if (tick >= 10 && visitors.size() > 0) + { + tick = 0; + currentTime++; + date.setTimeInMillis(date.getTimeInMillis() + 1000); + cp.setTime(formatter.format(date.getTime())); + System.out.println(currentTime); + } + + for (Visitor v : visitors) + { + v.update(objects, currentTime, visitors, paths); + } + repaint(); + + } + + public Timer getT() { return t; } - public void setT(javax.swing.Timer t) + public ArrayList getPaths() + { + return paths; + } + + public void setT(Timer t) { this.t = t; } + + public void newWorld(int width, int height, int terrainIndex) + { + this.width = width; + this.height = height; + paths.clear(); + objects.clear(); + cameraScale = 1; + switch (terrainIndex) + { + case 0: + background = grass; + break; + case 1: + background = sand; + break; + } + repaint(); + } } diff --git a/Applicatie/PropertiesPanel.java b/Applicatie/PropertiesPanel.java index 218a208..792dd4e 100644 --- a/Applicatie/PropertiesPanel.java +++ b/Applicatie/PropertiesPanel.java @@ -23,19 +23,17 @@ import javax.swing.JTextField; import Objects.DrawObject; import Objects.Path; - @SuppressWarnings("serial") public class PropertiesPanel extends JPanel { DrawObject selectedObject = null; Path selectedPath = null; - + Panel p = null; Dimension spacerDimension = new Dimension(200, 10); - JLabel nameLabel; JPanel areaPanel; Component rigidArea; @@ -88,10 +86,11 @@ public class PropertiesPanel extends JPanel buttonPanel.setMaximumSize(new Dimension(200, 40)); buttonPanel.add(buttonLabel); add(buttonPanel); - - //AREA PANEL: AVAILABLE FOR ACTIONLISTENER + + // AREA PANEL: AVAILABLE FOR ACTIONLISTENER areaPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); areaPanel.setVisible(false); + rigidArea = Box.createRigidArea(spacerDimension); rigidArea.setVisible(false); @@ -103,9 +102,10 @@ public class PropertiesPanel extends JPanel { public void actionPerformed(ActionEvent e) { - if(selectedObject != null) + if (selectedObject != null) p.removeObject(selectedObject); - else if(selectedPath != null) { + else if (selectedPath != null) + { p.removePath(selectedPath); } } @@ -118,6 +118,7 @@ public class PropertiesPanel extends JPanel { areaPanel.setVisible(!areaPanel.isVisible()); rigidArea.setVisible(!rigidArea.isVisible()); + } }); row1ButtonPanel.setPreferredSize(new Dimension(200, 50)); @@ -125,30 +126,33 @@ public class PropertiesPanel extends JPanel row1ButtonPanel.add(deleteButton); row1ButtonPanel.add(areaButton); add(row1ButtonPanel); - + add(rigidArea); - - //AREA PANEL + + // AREA PANEL JLabel areaLabel = new JLabel("Area size"); areaLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20)); - areaPanel.setPreferredSize(new Dimension(200, 180)); - areaPanel.setMaximumSize(new Dimension(200, 180)); + areaPanel.setPreferredSize(new Dimension(200, 150)); + areaPanel.setMaximumSize(new Dimension(200, 250)); areaPanel.add(areaLabel); add(areaPanel); { JPanel areaTopPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - areaTopPanel.setPreferredSize(new Dimension(200, 30)); + areaTopPanel.setPreferredSize(new Dimension(200, 50)); areaPanel.add(areaTopPanel); - JLabel areaTopLabel = new JLabel("Top "); + JLabel areaTopLabel = new JLabel("Top"); areaTopPanel.add(areaTopLabel); areaTopField = new JTextField(); - areaTopField.setPreferredSize(new Dimension(120, 25)); + areaTopField.setPreferredSize(new Dimension(140, 25)); + { areaTopField.addKeyListener(new KeyListener() { - public void keyTyped(KeyEvent e){} + public void keyTyped(KeyEvent e) + { + } public void keyReleased(KeyEvent e) { @@ -158,20 +162,24 @@ public class PropertiesPanel extends JPanel int top = Integer.parseInt(areaTopField.getText()); selectedObject.setAreaTop(top); p.update(); - } catch (NumberFormatException nfe) + } + catch (NumberFormatException nfe) { areaTopField.setBackground(Color.RED); } } - public void keyPressed(KeyEvent e){} + public void keyPressed(KeyEvent e) + { + } }); } areaTopPanel.add(areaTopField); } { JPanel areaBottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - areaBottomPanel.setPreferredSize(new Dimension(200, 30)); + areaBottomPanel.setPreferredSize(new Dimension(200, 50)); + areaPanel.add(areaBottomPanel); JLabel areaBottomLabel = new JLabel("Bottom"); @@ -182,7 +190,9 @@ public class PropertiesPanel extends JPanel areaBottomField.addKeyListener(new KeyListener() { - public void keyTyped(KeyEvent e){} + public void keyTyped(KeyEvent e) + { + } public void keyReleased(KeyEvent e) { @@ -192,31 +202,36 @@ public class PropertiesPanel extends JPanel int bottom = Integer.parseInt(areaBottomField.getText()); selectedObject.setAreaBottom(bottom); p.update(); - } catch (NumberFormatException nfe) + } + catch (NumberFormatException nfe) { areaBottomField.setBackground(Color.RED); } } - public void keyPressed(KeyEvent e){} + public void keyPressed(KeyEvent e) + { + } }); } areaBottomPanel.add(areaBottomField); } { JPanel areaLeftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - areaLeftPanel.setPreferredSize(new Dimension(200, 30)); + areaLeftPanel.setPreferredSize(new Dimension(200, 50)); areaPanel.add(areaLeftPanel); - JLabel areaLeftLabel = new JLabel("Left "); + JLabel areaLeftLabel = new JLabel("Left"); areaLeftPanel.add(areaLeftLabel); areaLeftField = new JTextField(); - areaLeftField.setPreferredSize(new Dimension(120, 25)); + areaLeftField.setPreferredSize(new Dimension(138, 25)); { areaLeftField.addKeyListener(new KeyListener() { - public void keyTyped(KeyEvent e){} + public void keyTyped(KeyEvent e) + { + } public void keyReleased(KeyEvent e) { @@ -226,31 +241,37 @@ public class PropertiesPanel extends JPanel int left = Integer.parseInt(areaLeftField.getText()); selectedObject.setAreaLeft(left); p.update(); - } catch (NumberFormatException nfe) + } + catch (NumberFormatException nfe) { areaLeftField.setBackground(Color.RED); } } - public void keyPressed(KeyEvent e){} + public void keyPressed(KeyEvent e) + { + } }); } areaLeftPanel.add(areaLeftField); } { JPanel areaRightPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - areaRightPanel.setPreferredSize(new Dimension(200, 30)); + + areaRightPanel.setPreferredSize(new Dimension(200, 50)); areaPanel.add(areaRightPanel); - JLabel areaRightLabel = new JLabel("Right "); + JLabel areaRightLabel = new JLabel("Right"); areaRightPanel.add(areaRightLabel); areaRightField = new JTextField(); - areaRightField.setPreferredSize(new Dimension(120, 25)); + areaRightField.setPreferredSize(new Dimension(130, 25)); { areaRightField.addKeyListener(new KeyListener() { - public void keyTyped(KeyEvent e){} + public void keyTyped(KeyEvent e) + { + } public void keyReleased(KeyEvent e) { @@ -260,13 +281,16 @@ public class PropertiesPanel extends JPanel int right = Integer.parseInt(areaRightField.getText()); selectedObject.setAreaRight(right); p.update(); - } catch (NumberFormatException nfe) + } + catch (NumberFormatException nfe) { areaRightField.setBackground(Color.RED); } } - public void keyPressed(KeyEvent e){} + public void keyPressed(KeyEvent e) + { + } }); } areaRightPanel.add(areaRightField); @@ -308,7 +332,8 @@ public class PropertiesPanel extends JPanel double xpos = Double.parseDouble(locationXField.getText()); selectedObject.setPosition(new Point2D.Double(xpos, selectedObject.getPosition().getY())); p.update(); - } catch (NumberFormatException nfe) + } + catch (NumberFormatException nfe) { locationXField.setBackground(Color.RED); } @@ -347,7 +372,8 @@ public class PropertiesPanel extends JPanel selectedObject.setPosition(new Point2D.Double(selectedObject.getPosition().getX(), ypos)); ; p.update(); - } catch (NumberFormatException nfe) + } + catch (NumberFormatException nfe) { locationYField.setBackground(Color.RED); @@ -394,9 +420,16 @@ public class PropertiesPanel extends JPanel { scaleField.setBackground(Color.WHITE); double scale = Double.parseDouble(scaleField.getText()); + if(scale<0 || (scale >0 && scale<0.2)) + { + scale=0.2; + scaleField.setText(scale+""); + } selectedObject.setScale(scale); + p.update(); - } catch (NumberFormatException nfe) + } + catch (NumberFormatException nfe) { scaleField.setBackground(Color.RED); } @@ -444,7 +477,8 @@ public class PropertiesPanel extends JPanel rotationField.setText(rotation + ""); selectedObject.setRotation(rotation); p.update(); - } catch (NumberFormatException nfe) + } + catch (NumberFormatException nfe) { rotationField.setBackground(Color.RED); } @@ -491,8 +525,8 @@ public class PropertiesPanel extends JPanel public void update() { - if(selectedObject != null) - fillFields(); + if (selectedObject != null) + fillFields(); } private void enableComponents(Container container, boolean enable) @@ -532,18 +566,18 @@ public class PropertiesPanel extends JPanel private void fillFields() { - - nameLabel.setText(selectedObject.getName()); - locationXField.setText(Math.round(selectedObject.getPosition().getX()) + ""); - locationYField.setText(Math.round(selectedObject.getPosition().getY()) + ""); - scaleField.setText((double) Math.round(selectedObject.getScale() * 10) / 10 + ""); - rotationField.setText(Math.round(selectedObject.getRotation() % 360) + ""); - - areaTopField.setText(selectedObject.getAreaTop() + ""); - areaBottomField.setText(selectedObject.getAreaBottom() + ""); - areaLeftField.setText(selectedObject.getAreaLeft() + ""); - areaRightField.setText(selectedObject.getAreaRight() + ""); + nameLabel.setText(selectedObject.getName()); + + locationXField.setText(Math.round(selectedObject.getPosition().getX()) + ""); + locationYField.setText(Math.round(selectedObject.getPosition().getY()) + ""); + scaleField.setText((double) Math.round(selectedObject.getScale() * 10) / 10 + ""); + rotationField.setText(Math.round(selectedObject.getRotation() % 360) + ""); + + areaTopField.setText(selectedObject.getAreaTop() + ""); + areaBottomField.setText(selectedObject.getAreaBottom() + ""); + areaLeftField.setText(selectedObject.getAreaLeft() + ""); + areaRightField.setText(selectedObject.getAreaRight() + ""); } @@ -551,14 +585,16 @@ public class PropertiesPanel extends JPanel { this.p = p; } - - public void setSelectedPath(Path path) { + + public void setSelectedPath(Path path) + { selectedObject = null; selectedPath = path; fillPathFields(); } - - private void fillPathFields() { + + private void fillPathFields() + { nameLabel.setText("Path"); enableComponents(this, true); locationXField.setEnabled(false); diff --git a/Applicatie/Visitor.java b/Applicatie/Visitor.java index da82621..1aab711 100644 --- a/Applicatie/Visitor.java +++ b/Applicatie/Visitor.java @@ -3,13 +3,19 @@ package Applicatie; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Shape; import java.awt.geom.AffineTransform; +import java.awt.geom.Area; import java.awt.geom.Point2D; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import Agenda.Agenda; import Agenda.Event; import Objects.DrawObject; +import Objects.Path; public class Visitor { @@ -22,6 +28,7 @@ public class Visitor ArrayList actions; Agenda agenda; ArrayList objects; + char target; public Visitor(String filename, Point2D position, Agenda agenda, ArrayList objects) { @@ -34,6 +41,7 @@ public class Visitor this.agenda = agenda; this.objects = objects; fillActions(); + target = 'z'; } public void draw(Graphics2D g2) @@ -49,12 +57,11 @@ public class Visitor AffineTransform tx = new AffineTransform(); tx.scale(scale, scale); tx.translate(position.getX(), position.getY()); -// System.out.println(position.getX()); tx.rotate(rotation, image.getWidth(null) / 2, image.getHeight(null) / 2); return tx; } - public void update(ArrayList objects, int currentTime, ArrayList visitors) + public void update(ArrayList objects, int currentTime, ArrayList visitors, ArrayList paths) { Point2D target = new Point(500, 500); for (Action a : actions) @@ -65,57 +72,179 @@ public class Visitor } } - moveToTarget(target, objects, visitors); + + moveToTarget(target, objects, visitors, paths); } - public void moveToTarget(Point2D target, ArrayList objects, ArrayList visitors) + public void moveToTarget(Point2D target, ArrayList objects, ArrayList visitors, ArrayList paths) { - - double newRot = Math.atan2(target.getY() - position.getY(), target.getX() - position.getX()); - - int difx = (int) (target.getX() - position.getX()); - int dify = (int) (target.getY() - position.getY()); - int distance = (int) Math.sqrt((difx * difx) + (dify * dify)); - - if (rotation > newRot && distance > 10) + Point2D tar = target; + boolean hasPathBelow = false; + for (Path p : paths) { - rotation -= 0.15; - } - else if (rotation < newRot && distance > 10) - { - rotation += 0.15; - } - - Point2D oldPosition = position; - - // face direction - float directionX = (float) Math.cos(rotation); - float directionY = (float) Math.sin(rotation); - - if (distance > 10) - { - position = new Point2D.Double((position.getX() + directionX * speed), (position.getY() + directionY * speed)); - } - - boolean possible = true; - for (DrawObject object : objects) - { - if (hitTest(object)) + if (p.containsPoint(position)) { - possible = false; + hasPathBelow = true; + break; + } + Shape containsShape = p.containsPointShape(position); + if(containsShape != null) + { + tar = new Point2D.Double(containsShape.getBounds().getCenterX(), containsShape.getBounds().getCenterY()); } } -// for (Visitor object : visitors) -// { -// if (hitTestVisitor(object) && object != this) -// { -// possible = false; -// } -// } - if (possible == false) + + if (hasPathBelow) { - position = oldPosition; - rotation += 0.2; + double newRot = Math.atan2(tar.getY() - position.getY(), tar.getX() - position.getX()); + + int difx = (int) (tar.getX() - position.getX()); + int dify = (int) (tar.getY() - position.getY()); + int distance = (int) Math.sqrt((difx * difx) + (dify * dify)); + + if (rotation > newRot && distance > 10) + { + rotation -= 0.15; + } + else if (rotation < newRot && distance > 10) + { + rotation += 0.15; + } + + Point2D oldPosition = position; + + // face direction + float directionX = (float) Math.cos(rotation); + float directionY = (float) Math.sin(rotation); + + if (distance > 10) + { + position = new Point2D.Double((position.getX() + directionX * speed), (position.getY() + directionY * speed)); + } + + boolean possible = true; + for (DrawObject object : objects) + { + if (hasCollisionDO(object)) + { + possible = false; + } + } + for (Visitor object : visitors) + { + if (hasCollision(object) && object != this) + { + possible = false; + } + } + if (possible == false) + { + position = oldPosition; + rotation += 0.2; + } + } + else + { + HashMap values = new HashMap(); + for (Path p : paths) + { + for (Shape s : p.getPath()) + { + Rectangle b = s.getBounds(); + double maxx = b.getMaxX(); + double minx = b.getMinX(); + double maxy = b.getMaxY(); + double miny = b.getMinY(); + + Point2D.Double[] points = new Point2D.Double[4]; + points[0] = new Point2D.Double(minx, miny); + points[1] = new Point2D.Double(minx, maxy); + points[2] = new Point2D.Double(maxx, miny); + points[3] = new Point2D.Double(maxx, maxy); + + Double lastdistance = null; + for (Point2D.Double point : points) + { + double distance = Point2D.distance(point.getX(), point.getY(), position.getX(), position.getY()); + if (lastdistance == null) + { + lastdistance = distance; + continue; + } + if (distance < lastdistance) + { + lastdistance = distance; + } + } + values.put(lastdistance, s); + + } + } + Double lastdistance = null; + Shape lastShape = null; + for (Map.Entry e : values.entrySet()) + { + double distance = e.getKey(); + if (lastdistance == null) + { + lastdistance = distance; + continue; + } + if (distance < lastdistance) + { + lastdistance = distance; + } + } + lastShape = values.get(lastdistance); + + Point2D.Double target2 = new Point2D.Double(lastShape.getBounds().getCenterX(), lastShape.getBounds().getCenterY()); + + double newRot = Math.atan2(target2.getY() - position.getY(), target2.getX() - position.getX()); + + int difx = (int) (target2.getX() - position.getX()); + int dify = (int) (target2.getY() - position.getY()); + int distance = (int) Math.sqrt((difx * difx) + (dify * dify)); + + if (rotation > newRot && distance > 10) + { + rotation -= 0.15; + } + else if (rotation < newRot && distance > 10) + { + rotation += 0.15; + } + + Point2D oldPosition = position; + + // face direction + float directionX = (float) Math.cos(rotation); + float directionY = (float) Math.sin(rotation); + + if (distance > 10) + { + position = new Point2D.Double((position.getX() + directionX * speed), (position.getY() + directionY * speed)); + } + + boolean possible = true; + for (DrawObject object : objects) + { + if (hasCollisionDO(object)) + { + possible = false; + } + } + for (Visitor object : visitors) + { + if (hasCollision(object) && object != this) + { + possible = false; + } + } + if (possible == false) + { + position = oldPosition; + rotation += 0.2; + } } } @@ -197,27 +326,52 @@ public class Visitor time = (hours * 100) + minutes; return time; } - - public int getEndX() - { + + public boolean hasCollisionDO(DrawObject object){ Image image = Images.getImage(filename); - return (int) (position.getX() + image.getWidth(null)); + Image image2 = Images.getImage(object.getFileName()); + Rectangle recta = new Rectangle((int)position.getX(),(int)position.getY(), image.getWidth(null), image.getHeight(null)); + Rectangle rectb = new Rectangle((int)object.getPosition().getX(),(int)object.getPosition().getY(), image2.getWidth(null), image2.getHeight(null)); + + Area a = new Area(recta); + Area b = new Area(rectb); + + AffineTransform transA = new AffineTransform(); + transA.rotate(rotation, position.getX(), position.getY()); + + AffineTransform transB = new AffineTransform(); + transB.rotate(Math.toRadians(object.getRotation()), object.getPosition().getX(), object.getPosition().getY()); + + Area aa = a.createTransformedArea(transA); + Area bb = b.createTransformedArea(transB); + + if(bb.intersects(aa.getBounds2D())){ + return true; + } + return false; } - public int getEndY() - { + public boolean hasCollision(Visitor v){ Image image = Images.getImage(filename); - return (int) (position.getY() + image.getHeight(null)); + Rectangle a = new Rectangle((int)position.getX(),(int)position.getY(), image.getWidth(null), image.getHeight(null)); + Rectangle b = new Rectangle((int)v.position.getX(),(int)v.position.getY(), image.getWidth(null), image.getHeight(null)); + + Area aa = new Area(a); + Area bb = new Area(b); + + AffineTransform af = new AffineTransform(); + af.rotate(rotation, position.getX(), position.getY()); + + AffineTransform bf = new AffineTransform(); + bf.rotate(v.rotation, v.position.getX(), v.position.getY()); + + Area ra = aa.createTransformedArea(af); + Area rb = bb.createTransformedArea(bf); + + if(ra.intersects(rb.getBounds2D())){ + return true; + } + return false; } - public boolean hitTest(DrawObject to2) - { - return (getEndX() >= to2.getPosition().getX() && getEndY() >= to2.getPosition().getY() && to2.getEndX() >= position.getX() && to2.getEndY() >= position.getY()); - - } - -// public boolean hitTestVisitor(Visitor v) -// { -// return (getEndX() >= v.position.getX() && getEndY() >= v.position.getY() && v.getEndX() >= position.getX() && v.getEndY() >= position.getY()); -// } } \ No newline at end of file diff --git a/Applicatie/Waypoint.java b/Applicatie/Waypoint.java new file mode 100644 index 0000000..7e00775 --- /dev/null +++ b/Applicatie/Waypoint.java @@ -0,0 +1,42 @@ +package Applicatie; + +import java.awt.geom.Point2D; + +import Objects.DrawObject; + +public class Waypoint extends DrawObject +{ + private int[] options; + private int self; + public Waypoint(Point2D position) + { + super("waypoint", position); + } + + @Override + public String getName() + { + return "Waypoint"; + } + + public int[] getOptions() + { + return options; + } + + public void setOptions(int[] options) + { + this.options = options; + } + + public int getSelf() + { + return self; + } + + public void setSelf(int self) + { + this.self = self; + } + +} diff --git a/Applicatie/Window.java b/Applicatie/Window.java index 0539319..874da98 100644 --- a/Applicatie/Window.java +++ b/Applicatie/Window.java @@ -24,9 +24,9 @@ public class Window extends JFrame // CONTENT PANELS JPanel contentPanel = new JPanel(new BorderLayout()); PropertiesPanel pp = new PropertiesPanel(); - fp = new Panel(pp); + ControlPanel cp = new ControlPanel(); + fp = new Panel(pp, cp); contentPanel.add(fp, BorderLayout.CENTER); - ControlPanel cp = new ControlPanel(fp); contentPanel.add(cp, BorderLayout.SOUTH); contentPanel.add(pp, BorderLayout.EAST); contentPanel.add(fp, BorderLayout.CENTER); diff --git a/Listeners/Keyboard.java b/Listeners/Keyboard.java index b2c5984..f647613 100644 --- a/Listeners/Keyboard.java +++ b/Listeners/Keyboard.java @@ -5,7 +5,9 @@ import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.geom.Point2D; +import Applicatie.NewWorldPanel; import Applicatie.Panel; +import Applicatie.SaveLoad; public class Keyboard implements KeyListener { @@ -54,6 +56,15 @@ public class Keyboard implements KeyListener { else if(e.getKeyCode() == e.VK_P) { panel.startPath(); } + else if(e.getKeyCode() == e.VK_N) { + NewWorldPanel world = new NewWorldPanel(panel); + } + else if(e.getKeyCode() == e.VK_S) { + SaveLoad.save(panel); + } + else if(e.getKeyCode() == e.VK_O) { + SaveLoad.load(panel); + } panel.repaint(); } diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index e611c2c..13c544d 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -4,11 +4,14 @@ import java.awt.Color; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import Applicatie.Panel; +import Applicatie.Waypoint; import Objects.DrawObject; -import Objects.Stage; +import Objects.Path; +import Objects.Entrance; public class Mouse extends MouseAdapter { @@ -27,7 +30,8 @@ public class Mouse extends MouseAdapter Point2D clickPoint = panel.getClickPoint(e.getPoint()); panel.setLastClickPosition(clickPoint); panel.setLastMousePosition(e.getPoint()); - if(!panel.getClickedOption().equals("Path")) { + if (!panel.getClickedOption().equals("Path")) + { if (e.getY() < 150) { int i = 0; @@ -37,14 +41,16 @@ public class Mouse extends MouseAdapter if (e.getX() >= panel.getScrollfactor() && e.getX() < last + image.getWidth() + panel.getScrollfactor()) { DrawObject tempDrawObj = panel.createNewDrawObject(i); + if (tempDrawObj != null){ tempDrawObj.setPosition(clickPoint); - if(!panel.getObjects().isEmpty()) + if (!panel.getObjects().isEmpty()) panel.clearObjectSelection(); panel.setDragObject(tempDrawObj); panel.getDragObject().setSelected(true); panel.getPP().setSelected(tempDrawObj); panel.setSelectedObject(tempDrawObj); selectedObject = tempDrawObj; + } break; } i++; @@ -101,7 +107,7 @@ public class Mouse extends MouseAdapter panel.getPP().setSelected(o); panel.setSelectedObject(o); panel.setSelectionPosition(panel.getDragObject().getPosition()); - + } } panel.checkPath(clickPoint); @@ -114,21 +120,52 @@ public class Mouse extends MouseAdapter selectedObject = null; } } - else { //Making path. - panel.getCurrentPath().addPoint(new Point2D.Double(clickPoint.getX(),clickPoint.getY())); + else + { // Making path. + panel.getCurrentPath().addPoint(new Point2D.Double(clickPoint.getX(), clickPoint.getY())); } panel.repaint(); } - public void mouseReleased(MouseEvent e) { if(panel.getDragObject() != null) { if(panel.getDragObject().getRectangleColor() != Color.RED) { + if(panel.getDragObject() instanceof Entrance) + { + Rectangle2D rect = panel.getDragObject().getRectangle(); + double xl = (panel.getFieldWidth()/2) + rect.getMinX(); + double xr = panel.getFieldWidth() - xl+rect.getWidth(); + double yt = (panel.getFieldHeight()/2) + rect.getMinY(); + double yb = panel.getFieldHeight() - yt+rect.getHeight(); + if(xl < xr && xl < yt && xl < yb) + { + panel.getDragObject().setPosition(new Point2D.Double(-panel.getFieldWidth()/2, rect.getMinY())); + } + else if(xr < xl && xr < yt && xr < yb) + { + panel.getDragObject().setPosition(new Point2D.Double(panel.getFieldWidth()/2 - rect.getWidth(), rect.getMinY())); + } + else if(yt < xl && yt < xr && yt < yb) + { + panel.getDragObject().setPosition(new Point2D.Double(rect.getMinX(), -panel.getFieldHeight()/2)); + } + else if(yb < xl && yb < yt && yb < xr) + { + panel.getDragObject().setPosition(new Point2D.Double(rect.getMinX(), panel.getFieldHeight()/2 - rect.getHeight())); + } + else + { + panel.getDragObject().setPosition(new Point2D.Double(-panel.getFieldWidth()/2, -panel.getFieldHeight()/2)); + } + + } + panel.setDragObject(null); panel.setClickedOption("drag"); } - else { + else + { panel.getDragObject().setPosition(panel.getSelectionPosition()); panel.getDragObject().setRectangleColor(Color.BLACK); } diff --git a/Listeners/MouseWheel.java b/Listeners/MouseWheel.java index b71ab7b..a9269b1 100644 --- a/Listeners/MouseWheel.java +++ b/Listeners/MouseWheel.java @@ -6,6 +6,7 @@ import java.awt.event.MouseWheelListener; import java.awt.geom.Point2D; import Applicatie.Panel; +import Objects.DrawObject; public class MouseWheel implements MouseWheelListener { diff --git a/Objects/DrawObject.java b/Objects/DrawObject.java index 9e1c9c6..22e1c5b 100644 --- a/Objects/DrawObject.java +++ b/Objects/DrawObject.java @@ -104,7 +104,6 @@ public abstract class DrawObject implements Serializable AffineTransform tx = new AffineTransform(); tx.scale(scale, scale); tx.translate(position.getX(), position.getY()); - System.out.println(position.getX()); tx.rotate(Math.toRadians(rotation), (width + areaLeft + areaRight) / 2, (height + areaTop + areaBottom) / 2); return tx; } diff --git a/Objects/Path.java b/Objects/Path.java index 67cbe12..9968691 100644 --- a/Objects/Path.java +++ b/Objects/Path.java @@ -16,103 +16,162 @@ import javax.imageio.ImageIO; /** * Create's a path. + * * @author Wesley de Hek * @version 1.2 */ -public class Path { - +public class Path +{ private ArrayList points; private ArrayList lines; private Point2D tempPoint; private BufferedImage pathBackground; - + /** * Constructor. */ - public Path() { + public Path() + { points = new ArrayList<>(); lines = new ArrayList<>(); - try { + try + { pathBackground = ImageIO.read(new File("images/newPath.png")); - } catch (IOException e) { + } + catch (IOException e) + { e.printStackTrace(); } } - + /** * Draws the path. - * @param g2 - the Graphics2D object. + * + * @param g2 + * - the Graphics2D object. */ - public void draw(Graphics2D g2) { - TexturePaint paint = new TexturePaint(pathBackground,new Rectangle2D.Double(0,0,128,128)); + public void draw(Graphics2D g2) + { + TexturePaint paint = new TexturePaint(pathBackground, new Rectangle2D.Double(0, 0, 128, 128)); g2.setPaint(paint); - g2.setStroke(new BasicStroke(30,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); - if(!points.isEmpty()) { - for(int i = 1; i < points.size(); i++) { - Point2D previousPoint = points.get(i-1); + g2.setStroke(new BasicStroke(30, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); + if (!points.isEmpty()) + { + for (int i = 1; i < points.size(); i++) + { + Point2D previousPoint = points.get(i - 1); Point2D point = points.get(i); - g2.drawLine((int) previousPoint.getX(),(int) previousPoint.getY(),(int) point.getX(),(int) point.getY()); + g2.drawLine((int) previousPoint.getX(), (int) previousPoint.getY(), (int) point.getX(), (int) point.getY()); } - //Drawing line that follows the mouse: - if(tempPoint != null) { - Point2D lastPoint = points.get(points.size()-1); - g2.drawLine((int) lastPoint.getX(),(int) lastPoint.getY(),(int) tempPoint.getX(),(int) tempPoint.getY()); + // Drawing line that follows the mouse: + if (tempPoint != null) + { + Point2D lastPoint = points.get(points.size() - 1); + g2.drawLine((int) lastPoint.getX(), (int) lastPoint.getY(), (int) tempPoint.getX(), (int) tempPoint.getY()); } } } + + /** + * Check if one of the lines contains the given point and return the Shape. + * + * @param point + * - The point of your object. + * @return if the Shape contains the point. + */ + public Shape containsPointShape(Point2D point) + { + for (Shape line : getPath()) + { + if (line.contains(point)) + { + return line; + } + } + return null; + } /** * Check if one of the lines contains the given point. - * @param point - the point you want to containment with. + * + * @param point + * - the point you want to containment with. * @return if the path contains the point. */ - public boolean containsPoint(Point2D point) { - for(Shape line : getPath()) { - if(line.contains(point)) { + public boolean containsPoint(Point2D point) + { + for (Shape line : getPath()) + { + if (line.contains(point)) + { return true; } } return false; } + public boolean intersectsRect(Rectangle2D rect) + { + for(Shape line : getPath()) + { + if(line.intersects(rect)) + { + return true; + } + } + return false; + } + /** * Get array with line's from the points. + * * @return a array with all the lines of the path. */ - public ArrayList getPath() { + public ArrayList getPath() + { lines.clear(); - for(int i = 1; i < points.size(); i++) { - Point2D previousPoint = points.get(i-1); + for (int i = 1; i < points.size(); i++) + { + Point2D previousPoint = points.get(i - 1); Point2D point = points.get(i); - Line2D line = new Line2D.Double((int) previousPoint.getX(),(int) previousPoint.getY(),(int) point.getX(),(int) point.getY()); - BasicStroke stroke = new BasicStroke(30,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND); + Line2D line = new Line2D.Double((int) previousPoint.getX(), (int) previousPoint.getY(), (int) point.getX(), (int) point.getY()); + BasicStroke stroke = new BasicStroke(30, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); lines.add(stroke.createStrokedShape(line)); } - return lines; + return lines; } - + /** * Add a point to the path. - * @param point - the point you want the path to pass. + * + * @param point + * - the point you want the path to pass. */ - public void addPoint(Point2D point) { + public void addPoint(Point2D point) + { points.add(point); } - + /** * Get all the path points. + * * @return all the points of the path. */ - public ArrayList getPoints() { + public ArrayList getPoints() + { return points; - } - + } + /** - * Set the temporary point, useful for following the mouse while drawing the path. - * @param point - the point of the mouse. + * Set the temporary point, useful for following the mouse while drawing the + * path. + * + * @param point + * - the point of the mouse. */ - public void setTempPoint(Point2D point) { + public void setTempPoint(Point2D point) + { tempPoint = point; - } + } } \ No newline at end of file diff --git a/Objects/Stage.java b/Objects/Stage.java index c006d71..176f9cb 100644 --- a/Objects/Stage.java +++ b/Objects/Stage.java @@ -1,18 +1,28 @@ package Objects; import java.awt.geom.Point2D; +import java.util.ArrayList; -public class Stage extends DrawObject -{ - public Stage(Point2D position) - { +import javax.swing.JOptionPane; + +import Agenda.Agenda; +import Agenda.AgendaStage; + +public class Stage extends DrawObject { + AgendaStage stage; + + public Stage(Point2D position, AgendaStage stage) { super("stage", position); + this.stage = stage; } @Override - public String getName() - { + public String getName() { return "Stage"; } + public AgendaStage getStage() { + return stage; + } + }