From c3973cc4e40c63b886ec5513b7d90c5e420177a0 Mon Sep 17 00:00:00 2001 From: Kenneth van Ewijk Date: Wed, 8 Apr 2015 20:57:06 +0200 Subject: [PATCH] Fixed stuff --- Agenda/AddEventPanel.java | 4 +- Agenda/AddStagePanel.java | 4 +- Agenda/Agenda.java | 22 ++- Agenda/EditEventPanel.java | 4 +- Agenda/EditStagePanel.java | 8 +- Agenda/Event.java | 10 +- Agenda/MenuBar.java | 2 +- Agenda/PanelArtSta.java | 2 +- Agenda/Stage.java | 41 ----- Agenda/Window.java | 5 +- Applicatie/ControlPanel.java | 2 +- Applicatie/MenuBar.java | 12 ++ Applicatie/Panel.java | 111 ++++++++++--- Applicatie/SaveLoad.java | 2 +- Applicatie/Visitor.java | 288 ++++++++++++++++++++++++++-------- Applicatie/WaypointPopup.java | 98 ++++++++++-- Listeners/Mouse.java | 49 ++++-- Objects/DrawObject.java | 1 + Objects/Path.java | 26 ++- Objects/Stage.java | 17 +- 20 files changed, 519 insertions(+), 189 deletions(-) delete mode 100644 Agenda/Stage.java diff --git a/Agenda/AddEventPanel.java b/Agenda/AddEventPanel.java index eb767e6..527b862 100644 --- a/Agenda/AddEventPanel.java +++ b/Agenda/AddEventPanel.java @@ -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 3d7a9a8..8558743 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,10 +47,22 @@ public class Agenda implements Serializable { { return artists; } - public ArrayList getStages() + public ArrayList getStages() { return stages; } + public ArrayList eventsForStage(AgendaStage st) + { + ArrayList stageEvents = new ArrayList(); + for(Event e: events) + { + if(e.getStage() == st) + { + stageEvents.add(e); + } + } + return stageEvents; + } /* public void saveAgenda() @@ -221,4 +233,4 @@ public class Agenda implements Serializable { fillArtists(); } */ -} +} \ No newline at end of file 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 44411f2..baf2fd4 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 347abf2..ebd8825 100644 --- a/Agenda/MenuBar.java +++ b/Agenda/MenuBar.java @@ -133,4 +133,4 @@ public class MenuBar extends JMenuBar { view.add(art_sta); add(view); } -} +} \ No newline at end of file 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/Stage.java b/Agenda/Stage.java deleted file mode 100644 index 301a11b..0000000 --- a/Agenda/Stage.java +++ /dev/null @@ -1,41 +0,0 @@ -package Agenda; -import java.io.Serializable; - -public class Stage implements Serializable { - - private static final long serialVersionUID = 1; - - private String name; - private String description; - - public Stage(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/Window.java b/Agenda/Window.java index 9bb7959..f7c4ea4 100644 --- a/Agenda/Window.java +++ b/Agenda/Window.java @@ -1,6 +1,5 @@ package Agenda; - import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; @@ -183,7 +182,7 @@ public class Window extends JFrame { } }); } - + public static void changePanel(String panel) { currentPanel = panel; @@ -242,4 +241,4 @@ public class Window extends JFrame { } -} +} \ No newline at end of file diff --git a/Applicatie/ControlPanel.java b/Applicatie/ControlPanel.java index b371fb7..d78de55 100644 --- a/Applicatie/ControlPanel.java +++ b/Applicatie/ControlPanel.java @@ -115,7 +115,7 @@ public class ControlPanel extends JPanel peopleButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { - p.addVisitors(1); + p.addVisitors(); } }); peoplePanel.add(peopleButton); diff --git a/Applicatie/MenuBar.java b/Applicatie/MenuBar.java index debad55..1c0870f 100644 --- a/Applicatie/MenuBar.java +++ b/Applicatie/MenuBar.java @@ -28,6 +28,18 @@ 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(w.getPanel()); + } + }); + file.add(agenda); + + file.addSeparator(); + item = new JMenuItem("Open"); item.addActionListener(new ActionListener() { diff --git a/Applicatie/Panel.java b/Applicatie/Panel.java index 8ba48a7..d69710b 100644 --- a/Applicatie/Panel.java +++ b/Applicatie/Panel.java @@ -23,10 +23,12 @@ 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; @@ -71,7 +73,7 @@ public class Panel extends JPanel implements ActionListener Point lastMousePosition = new Point(0, 0); Point2D selectionPosition = new Point(0, 0); Images images = new Images(); - javax.swing.Timer t; + Timer t; SimpleDateFormat formatter; GregorianCalendar date; @@ -144,9 +146,8 @@ public class Panel extends JPanel implements ActionListener addMouseMotionListener(new MouseMotion(this)); addMouseWheelListener(new MouseWheel(this)); - + addFocusListener(new WindowFocusListener(this)); - t = new Timer(1000 / 10, this); } @@ -166,7 +167,26 @@ 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: @@ -191,6 +211,18 @@ public class Panel extends JPanel implements ActionListener { waypoints.add(w); } + + public Waypoint getWaypoint(int i) + { + for(Waypoint w : waypoints) + { + if(w.getSelf() == i) + { + return w; + } + } + return null; + } public ArrayList getWaypoints() { @@ -199,14 +231,27 @@ public class Panel extends JPanel implements ActionListener 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, waypoints, date)); + } + else { + JOptionPane.showMessageDialog(this, "You don't have an 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(); } } @@ -518,13 +563,27 @@ public class Panel extends JPanel implements ActionListener { if (path.containsPoint(point)) { + setcurrentPath(path); setClickedOption("Path"); + return true; } } return false; } + + public Path getClickedPath(Point2D point) + { + for (Path path : paths) + { + if (path.containsPoint(point)) + { + return path; + } + } + return null; + } /** * Remove a path from the list. @@ -557,17 +616,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) { @@ -583,7 +642,7 @@ public class Panel extends JPanel implements ActionListener for (Visitor v : visitors) { - v.update(objects, currentTime, visitors, paths); + v.update(objects, currentTime, visitors, paths, this); } repaint(); @@ -610,25 +669,25 @@ public class Panel extends JPanel implements ActionListener this.height = height; paths.clear(); objects.clear(); - visitors.clear(); cameraScale = 1; switch (terrainIndex) { - 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; + 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/SaveLoad.java b/Applicatie/SaveLoad.java index ecc541f..ae7f932 100644 --- a/Applicatie/SaveLoad.java +++ b/Applicatie/SaveLoad.java @@ -145,4 +145,4 @@ public class SaveLoad { -} +} \ No newline at end of file diff --git a/Applicatie/Visitor.java b/Applicatie/Visitor.java index 91378e4..bf3ec7f 100644 --- a/Applicatie/Visitor.java +++ b/Applicatie/Visitor.java @@ -5,8 +5,10 @@ import java.awt.Image; 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.GregorianCalendar; import java.util.HashMap; import java.util.Map; @@ -15,6 +17,7 @@ import Agenda.Event; import Objects.DrawObject; import Objects.Entrance; import Objects.Path; +import Objects.Stage; public class Visitor { @@ -27,21 +30,28 @@ public class Visitor ArrayList actions; Agenda agenda; ArrayList objects; - int target; - public Visitor(String filename, Point2D position, Agenda agenda, ArrayList objects) + ArrayList waypoints; + GregorianCalendar date; + int target; + int finalTarget; + + public Visitor(String filename, Point2D position, Agenda agenda, ArrayList objects, ArrayList waypoints, GregorianCalendar date) + { this.position = position; this.filename = filename; this.rotation = 0; this.speed = 1 + Math.random() * 4; + this.waypoints = waypoints; + this.date = date; scale = 1; actions = new ArrayList(); this.agenda = agenda; this.objects = objects; fillActions(); - System.out.println(actions.size()); - target = 0; + target = 1; + finalTarget = 0; } public void draw(Graphics2D g2) @@ -63,29 +73,119 @@ public class Visitor public DrawObject getEntrance() { - for(DrawObject o : objects) + for (DrawObject o : objects) { - if(o instanceof Entrance) + if (o instanceof Entrance) { return o; } } return null; } - - public void update(ArrayList objects, int currentTime, ArrayList visitors, ArrayList paths) + + public void update(ArrayList objects, int currentTime, ArrayList visitors, ArrayList paths, Panel panel) { DrawObject target = getEntrance(); for (Action a : actions) { if (currentTime >= a.getStartTime() && currentTime < a.getStoptime()) { - target = a.getTargetObject(); + this.finalTarget = a.getWaypoint().getSelf(); } } + System.out.println(actions.size()); - moveToTarget(target, objects, visitors, paths); + // moveToTarget(target, objects, visitors, paths); + move(target, panel); + } + + public void move(DrawObject tar, Panel panel) + { + Point2D targetPoint = panel.getWaypoint(target).getPosition(); + + double newRot = Math.atan2(targetPoint.getY() - position.getY(), targetPoint.getX() - position.getX()); + + int difx = (int) (targetPoint.getX() - position.getX()); + int dify = (int) (targetPoint.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 (object instanceof Entrance || object instanceof Waypoint) + { + continue; + } + + if (hasCollisionDO(object)) + { + possible = false; + } + } + if (possible == false) + { + position = oldPosition; + rotation += 0.2; + } + if (checkIfOnWaypoint(panel)) + { + HashMap options = new HashMap(); + for (Waypoint w : panel.getWaypoints()) + { + options.put(w.getSelf(), w.getOptions()); + } + + for (Map.Entry e : options.entrySet()) + { + for (int i : e.getValue()) + { + if (finalTarget != target) + { + if (finalTarget == i && e.getKey() == target) + { + target = finalTarget; + break; + } + else if (finalTarget == i) + { + target = e.getKey(); + break; + } + } + } + } + } + + } + + public boolean checkIfOnWaypoint(Panel panel) + { + if (panel.getWaypoint(target).contains(position)) + { + return true; + } + return false; } public void moveToTarget(DrawObject target, ArrayList objects, ArrayList visitors, ArrayList paths) @@ -100,7 +200,7 @@ public class Visitor break; } Shape containsShape = p.containsPointShape(position); - if(containsShape != null) + if (containsShape != null) { tar = new Point2D.Double(containsShape.getBounds().getCenterX(), containsShape.getBounds().getCenterY()); } @@ -137,14 +237,15 @@ public class Visitor boolean possible = true; for (DrawObject object : objects) { - if (hitTest(object)) + if (hasCollisionDO(object)) { possible = false; } } for (Visitor object : visitors) { - if (hitTestVisitor(object) && object != this) + + if (hasCollision(object) && object != this) { possible = false; } @@ -208,27 +309,23 @@ public class Visitor } } 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; + if (rotation > newRot && distance > 10) + { + rotation -= 0.15; + } + else if (rotation < newRot && distance > 10) + { + rotation += 0.15; + } Point2D oldPosition = position; @@ -244,14 +341,14 @@ public class Visitor boolean possible = true; for (DrawObject object : objects) { - if (hitTest(object)) + if (hasCollisionDO(object)) { possible = false; } } for (Visitor object : visitors) { - if (hitTestVisitor(object) && object != this) + if (hasCollision(object) && object != this) { possible = false; } @@ -264,6 +361,7 @@ public class Visitor } } + @SuppressWarnings("static-access") public void fillActions() { int startTime = 540; @@ -272,65 +370,91 @@ public class Visitor while (startTime < stopTime) { int random = (int) Math.floor(Math.random() * 51); - if (random < 30) + if (random < 40) { Point2D position = null; DrawObject targetStage = null; + ArrayList posEvents = new ArrayList(); for (Event e : agenda.getEvents()) { - if (convertMinutesToHours(startTime) > e.getStart() && convertMinutesToHours(startTime) < e.getStop()) + if (startTime >= e.getStart() && startTime < e.getStop()) { - for (DrawObject d : objects) + posEvents.add(e); + } + } + + if (posEvents.size() != 0) + { + int r = (int) Math.floor(Math.random() * posEvents.size()); + Event evs = posEvents.get(r); + for (DrawObject d : objects) + { + if (d.getFileName().equals("stage")) { - if (d.getFileName().equals(e.getStage().getName())) + Stage s = (Stage) d; + if (s.getStage().getName().equals(evs.getStage().getName())) { - position = d.getPosition(); + position = s.getPosition(); targetStage = d; } } } } + int randomtime = (int) (40 + (Math.random() * (60 - 40))); if (position != null) { - actions.add(new Action(position, startTime, randomtime, targetStage)); + Waypoint w = getClosestWaypoint(position); + actions.add(new Action(position, startTime, randomtime, targetStage, w)); } startTime = startTime + randomtime; } - else if (random >= 30 && random < 35) + else if (random >= 40 && random < 45) { Point2D position = null; - DrawObject targetDraw = null; + DrawObject targetStage = null; + ArrayList foodPlaces = new ArrayList(); for (DrawObject d : objects) { - if (d.getFileName().equals("entrance")) + if (d.getFileName().equals("food")) { - position = d.getPosition(); + foodPlaces.add(d); } } - if (position != null) + + if (foodPlaces.size() != 0) { - actions.add(new Action(position, startTime, 35, targetDraw)); - startTime = startTime + 35; + int r = (int) Math.floor(Math.random() * foodPlaces.size()); + position = foodPlaces.get(r).getPosition(); + targetStage = foodPlaces.get(r); + Waypoint w = getClosestWaypoint(position); + actions.add(new Action(position, startTime, 35, targetStage, w)); + startTime = startTime + 20; } startTime = startTime + 35; } - else if (random > 35) + else if (random > 45) { Point2D position = null; - DrawObject targetDrawobj = null; + DrawObject targetStage = null; + ArrayList toilets = new ArrayList(); for (DrawObject d : objects) { if (d.getFileName().equals("wc")) { - position = d.getPosition(); + toilets.add(d); } } - if (position != null) + if (toilets.size() != 0) { - actions.add(new Action(position, startTime, 35, targetDrawobj)); + int r = (int) Math.floor(Math.random() * toilets.size()); + position = toilets.get(r).getPosition(); + targetStage = toilets.get(r); + Waypoint w = getClosestWaypoint(position); + actions.add(new Action(position, startTime, 35, targetStage, w)); + startTime = startTime + 20; } startTime = startTime + 35; @@ -338,35 +462,69 @@ public class Visitor } } - public int convertMinutesToHours(int startTime) + public Waypoint getClosestWaypoint(Point2D point) { - int time = 0; - int hours = startTime / 60; - int minutes = startTime % 60; - time = (hours * 100) + minutes; - return time; + Waypoint waypoint = null; + int distance = 10000; + for (Waypoint w : waypoints) + { + if (w.getPosition().distance(point) < distance) + { + waypoint = w; + distance = (int) w.getPosition().distance(point); + } + } + return waypoint; } - 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)); - public boolean hitTest(DrawObject to2) - { - return (getEndX() >= to2.getPosition().getX() && getEndY() >= to2.getPosition().getY() && to2.getEndX() >= position.getX() && to2.getEndY() >= position.getY()); + Area aa = new Area(a); + Area bb = new Area(b); - } + AffineTransform af = new AffineTransform(); + af.rotate(rotation, position.getX(), position.getY()); - public boolean hitTestVisitor(Visitor v) - { - return (getEndX() >= v.position.getX() && getEndY() >= v.position.getY() && v.getEndX() >= position.getX() && v.getEndY() >= 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; } } \ No newline at end of file diff --git a/Applicatie/WaypointPopup.java b/Applicatie/WaypointPopup.java index f5e88cf..05196aa 100644 --- a/Applicatie/WaypointPopup.java +++ b/Applicatie/WaypointPopup.java @@ -1,10 +1,13 @@ package Applicatie; import java.awt.BorderLayout; +import java.awt.Dimension; import java.awt.FlowLayout; -import java.awt.GridLayout; +import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import javax.swing.Box; +import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; @@ -16,25 +19,82 @@ import Objects.DrawObject; public class WaypointPopup extends JFrame { private static final long serialVersionUID = 1; + private JLabel title; - public WaypointPopup(DrawObject w) + public WaypointPopup(DrawObject w, Panel panel) { - super("Artist editscreen!"); + super("Edit WayPoint"); 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)); + JPanel north = new JPanel(); + if(wp.getSelf() == 0) + { + title = new JLabel("Edit WayPoint"); + } + else + { + title = new JLabel("Edit WayPoint " + wp.getSelf()); + } + title.setFont(new Font("Dialog", Font.BOLD, 24)); + north.add(title); + content.add(north, BorderLayout.NORTH); + JPanel center = new JPanel(new FlowLayout()); + JPanel row1 = new JPanel(); + row1.setLayout(new BoxLayout(row1, BoxLayout.Y_AXIS)); + JPanel row2 = new JPanel(); + row2.setLayout(new BoxLayout(row2, BoxLayout.Y_AXIS)); + JPanel south = new JPanel(); content.add(south, BorderLayout.SOUTH); content.add(center, BorderLayout.CENTER); + center.add(row1); + center.add(row2); + + JPanel empty = new JPanel(); + empty.add(Box.createRigidArea(new Dimension(0, 20))); + row2.add(empty); JPanel panel1 = new JPanel(); JLabel name = new JLabel("Waypoint"); + name.setFont(new Font("Dialog", Font.PLAIN, 20)); panel1.add(name); - center.add(panel1); + row1.add(panel1); - JTextField tf = new JTextField(5); - center.add(tf); + JTextField tf = new JTextField(wp.getSelf() + "", 10); + row2.add(tf); + + JPanel panel2 = new JPanel(); + JLabel options = new JLabel("Options"); + options.setFont(new Font("Dialog", Font.PLAIN, 20)); + panel2.add(options); + row1.add(panel2); + + JPanel empty2 = new JPanel(); + empty2.add(Box.createRigidArea(new Dimension(0, 5))); + row2.add(empty2); + + String optionss = ""; + if(wp.getOptions() != null) + { + if(wp.getOptions().length != 0) + { + int[] optionsa = wp.getOptions(); + optionss += optionsa[0]; + for(int i = 1; i < optionsa.length; i++) + { + optionss += "-" + optionsa[i]; + } + } + } + + JTextField tx = new JTextField("" + optionss, 8); + row2.add(tx); + + JPanel help = new JPanel(); + JLabel example = new JLabel("example: '1-2-3'"); + example.setFont(new Font("Dialog", Font.PLAIN, 12)); + help.add(example); + row2.add(help); JButton edit = new JButton("Done"); edit.addActionListener(new ActionListener() @@ -44,14 +104,34 @@ public class WaypointPopup extends JFrame { public void actionPerformed(ActionEvent e) { wp.setSelf(Integer.valueOf(tf.getText())); + panel.addWaypoint(wp); dispose(); + String options[] = tx.getText().split("-"); + int ioptions[] = new int[options.length]; + for(int i = 0; i < options.length; i++) + { + ioptions[i] = Integer.valueOf(options[i]); + } + wp.setOptions(ioptions); + } }); south.add(edit); + JButton cancel = new JButton("Cancel"); + cancel.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + dispose(); + } + }); + south.add(cancel); + setContentPane(content); setVisible(true); - setSize(500,320); + setSize(300,250); } } diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index f77a8f6..75d8b1c 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -10,6 +10,8 @@ import java.awt.image.BufferedImage; import javax.swing.SwingUtilities; import Applicatie.Panel; +import Applicatie.PathPopup; + import Applicatie.Waypoint; import Applicatie.WaypointPopup; import Objects.DrawObject; @@ -45,14 +47,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++; @@ -71,8 +76,10 @@ public class Mouse extends MouseAdapter { if (SwingUtilities.isRightMouseButton(e)) { - if(o instanceof Waypoint){ - new WaypointPopup(o); + if (o instanceof Waypoint) + { + new WaypointPopup(o, panel); + } } if (o == selectedObject) @@ -118,7 +125,19 @@ public class Mouse extends MouseAdapter } } - panel.checkPath(clickPoint); + Path clickedPath = panel.getClickedPath(clickPoint); + if (clickedPath != null) + { + if (SwingUtilities.isRightMouseButton(e)) + { + new PathPopup(clickedPath, panel); + } + } + else + { + panel.checkPath(clickPoint); + } + } if (panel.getDragObject() == null && selectedObject != null) { @@ -130,15 +149,19 @@ public class Mouse extends MouseAdapter } 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); diff --git a/Objects/DrawObject.java b/Objects/DrawObject.java index 6580c79..1b7faf6 100644 --- a/Objects/DrawObject.java +++ b/Objects/DrawObject.java @@ -256,6 +256,7 @@ public abstract class DrawObject implements Serializable setPosition(position); } + public double getRotation() { return rotation; diff --git a/Objects/Path.java b/Objects/Path.java index 15b3de0..010303b 100644 --- a/Objects/Path.java +++ b/Objects/Path.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import javax.imageio.ImageIO; +import Applicatie.Panel; import Applicatie.Waypoint; /** @@ -95,7 +96,7 @@ public class Path } return null; } - + /** * Check if one of the lines contains the given point. * @@ -114,12 +115,13 @@ public class Path } return false; } - + + public boolean intersectsRect(Rectangle2D rect) { - for(Shape line : getPath()) + for (Shape line : getPath()) { - if(line.intersects(rect)) + if (line.intersects(rect)) { return true; } @@ -144,13 +146,23 @@ public class Path lines.add(stroke.createStrokedShape(line)); } return lines; + } - - public void addWaypoint(Waypoint w) + + public void addWaypoint(int i, Panel panel) { - waypoints.add(w); + for (Waypoint w : panel.getWaypoints()) + { + if (w.getSelf() == i) + { + waypoints.add(w); + return; + } + } + } + /** * Add a point to the path. * 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; + } + }