From 7c28dd3a168e56241a0bd716eb845f44ab87f366 Mon Sep 17 00:00:00 2001 From: xrgman Date: Wed, 8 Apr 2015 14:03:58 +0200 Subject: [PATCH] spawn hoi --- Agenda/AddArtistPanel.java | 2 + Agenda/AddEventPanel.java | 6 +- Agenda/AddStagePanel.java | 4 +- Agenda/Agenda.java | 10 +- Agenda/AgendaStage.java | 41 +++++ Agenda/EditArtistPanel.java | 2 + Agenda/EditEventPanel.java | 4 +- Agenda/EditStagePanel.java | 8 +- Agenda/Event.java | 10 +- Agenda/MenuBar.java | 3 +- Agenda/PanelArtSta.java | 2 +- Applicatie/Action.java | 11 +- Applicatie/ControlPanel.java | 35 ++++- Applicatie/Images.java | 1 + Applicatie/MenuBar.java | 20 +++ Applicatie/NewWorldPanel.java | 18 ++- Applicatie/Panel.java | 140 +++++++++++++---- Applicatie/PropertiesPanel.java | 16 +- Applicatie/Visitor.java | 243 +++++++++++++++++++++++------ Applicatie/Waypoint.java | 43 +++++ Applicatie/WaypointPopup.java | 57 +++++++ Applicatie/Window.java | 4 +- Listeners/Keyboard.java | 36 ++++- Listeners/Mouse.java | 57 +++++-- Listeners/WindowFocusListener.java | 25 +++ Objects/DrawObject.java | 4 + Objects/Entrance.java | 33 ++++ Objects/Path.java | 146 ++++++++++++----- Objects/Stage.java | 17 +- 29 files changed, 824 insertions(+), 174 deletions(-) create mode 100644 Agenda/AgendaStage.java create mode 100644 Applicatie/Waypoint.java create mode 100644 Applicatie/WaypointPopup.java create mode 100644 Listeners/WindowFocusListener.java 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/AgendaStage.java b/Agenda/AgendaStage.java new file mode 100644 index 0000000..103810a --- /dev/null +++ b/Agenda/AgendaStage.java @@ -0,0 +1,41 @@ +package Agenda; +import java.io.Serializable; + +public class AgendaStage implements Serializable { + + private static final long serialVersionUID = 1; + + private String name; + private String description; + + public AgendaStage(String name, String description) + { + this.name = name; + this.description = description; + } + + public String getName() + { + return this.name; + } + + public String getDescription() + { + return this.description; + } + + public void setDescription(String description) + { + this.description = description; + } + + public void setName(String name) + { + this.name = name; + } + + public String toString() + { + return name; + } +} 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/Applicatie/Action.java b/Applicatie/Action.java index 089755a..a2e31a3 100644 --- a/Applicatie/Action.java +++ b/Applicatie/Action.java @@ -2,24 +2,33 @@ package Applicatie; import java.awt.geom.Point2D; +import Objects.DrawObject; + public class Action { private Point2D position; private int starttime; private int duration; + private DrawObject target; - public Action(Point2D position, int starttime, int duration) + public Action(Point2D position, int starttime, int duration, DrawObject tar) { this.position = position; this.starttime = starttime; this.duration = duration; + this.target = tar; } public Point2D getPosition() { return position; } + + public DrawObject getTargetObject() + { + return target; + } public int getStartTime() { diff --git a/Applicatie/ControlPanel.java b/Applicatie/ControlPanel.java index aa03eee..d78de55 100644 --- a/Applicatie/ControlPanel.java +++ b/Applicatie/ControlPanel.java @@ -19,17 +19,18 @@ 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)); - + setFocusable(false); JPanel simulatorPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); simulatorPanel.setPreferredSize(new Dimension(350,50)); @@ -41,6 +42,7 @@ public class ControlPanel extends JPanel simulatorPanel.add(simulatorLabel); JButton playButton = new JButton("Play"); + playButton.setFocusable(false); playButton.setFont(new Font("Segoe UI", Font.PLAIN, 20)); playButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) @@ -51,6 +53,7 @@ public class ControlPanel extends JPanel simulatorPanel.add(playButton); JButton pauseButton = new JButton("Pause"); + pauseButton.setFocusable(false); pauseButton.setFont(new Font("Segoe UI", Font.PLAIN, 20)); pauseButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) @@ -61,6 +64,7 @@ public class ControlPanel extends JPanel simulatorPanel.add(pauseButton); JButton stopButton = new JButton("Stop"); + stopButton.setFocusable(false); stopButton.setFont(new Font("Segoe UI", Font.PLAIN, 20)); stopButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) @@ -74,15 +78,16 @@ 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); JButton dateButton = new JButton("Pick Date"); + dateButton.setFocusable(false); dateButton.setFont(new Font("Segoe UI", Font.PLAIN, 20)); dateButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) @@ -105,11 +110,12 @@ public class ControlPanel extends JPanel peoplePanel.add(peopleLabel); JButton peopleButton = new JButton("Set People"); + peopleButton.setFocusable(false); peopleButton.setFont(new Font("Segoe UI", Font.PLAIN, 20)); peopleButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { - p.addVisitors(1); + p.addVisitors(); } }); peoplePanel.add(peopleButton); @@ -128,4 +134,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 6bcb68b..3147952 100644 --- a/Applicatie/MenuBar.java +++ b/Applicatie/MenuBar.java @@ -28,6 +28,16 @@ public class MenuBar extends JMenuBar }); file.add(item); + JMenuItem agenda = new JMenuItem("Open Agenda"); + agenda.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + new Agenda.Window(); + } + }); + file.add(agenda); + item = new JMenuItem("Open"); item.addActionListener(new ActionListener() { @@ -50,6 +60,16 @@ public class MenuBar extends JMenuBar file.addSeparator(); + item = new JMenuItem("Load agenda"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + w.getPanel().agenda.loadAgenda(); + } + }); + file.add(item); + item = new JMenuItem("Agenda"); item.addActionListener(new ActionListener() { diff --git a/Applicatie/NewWorldPanel.java b/Applicatie/NewWorldPanel.java index 235e3ba..11b7d7e 100644 --- a/Applicatie/NewWorldPanel.java +++ b/Applicatie/NewWorldPanel.java @@ -23,7 +23,7 @@ import javax.swing.JTextField; @SuppressWarnings("serial") public class NewWorldPanel extends JFrame { - BufferedImage grass,sand,selectedImage; + BufferedImage grass,sand,grass2, sand2,stone, selectedImage; public NewWorldPanel(Panel topPanel) { super("New World"); @@ -32,13 +32,16 @@ public class NewWorldPanel extends JFrame { try { grass = ImageIO.read(new File("images/grassIcon.jpg")); - sand = ImageIO.read(new File("images/sand.jpg")); + sand = ImageIO.read(new File("images/sandIcon.jpg")); + grass2 = ImageIO.read(new File("images/grassIcon2.png")); + sand2 = ImageIO.read(new File("images/sandIcon2.jpg")); + stone = ImageIO.read(new File("images/stoneIcon.jpg")); selectedImage = grass; } catch(IOException e) { e.printStackTrace(); } - String[] terrains = {"Grass", "Sand"}; + String[] terrains = {"Grass", "Grass 2","Sand", "Sand 2", "Stone"}; JPanel mainPanel = new JPanel(new BorderLayout()); JButton button; JLabel label; @@ -88,8 +91,17 @@ public class NewWorldPanel extends JFrame { selectedImage = grass; break; case 1: + selectedImage = grass2; + break; + case 2: selectedImage = sand; break; + case 3: + selectedImage = sand2; + break; + case 4: + selectedImage = stone; + break; } imageLabel.setIcon(new ImageIcon(selectedImage)); } diff --git a/Applicatie/Panel.java b/Applicatie/Panel.java index 255b77f..0e0ad70 100644 --- a/Applicatie/Panel.java +++ b/Applicatie/Panel.java @@ -17,21 +17,25 @@ 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; +import Listeners.WindowFocusListener; import Objects.DrawObject; import Objects.Entrance; import Objects.Food; -import Objects.OldPath; import Objects.Path; import Objects.Stage; import Objects.Toilet; @@ -41,34 +45,38 @@ import Objects.Wall; public class Panel extends JPanel implements ActionListener { - BufferedImage grass, sand; + BufferedImage grass, grass2, sand, sand2, stone; 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; + private static int width = 1920; + private static 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); Point2D selectionPosition = new Point(0, 0); Images images = new Images(); javax.swing.Timer t; + + SimpleDateFormat formatter; + GregorianCalendar date; int currentTime = 540; int tick = 0; @@ -89,20 +97,27 @@ 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 { grass = ImageIO.read(new File("images/grass.jpg")); + grass2 = ImageIO.read(new File("images/grass2.png")); sand = ImageIO.read(new File("images/sand.jpg")); + sand2 = ImageIO.read(new File("images/sand2.jpg")); + stone = ImageIO.read(new File("images/stone.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/waypointIcon.png")); background = grass; } catch (IOException e) @@ -112,9 +127,9 @@ 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(); @@ -131,7 +146,10 @@ public class Panel extends JPanel implements ActionListener addMouseMotionListener(new MouseMotion(this)); addMouseWheelListener(new MouseWheel(this)); - t = new Timer(1000 / 100, this); + + addFocusListener(new WindowFocusListener(this)); + + t = new Timer(1000 / 10, this); } public int getPanelInfoLength() @@ -150,17 +168,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 5: + return new Waypoint(null); default: return null; } @@ -171,16 +205,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 void addVisitors() { - visitors.add(new Visitor("visitor", new Point(100, 300), agenda, objects)); + ArrayList entrances = new ArrayList<>(); + for(DrawObject object : objects) { + if(object instanceof Entrance) { + entrances.add(object); + } + } + if(!entrances.isEmpty()) { + DrawObject entrance = entrances.get((int) Math.floor(Math.random()*entrances.size())); + Point point = new Point((int)entrance.getPosition().getX(),(int)entrance.getPosition().getY()); + visitors.add(new Visitor("visitor",point, agenda, objects)); + } + else { + JOptionPane.showMessageDialog(this, "You don't have a entrance"); + } } public void addVisitors(int count) { for (int i = 0; i < count; i++) { - visitors.add(new Visitor("visitor", new Point(100, 300), agenda, objects)); + addVisitors(); } } @@ -188,7 +245,7 @@ public class Panel extends JPanel implements ActionListener { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; - g2.setClip(new Rectangle2D.Double(0, 0, getWidth(), 300)); + g2.setClip(new Rectangle2D.Double(0, 0, getWidth(), 150)); Stroke old = g2.getStroke(); g2.setStroke(new BasicStroke(10)); g2.drawLine(0, 150, getWidth(), 150); @@ -448,6 +505,9 @@ public class Panel extends JPanel implements ActionListener */ public void startPath() { + pp.clearSelected(); + setSelectedObject(null); + clearObjectSelection(); setClickedOption("Path"); currentPath = new Path(); paths.add(currentPath); @@ -528,7 +588,17 @@ public class Panel extends JPanel implements ActionListener { this.agenda = agenda; } - + + public static int getFieldWidth() + { + return width; + } + + public static int getFieldHeight() + { + return height; + } + @Override public void actionPerformed(ActionEvent e) { @@ -537,23 +607,30 @@ public class Panel extends JPanel implements ActionListener { 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); + v.update(objects, currentTime, visitors, paths); } repaint(); } - public javax.swing.Timer getT() + 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; } @@ -567,12 +644,21 @@ public class Panel extends JPanel implements ActionListener cameraScale = 1; switch (terrainIndex) { - case 0: - background = grass; - break; - case 1: - background = sand; - break; + case 0: + background = grass; + break; + case 1: + background = grass2; + break; + case 2: + background = sand; + break; + case 3: + background = sand2; + break; + case 4: + background = stone; + break; } repaint(); } diff --git a/Applicatie/PropertiesPanel.java b/Applicatie/PropertiesPanel.java index c765789..d2822ca 100644 --- a/Applicatie/PropertiesPanel.java +++ b/Applicatie/PropertiesPanel.java @@ -56,6 +56,7 @@ public class PropertiesPanel extends JPanel setPreferredSize(new Dimension(200, 0)); setBorder(BorderFactory.createLineBorder(new Color(180, 180, 180))); setBackground(new Color(220, 220, 220)); + setFocusable(false); // NAME "PROPERTIES" JPanel propPanel = new JPanel(); @@ -97,6 +98,7 @@ public class PropertiesPanel extends JPanel // BUTTONS ROW 1 JPanel row1ButtonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JButton deleteButton = new JButton("Delete"); + deleteButton.setFocusable(false); deleteButton.setFont(new Font("Segoe UI", Font.PLAIN, 20)); deleteButton.addActionListener(new ActionListener() { @@ -111,6 +113,7 @@ public class PropertiesPanel extends JPanel } }); JButton areaButton = new JButton("Area"); + areaButton.setFocusable(false); areaButton.setFont(new Font("Segoe UI", Font.PLAIN, 20)); areaButton.addActionListener(new ActionListener() { @@ -330,7 +333,8 @@ public class PropertiesPanel extends JPanel { locationXField.setBackground(Color.WHITE); double xpos = Double.parseDouble(locationXField.getText()); - selectedObject.setPosition(new Point2D.Double(xpos, selectedObject.getPosition().getY())); + selectedObject.setPosition(new Point2D.Double(xpos, selectedObject.getPosition().getY()), true); + update(); p.update(); } catch (NumberFormatException nfe) @@ -369,8 +373,8 @@ public class PropertiesPanel extends JPanel { locationYField.setBackground(Color.WHITE); double ypos = Double.parseDouble(locationYField.getText()); - selectedObject.setPosition(new Point2D.Double(selectedObject.getPosition().getX(), ypos)); - ; + selectedObject.setPosition(new Point2D.Double(selectedObject.getPosition().getX(), ypos), true); + update(); p.update(); } catch (NumberFormatException nfe) @@ -420,7 +424,13 @@ 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) diff --git a/Applicatie/Visitor.java b/Applicatie/Visitor.java index e592ca7..91378e4 100644 --- a/Applicatie/Visitor.java +++ b/Applicatie/Visitor.java @@ -2,14 +2,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.Point2D; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import Agenda.Agenda; import Agenda.Event; import Objects.DrawObject; +import Objects.Entrance; +import Objects.Path; public class Visitor { @@ -22,6 +27,7 @@ public class Visitor ArrayList actions; Agenda agenda; ArrayList objects; + int target; public Visitor(String filename, Point2D position, Agenda agenda, ArrayList objects) { @@ -34,6 +40,8 @@ public class Visitor this.agenda = agenda; this.objects = objects; fillActions(); + System.out.println(actions.size()); + target = 0; } public void draw(Graphics2D g2) @@ -49,73 +57,210 @@ 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 DrawObject getEntrance() { - Point2D target = new Point(500, 500); + for(DrawObject o : objects) + { + if(o instanceof Entrance) + { + return o; + } + } + return null; + } + + public void update(ArrayList objects, int currentTime, ArrayList visitors, ArrayList paths) + { + DrawObject target = getEntrance(); for (Action a : actions) { if (currentTime >= a.getStartTime() && currentTime < a.getStoptime()) { - target = a.getPosition(); + target = a.getTargetObject(); } } - moveToTarget(target, objects, visitors); + + moveToTarget(target, objects, visitors, paths); } - public void moveToTarget(Point2D target, ArrayList objects, ArrayList visitors) + public void moveToTarget(DrawObject 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.getPosition(); + 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 (hasPathBelow) { - if (hitTestVisitor(object) && object != this) + 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) { - possible = false; + 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)) + { + possible = false; + } + } + for (Visitor object : visitors) + { + if (hitTestVisitor(object) && object != this) + { + possible = false; + } + } + if (possible == false) + { + position = oldPosition; + rotation += 0.2; } } - if (possible == false) + else { - position = oldPosition; - rotation += 0.2; + 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)); + + System.out.println(rotation); + System.out.println(newRot); + System.out.println("--------------"); +// if (rotation > newRot && distance > 10) +// { +// rotation -= 0.15; +// } +// else if (rotation < newRot && distance > 10) +// { +// rotation += 0.15; +// } + rotation = newRot; + + 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)) + { + possible = false; + } + } + for (Visitor object : visitors) + { + if (hitTestVisitor(object) && object != this) + { + possible = false; + } + } + if (possible == false) + { + position = oldPosition; + rotation += 0.2; + } } } @@ -130,6 +275,7 @@ public class Visitor if (random < 30) { Point2D position = null; + DrawObject targetStage = null; for (Event e : agenda.getEvents()) { if (convertMinutesToHours(startTime) > e.getStart() && convertMinutesToHours(startTime) < e.getStop()) @@ -139,6 +285,7 @@ public class Visitor if (d.getFileName().equals(e.getStage().getName())) { position = d.getPosition(); + targetStage = d; } } } @@ -146,7 +293,7 @@ public class Visitor int randomtime = (int) (40 + (Math.random() * (60 - 40))); if (position != null) { - actions.add(new Action(position, startTime, randomtime)); + actions.add(new Action(position, startTime, randomtime, targetStage)); } startTime = startTime + randomtime; @@ -154,6 +301,7 @@ public class Visitor else if (random >= 30 && random < 35) { Point2D position = null; + DrawObject targetDraw = null; for (DrawObject d : objects) { if (d.getFileName().equals("entrance")) @@ -163,7 +311,7 @@ public class Visitor } if (position != null) { - actions.add(new Action(position, startTime, 35)); + actions.add(new Action(position, startTime, 35, targetDraw)); startTime = startTime + 35; } startTime = startTime + 35; @@ -172,6 +320,7 @@ public class Visitor else if (random > 35) { Point2D position = null; + DrawObject targetDrawobj = null; for (DrawObject d : objects) { if (d.getFileName().equals("wc")) @@ -181,7 +330,7 @@ public class Visitor } if (position != null) { - actions.add(new Action(position, startTime, 35)); + actions.add(new Action(position, startTime, 35, targetDrawobj)); } startTime = startTime + 35; diff --git a/Applicatie/Waypoint.java b/Applicatie/Waypoint.java new file mode 100644 index 0000000..0152618 --- /dev/null +++ b/Applicatie/Waypoint.java @@ -0,0 +1,43 @@ +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) + { + System.out.println(self); + this.self = self; + } + +} diff --git a/Applicatie/WaypointPopup.java b/Applicatie/WaypointPopup.java new file mode 100644 index 0000000..f5e88cf --- /dev/null +++ b/Applicatie/WaypointPopup.java @@ -0,0 +1,57 @@ +package Applicatie; +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; + +import Objects.DrawObject; + +public class WaypointPopup extends JFrame { + + private static final long serialVersionUID = 1; + + public WaypointPopup(DrawObject w) + { + super("Artist editscreen!"); + Waypoint wp = (Waypoint) w; + setDefaultCloseOperation(HIDE_ON_CLOSE); + JPanel content = new JPanel(new BorderLayout()); + JPanel south = new JPanel(new FlowLayout()); + JPanel center = new JPanel(new GridLayout(5,2)); + content.add(south, BorderLayout.SOUTH); + content.add(center, BorderLayout.CENTER); + + JPanel panel1 = new JPanel(); + JLabel name = new JLabel("Waypoint"); + panel1.add(name); + center.add(panel1); + + JTextField tf = new JTextField(5); + center.add(tf); + + JButton edit = new JButton("Done"); + edit.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + wp.setSelf(Integer.valueOf(tf.getText())); + dispose(); + } + }); + south.add(edit); + + setContentPane(content); + setVisible(true); + setSize(500,320); + } + +} 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 f647613..6d2b5c4 100644 --- a/Listeners/Keyboard.java +++ b/Listeners/Keyboard.java @@ -27,23 +27,51 @@ public class Keyboard implements KeyListener { } else if(e.getKeyCode() == e.VK_LEFT) { if(panel.getSelectedObject() != null) - panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX()-5,panel.getSelectedObject().getPosition().getY())); + panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX()-5,panel.getSelectedObject().getPosition().getY()), true); panel.checkCollision(); + panel.getPP().update(); } else if(e.getKeyCode() == e.VK_RIGHT) { if(panel.getSelectedObject() != null) - panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX()+5,panel.getSelectedObject().getPosition().getY())); + panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX()+5,panel.getSelectedObject().getPosition().getY()), true); panel.checkCollision(); + panel.getPP().update(); } else if(e.getKeyCode() == e.VK_UP) { if(panel.getSelectedObject() != null) - panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX(),panel.getSelectedObject().getPosition().getY()-5)); + panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX(),panel.getSelectedObject().getPosition().getY()-5), true); panel.checkCollision(); + panel.getPP().update(); } else if(e.getKeyCode() == e.VK_DOWN) { if(panel.getSelectedObject() != null) - panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX(),panel.getSelectedObject().getPosition().getY()+5)); + panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX(),panel.getSelectedObject().getPosition().getY()+5), true); panel.checkCollision(); + panel.getPP().update(); + } + else if(e.getKeyCode() == e.VK_ADD) { + if(panel.getSelectedObject() != null) + panel.getSelectedObject().setScale(panel.getSelectedObject().getScale()+0.2); + panel.checkCollision(); + panel.getPP().update(); + } + else if(e.getKeyCode() == e.VK_SUBTRACT) { + if(panel.getSelectedObject() != null) + panel.getSelectedObject().setScale(Math.max(panel.getSelectedObject().getScale()-0.2, 0.2)); + panel.checkCollision(); + panel.getPP().update(); + } + else if(e.getKeyCode() == e.VK_COMMA) { + if(panel.getSelectedObject() != null) + panel.getSelectedObject().setRotation((panel.getSelectedObject().getRotation()-5)%360); + panel.checkCollision(); + panel.getPP().update(); + } + else if(e.getKeyCode() == e.VK_PERIOD) { + if(panel.getSelectedObject() != null) + panel.getSelectedObject().setRotation((panel.getSelectedObject().getRotation()+5)%360); + panel.checkCollision(); + panel.getPP().update(); } else if(e.getKeyCode() == e.VK_ENTER) { if(panel.getClickedOption().equals("Path")) { diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index e611c2c..728d2cf 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -4,11 +4,17 @@ 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 javax.swing.SwingUtilities; + import Applicatie.Panel; +import Applicatie.Waypoint; +import Applicatie.WaypointPopup; import Objects.DrawObject; -import Objects.Stage; +import Objects.Path; +import Objects.Entrance; public class Mouse extends MouseAdapter { @@ -27,7 +33,9 @@ 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 +45,17 @@ public class Mouse extends MouseAdapter if (e.getX() >= panel.getScrollfactor() && e.getX() < last + image.getWidth() + panel.getScrollfactor()) { DrawObject tempDrawObj = panel.createNewDrawObject(i); - tempDrawObj.setPosition(clickPoint); - if(!panel.getObjects().isEmpty()) - panel.clearObjectSelection(); - panel.setDragObject(tempDrawObj); - panel.getDragObject().setSelected(true); - panel.getPP().setSelected(tempDrawObj); - panel.setSelectedObject(tempDrawObj); - selectedObject = tempDrawObj; + if (tempDrawObj != null) + { + tempDrawObj.setPosition(clickPoint); + if (!panel.getObjects().isEmpty()) + panel.clearObjectSelection(); + panel.setDragObject(tempDrawObj); + panel.getDragObject().setSelected(true); + panel.getPP().setSelected(tempDrawObj); + panel.setSelectedObject(tempDrawObj); + selectedObject = tempDrawObj; + } break; } i++; @@ -61,6 +72,13 @@ public class Mouse extends MouseAdapter { if (o.contains(clickPoint)) { + if (SwingUtilities.isRightMouseButton(e)) + { + if (o instanceof Waypoint) + { + new WaypointPopup(o); + } + } if (o == selectedObject) { boolean upperLeft = o.containsCorner(clickPoint, 0); @@ -101,7 +119,7 @@ public class Mouse extends MouseAdapter panel.getPP().setSelected(o); panel.setSelectedObject(o); panel.setSelectionPosition(panel.getDragObject().getPosition()); - + } } panel.checkPath(clickPoint); @@ -114,21 +132,26 @@ 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() != null) + { + if (panel.getDragObject().getRectangleColor() != Color.RED) + { + panel.getDragObject().setPosition(panel.getDragObject().getPosition(), true); + panel.getPP().update(); panel.setDragObject(null); panel.setClickedOption("drag"); } - else { + else + { panel.getDragObject().setPosition(panel.getSelectionPosition()); panel.getDragObject().setRectangleColor(Color.BLACK); } diff --git a/Listeners/WindowFocusListener.java b/Listeners/WindowFocusListener.java new file mode 100644 index 0000000..65b45dc --- /dev/null +++ b/Listeners/WindowFocusListener.java @@ -0,0 +1,25 @@ +package Listeners; + +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; + +import Applicatie.Panel; + +public class WindowFocusListener implements FocusListener +{ + Panel p; + + public WindowFocusListener(Panel p) + { + this.p = p; + } + + @Override + public void focusGained(FocusEvent e){} + + @Override + public void focusLost(FocusEvent e) + { + p.requestFocus(); + } +} diff --git a/Objects/DrawObject.java b/Objects/DrawObject.java index 22e1c5b..d07d397 100644 --- a/Objects/DrawObject.java +++ b/Objects/DrawObject.java @@ -234,6 +234,10 @@ public abstract class DrawObject implements Serializable { this.position = position; } + public void setPosition(Point2D position, boolean b) + { + this.position = position; + } public double getRotation() { diff --git a/Objects/Entrance.java b/Objects/Entrance.java index f4de61b..43cf88b 100644 --- a/Objects/Entrance.java +++ b/Objects/Entrance.java @@ -1,6 +1,9 @@ package Objects; import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; + +import Applicatie.Panel; public class Entrance extends DrawObject { @@ -15,5 +18,35 @@ public class Entrance extends DrawObject { return "Entrance"; } + + public void setPosition(Point2D position, boolean b) + { + //this.position = position; + Rectangle2D rect = getRectangle(); + double xl = (Panel.getFieldWidth()/2) + rect.getMinX(); + double xr = Panel.getFieldWidth() - (Panel.getFieldWidth()/2 + rect.getMaxX()); + double yt = (Panel.getFieldHeight()/2) + rect.getMinY(); + double yb = Panel.getFieldHeight() - (Panel.getFieldHeight()/2 + rect.getMaxY()); + if(xl < xr && xl < yt && xl < yb) + { + this.position = new Point2D.Double(-Panel.getFieldWidth()/2, position.getY()); + } + else if(xr < xl && xr < yt && xr < yb) + { + this.position = new Point2D.Double(Panel.getFieldWidth()/2 - rect.getWidth(), position.getY()); + } + else if(yt < xl && yt < xr && yt < yb) + { + this.position = new Point2D.Double(position.getX(), -Panel.getFieldHeight()/2); + } + else if(yb < xl && yb < yt && yb < xr) + { + this.position = new Point2D.Double(position.getX(), Panel.getFieldHeight()/2 - rect.getHeight()); + } + else + { + this.position = new Point2D.Double(-Panel.getFieldWidth()/2, -Panel.getFieldHeight()/2); + } + } } diff --git a/Objects/Path.java b/Objects/Path.java index 67cbe12..15b3de0 100644 --- a/Objects/Path.java +++ b/Objects/Path.java @@ -14,105 +14,173 @@ import java.util.ArrayList; import javax.imageio.ImageIO; +import Applicatie.Waypoint; + /** * 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; - + private ArrayList waypoints; + /** * Constructor. */ - public Path() { + public Path() + { points = new ArrayList<>(); lines = new ArrayList<>(); - try { + waypoints = new ArrayList(); + 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; } + public void addWaypoint(Waypoint w) + { + waypoints.add(w); + } + /** * 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..7252c15 100644 --- a/Objects/Stage.java +++ b/Objects/Stage.java @@ -2,11 +2,16 @@ package Objects; import java.awt.geom.Point2D; +import Agenda.AgendaStage; + public class Stage extends DrawObject { - public Stage(Point2D position) + AgendaStage stage; + + public Stage(Point2D position, AgendaStage st) { super("stage", position); + stage = st; } @Override @@ -15,4 +20,14 @@ public class Stage extends DrawObject return "Stage"; } + public AgendaStage getStage() + { + return stage; + } + + public void setStage(AgendaStage stage) + { + this.stage = stage; + } + }