This commit is contained in:
unknown
2015-04-07 14:58:47 +02:00
parent 0535d98427
commit c29ccec789
25 changed files with 1946 additions and 873 deletions
+2 -1
View File
@@ -205,7 +205,8 @@ public class Window extends JFrame {
public void onExit() {
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);
setVisible(false);
dispose();
}
}
+19 -13
View File
@@ -2,31 +2,37 @@ package Applicatie;
import java.awt.geom.Point2D;
public class Action {
public class Action
{
private Point2D position;
private int starttime;
private int duration;
public Action(Point2D position, int starttime, int duration){
public Action(Point2D position, int starttime, int duration)
{
this.position = position;
this.starttime = starttime;
this.duration = duration;
}
public Point2D getPosition(){
public Point2D getPosition()
{
return position;
}
public int getStartTime(){
public int getStartTime()
{
return starttime;
}
public int getStoptime(){
public int getStoptime()
{
return (starttime + duration);
}
public int getDuration(){
public int getDuration()
{
return duration;
}
}
}
+131
View File
@@ -0,0 +1,131 @@
package Applicatie;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ControlPanel extends JPanel
{
private static final long serialVersionUID = 6805244250902524351L;
private Panel p;
public ControlPanel(Panel p)
{
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));
JPanel simulatorPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
simulatorPanel.setPreferredSize(new Dimension(350,50));
simulatorPanel.setMaximumSize(new Dimension(350,50));
add(simulatorPanel);
{
JLabel simulatorLabel = new JLabel("Simulator: ");
simulatorLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20));
simulatorPanel.add(simulatorLabel);
JButton playButton = new JButton("Play");
playButton.setFont(new Font("Segoe UI", Font.PLAIN, 20));
playButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
p.getT().start();
}
});
simulatorPanel.add(playButton);
JButton pauseButton = new JButton("Pause");
pauseButton.setFont(new Font("Segoe UI", Font.PLAIN, 20));
pauseButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
p.getT().stop();
}
});
simulatorPanel.add(pauseButton);
JButton stopButton = new JButton("Stop");
stopButton.setFont(new Font("Segoe UI", Font.PLAIN, 20));
stopButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
p.getT().stop();
}
});
simulatorPanel.add(stopButton);
}
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));
add(timePanel);
{
JLabel 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.setFont(new Font("Segoe UI", Font.PLAIN, 20));
dateButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
///TODO implement
}
});
timePanel.add(dateButton);
}
add(Box.createRigidArea(new Dimension(10,50)));
JPanel peoplePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
peoplePanel.setPreferredSize(new Dimension(285,50));
peoplePanel.setMaximumSize(new Dimension(285,50));
add(peoplePanel);
{
JLabel peopleLabel = new JLabel("0/0 People");
peopleLabel.setFont(new Font("Segoe UI", Font.PLAIN, 20));
peoplePanel.add(peopleLabel);
JButton peopleButton = new JButton("Set People");
peopleButton.setFont(new Font("Segoe UI", Font.PLAIN, 20));
peopleButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
p.addVisitors(300);
}
});
peoplePanel.add(peopleButton);
}
add(Box.createHorizontalGlue());
JPanel runningPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
runningPanel.setPreferredSize(new Dimension(195,50));
runningPanel.setMaximumSize(new Dimension(195,50));
add(runningPanel);
{
JLabel runningLabel = new JLabel("Simulation stopped");
runningLabel.setFont(new Font("Segoe UI", Font.PLAIN, 20));
runningPanel.add(runningLabel);
}
}
}
-245
View File
@@ -1,245 +0,0 @@
package Applicatie;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.Serializable;
import javax.swing.ImageIcon;
public abstract class DrawObject implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
Point2D position;
double rotation;
double scale;
private String filename;
//private Image rotateImage;
protected boolean selected;
private Rectangle2D rektAngle;
private Rectangle2D upperLeftCorner;
private Rectangle2D upperRightCorner;
private Rectangle2D bottomLeftCorner;
private Rectangle2D bottomRightCorner;
private Ellipse2D rotateDot;
static final int UPPERLEFT = 0;
static final int UPPERRIGHT = 1;
static final int BOTTOMLEFT = 2;
static final int BOTTOMRIGHT = 3;
public DrawObject(String filename, Point2D position)
{
this.filename = filename;
//rotateImage = new ImageIcon("rotate.png").getImage();
scale = 1;
rotation = 0;
this.position = position;
}
public abstract String getName();
public void draw(Graphics2D g)
{
AffineTransform tx = getTransform();
Image image = Images.getImage(filename);
g.drawImage(image, tx, null);
if(selected) {
// g.rotate(Math.toRadians(rotation), image.getWidth(null)/2, image.getHeight(null)/2);
AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(rotation), position.getX() + image.getWidth(null)/2, position.getY() +image.getHeight(null)/2);
g.transform(rotate);
g.setColor(Color.BLACK);
g.setStroke(new BasicStroke(7));
rektAngle = new Rectangle2D.Double((int) position.getX(), (int) position.getY(), image.getWidth(null), image.getHeight(null));
tx = getTransformRectangle();
rektAngle.setFrame(tx.createTransformedShape(rektAngle).getBounds());
g.draw(rektAngle);
g.setColor(Color.YELLOW);
upperLeftCorner = new Rectangle2D.Double(rektAngle.getX()-7,rektAngle.getY()-7,15,15);
upperRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth()-8,rektAngle.getY()-7,15,15);
bottomLeftCorner = new Rectangle2D.Double(rektAngle.getX()-7,rektAngle.getY() + rektAngle.getHeight()-8,15,15);
bottomRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth()-8,rektAngle.getY() + rektAngle.getHeight()-8,15,15);
g.fill(upperLeftCorner); //upperleft
g.fill(upperRightCorner); //upperright
g.fill(bottomLeftCorner); //bottomleft
g.fill(bottomRightCorner); //bottomright
g.setColor(Color.RED);
rotateDot = new Ellipse2D.Double((rektAngle.getX() + (rektAngle.getWidth()/2))-8,rektAngle.getY()-8,15,15);
g.fill(rotateDot);
}
}
protected AffineTransform getTransform() {
AffineTransform tx = new AffineTransform();
tx.scale(scale, scale);
tx.translate(position.getX(), position.getY());
Image image = new ImageIcon(filename).getImage();
tx.rotate(Math.toRadians(rotation), image.getWidth(null) / 2, image.getHeight(null) / 2);
return tx;
}
protected AffineTransform getTransformSelection() {
AffineTransform tx = new AffineTransform();
tx.scale(scale, scale);
tx.translate(position.getX(), position.getY());
return tx;
}
/**
* Special transformation for the selection rectangle, because the translation of the image one places the rectangle translated from the image.
* @return affineTransform
*/
private AffineTransform getTransformRectangle() {
AffineTransform tx = new AffineTransform();
tx.scale(scale, scale);
return tx;
}
public boolean contains(Point2D clickPoint) {
Shape shape;
Image image = Images.getImage(filename);
if(rektAngle == null) {
shape = new Rectangle2D.Double(0,0,image.getWidth(null), image.getHeight(null));
return getTransform().createTransformedShape(shape).contains(clickPoint);
}
else {
shape = new Rectangle2D.Double(-7,-7,image.getWidth(null)+7, image.getHeight(null)+7);
return getTransformSelection().createTransformedShape(shape).contains(clickPoint);
}
}
public Point2D getObjectPoint(Point2D point) {
try {
return getTransform().inverseTransform(point, null);
} catch (NoninvertibleTransformException e) {
e.printStackTrace();
}
return null;
}
/**
* This method checks if the place thats clicked is inside one of the corners.
*
* @param point
* @param corner
* @return if the clicked point is inside one of the corners
*/
public boolean containsCorner(Point2D point, int corner) {
Rectangle2D chosenCorner = null;
switch(corner) {
case 0:
chosenCorner = upperLeftCorner;
break;
case 1:
chosenCorner = upperRightCorner;
break;
case 2:
chosenCorner = bottomLeftCorner;
break;
case 3:
chosenCorner = bottomRightCorner;
break;
case 4:
if(point.getX() > rotateDot.getX() && point.getX() < rotateDot.getX() + rotateDot.getWidth()
&& point.getY() > rotateDot.getY() && point.getY() < rotateDot.getY() + rotateDot.getHeight())
return true;
else
return false;
}
if(point.getX() > chosenCorner.getX() && point.getX() < chosenCorner.getX() + chosenCorner.getWidth()
&& point.getY() > chosenCorner.getY() && point.getY() < chosenCorner.getY() + chosenCorner.getHeight())
return true;
else
return false;
}
public void setSelected(boolean b) {
selected = b;
}
public Point2D getPosition() {
return position;
}
public void setPosition(Point2D position) {
this.position = position;
}
public double getRotation() {
return rotation;
}
public void setRotation(double rotation) {
this.rotation = rotation;
}
public double getScale() {
return scale;
}
public void setScale(double scale) {
this.scale = scale;
}
public Image getImage() {
Image image = Images.getImage(filename);
return image;
}
//public void setImage(Image image) {
// this.image = image;
//}
public boolean isSelected() {
return selected;
}
public Rectangle2D getRectangle() {
return rektAngle;
}
public void setRectangle(Rectangle2D rectangle) {
rektAngle = rectangle;
}
public int getX(){
return (int) position.getX();
}
public int getY(){
return (int) position.getY();
}
public int getEndX(){
Image image = Images.getImage(filename);
//return (int) (position.getX() + (image.getWidth(null) * scale));
return (int) (position.getX() + image.getWidth(null));
}
public int getEndY(){
Image image = Images.getImage(filename);
//return (int) (position.getY() + (image.getHeight(null) * scale));
return (int) (position.getY() + image.getHeight(null));
}
public String getFileName(){
return filename;
}
public Point2D getMiddlePoint(){
Image image = Images.getImage(filename);
Point2D p = new Point2D.Double((position.getX() + (image.getWidth(null)/2)), (position.getY() + (image.getHeight(null)/2)));
return p;
}
}
+15 -10
View File
@@ -6,13 +6,15 @@ import java.util.Map;
import javax.swing.ImageIcon;
public class Images{
public class Images
{
private static Map<String, Image> images;
public Images() {
public Images()
{
images = new HashMap<String, Image>();
images.put("entrance", loadImage("images/entrance.png"));
images.put("wc", loadImage("images/wc.png"));
images.put("path", loadImage("images/path.jpg"));
@@ -20,13 +22,16 @@ public class Images{
images.put("wall", loadImage("images/wall.png"));
images.put("stage1", loadImage("images/stage3.png"));
images.put("visitor", loadImage("images/visitor.png"));
images.put("food", loadImage("images/food.png"));
}
public static Image loadImage(String path) {
public static Image loadImage(String path)
{
return new ImageIcon(path).getImage();
}
public static Image getImage(String getter) {
public static Image getImage(String getter)
{
return images.get(getter);
}
}
}
+6 -3
View File
@@ -1,8 +1,11 @@
package Applicatie;
public class Main {
public static void main(String[] args) {
public class Main
{
public static void main(String[] args)
{
new Window();
}
}
+41 -32
View File
@@ -1,4 +1,5 @@
package Applicatie;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -6,61 +7,69 @@ import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class MenuBar extends JMenuBar {
public class MenuBar extends JMenuBar
{
private static final long serialVersionUID = 1L;
public MenuBar(Window w)
{
super();
JMenu file = new JMenu("File");
JMenuItem exit = new JMenuItem("Exit");
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JMenuItem exit = new JMenuItem("Exit");
exit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
w.setVisible(false);
w.dispose();
}
});
JMenuItem agenda = new JMenuItem("Open Agenda");
agenda.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new Agenda.Window();
JMenuItem agenda = new JMenuItem("Open Agenda");
agenda.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new Agenda.Window();
}
});
JMenuItem save = new JMenuItem("Save");
save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SaveLoad.save(w.fp);
JMenuItem save = new JMenuItem("Save terrain");
save.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
SaveLoad.save(w.getPanel());
}
});
JMenuItem load = new JMenuItem("Load terrain");
load.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SaveLoad.load(w.fp);
JMenuItem load = new JMenuItem("Load terrain");
load.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
SaveLoad.load(w.getPanel());
}
});
JMenuItem loadagenda = new JMenuItem("Load agenda");
loadagenda.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
w.fp.agenda.loadAgenda();
w.fp.addVisitors();
JMenuItem loadagenda = new JMenuItem("Load agenda");
loadagenda.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
w.getPanel().getAgenda().loadAgenda();
w.getPanel().addVisitors();
}
});
file.add(agenda);
file.add(load);
file.add(loadagenda);
file.add(load);
file.add(save);
file.add(exit);
add(file);
}
}
+405 -177
View File
@@ -1,8 +1,12 @@
package Applicatie;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Stroke;
import java.awt.TexturePaint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -14,6 +18,7 @@ import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
@@ -23,60 +28,79 @@ import Agenda.Agenda;
import Listeners.Mouse;
import Listeners.MouseMotion;
import Listeners.MouseWheel;
import Objects.DrawObject;
import Objects.Entrance;
import Objects.Food;
import Objects.OldPath;
import Objects.Path;
import Objects.Podium;
import Objects.Stage;
import Objects.Toilet;
import Objects.Wall;
@SuppressWarnings("serial")
public class Panel extends JPanel implements ActionListener {
public class Panel extends JPanel implements ActionListener
{
BufferedImage background;
BufferedImage podiumImage, toiletImage, entranceImage, pathImage,
wallImage;
BufferedImage podiumImage, toiletImage, entranceImage, pathImage, wallImage, foodImage;
private int panelInfox, panelInfoy, scrollfactor;
private ArrayList<BufferedImage> panelInfo = new ArrayList<BufferedImage>();
// private ArrayList<Object> panelTypes = new ArrayList<Object>();
ArrayList<Visitor> visitors = new ArrayList<>();
ArrayList<DrawObject> objects = new ArrayList<>();
ArrayList<Visitor> visitors = new ArrayList<>();
ArrayList<Path> paths = new ArrayList<>();
DrawObject dragObject = null;
private DrawObject selectedObject;
private String clickedOption = "drag";
private Path currentPath;
Point2D cameraPoint = new Point2D.Double(getWidth() / 2, getHeight() / 2);
float cameraScale = 1;
PropertiesPanel pp;
Agenda agenda;
Point2D lastClickPosition = new Point(0, 0);
Point lastMousePosition = new Point(0, 0);
Agenda agenda;
Point2D selectionPosition = new Point(0, 0);
Images images = new Images();
javax.swing.Timer t;
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.
// en maak een case statement die een new Object returnt in
// createNewDrawObject.
Panel(PropertiesPanel pp) {
public Point2D getSelectionPosition()
{
return selectionPosition;
}
public void setSelectionPosition(Point2D selectionPosition)
{
this.selectionPosition = selectionPosition;
}
Panel(PropertiesPanel pp)
{
this.pp = pp;
new Images();
pp.setPanel(this);
try {
try
{
background = ImageIO.read(new File("images/grass.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"));
} catch (IOException e) {
foodImage = ImageIO.read(new File("images/foodIcon.png"));
}
catch (IOException e)
{
e.printStackTrace();
}
panelInfo.add(podiumImage);
@@ -84,6 +108,9 @@ public class Panel extends JPanel implements ActionListener {
panelInfo.add(entranceImage);
panelInfo.add(pathImage);
panelInfo.add(wallImage);
panelInfo.add(foodImage);
agenda = new Agenda();
panelInfox = 0;
panelInfoy = 0;
@@ -96,59 +123,74 @@ public class Panel extends JPanel implements ActionListener {
addMouseListener(new Mouse(this));
addMouseMotionListener(new MouseMotion(this));
agenda = new Agenda();
addMouseWheelListener(new MouseWheel(this));
new Timer(1000/20, this).start();
t = new Timer(1000/100, this);
}
public void addVisitors(){
visitors.add(new Visitor("visitor", new Point(100,300), agenda, objects));
}
public int getPanelInfoLength() {
public int getPanelInfoLength()
{
int panelInfoLength = 0;
for (BufferedImage image : panelInfo) {
for (BufferedImage image : panelInfo)
{
panelInfoLength += image.getWidth();
}
return panelInfoLength;
}
public DrawObject createNewDrawObject(int index) {
switch (index) {
case 0:
return new Podium(null);
case 1:
return new Toilet(null);
case 2:
return new Entrance(null);
case 3:
return new Path(null);
case 4:
return new Wall(null);
default:
return null;
public DrawObject createNewDrawObject(int index)
{
switch (index)
{
case 0:
return new Stage(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:
return new Food(null);
default:
return null;
}
}
public void add(DrawObject dragObject) {
public void add(DrawObject dragObject)
{
objects.add(dragObject);
}
public void paintComponent(Graphics g) {
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++)
{
visitors.add(new Visitor("visitor", new Point(100, 300), agenda, objects));
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setClip(new Rectangle2D.Double(0, 0, getWidth(), 300));
// g2.fill(new Ellipse2D.Double(0,0,300,300));
// g2.drawImage(podiumImage, 0, 0, null);
Stroke old = g2.getStroke();
g2.setStroke(new BasicStroke(10));
g2.drawLine(0, 150, getWidth(), 150);
for (BufferedImage image : panelInfo) {
g2.setStroke(old);
for (BufferedImage image : panelInfo)
{
g2.drawImage(image, panelInfox + scrollfactor, panelInfoy, null);
panelInfox += image.getWidth();
}
@@ -158,26 +200,329 @@ public class Panel extends JPanel implements ActionListener {
AffineTransform oldTransform = g2.getTransform();
g2.setTransform(getCamera());
TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0,0, 100, 100));
TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0, 0, 100, 100));
g2.setPaint(p);
g2.fill(new Rectangle2D.Double(-1920, -1080, 3840, 2160));
BasicStroke stroke = new BasicStroke(10);
g2.setStroke(stroke);
for (DrawObject o : objects) {
for (Path path : paths)
{
path.draw(g2);
}
for (DrawObject o : objects)
{
o.draw(g2);
}
for (Visitor v : visitors){
v.draw(g2);
}
g2.setClip(null);
g2.setTransform(oldTransform);
if (currentPath != null)
{ // Display text while in path making modes.
g2.setColor(Color.WHITE);
g2.setFont(new Font("Verdana", Font.ITALIC, 25));
g2.drawString("Press enter to finish the path.", 20, 185);
}
g2.setClip(null);
}
public AffineTransform getCamera()
{
AffineTransform tx = new AffineTransform();
tx.translate(-cameraPoint.getX() + getWidth() / 2, -cameraPoint.getY() + getHeight() / 2);
tx.scale(cameraScale, cameraScale);
return tx;
}
public Point2D getClickPoint(Point point)
{
try
{
return getCamera().inverseTransform(point, null);
}
catch (NoninvertibleTransformException e1)
{
e1.printStackTrace();
}
return null;
}
public void setBackground(BufferedImage background)
{
this.background = background;
}
public ArrayList<DrawObject> getObjects()
{
return objects;
}
public void setObjects(ArrayList<DrawObject> objects)
{
this.objects = objects;
}
public DrawObject getDragObject()
{
return dragObject;
}
public void setDragObject(DrawObject dragObject)
{
this.dragObject = dragObject;
}
public Point2D getCameraPoint()
{
return cameraPoint;
}
public void setCameraPoint(Point2D cameraPoint)
{
this.cameraPoint = cameraPoint;
}
public float getCameraScale()
{
return cameraScale;
}
public void setCameraScale(float cameraScale)
{
this.cameraScale = cameraScale;
}
public Point2D getLastClickPosition()
{
return lastClickPosition;
}
public void setLastClickPosition(Point2D lastClickPosition)
{
this.lastClickPosition = lastClickPosition;
}
public void clearObjects()
{
objects.clear();
}
public Point getLastMousePosition()
{
return lastMousePosition;
}
public void setLastMousePosition(Point lastMousePosition)
{
this.lastMousePosition = lastMousePosition;
}
public BufferedImage getPodiumImage()
{
return podiumImage;
}
public void setPodiumImage(BufferedImage podiumImage)
{
this.podiumImage = podiumImage;
}
public ArrayList<BufferedImage> getPanelInfo()
{
return panelInfo;
}
public void setPanelInfo(ArrayList<BufferedImage> panelInfo)
{
this.panelInfo = panelInfo;
}
public int getScrollfactor()
{
return scrollfactor;
}
public void setScrollfactor(int scrollfactor)
{
this.scrollfactor = scrollfactor;
}
public int getPanelInfox()
{
return panelInfox;
}
public void setPanelInfox(int panelInfox)
{
this.panelInfox = panelInfox;
}
public PropertiesPanel getPP()
{
return pp;
}
public void update()
{
repaint();
}
public DrawObject getSelectedObject()
{
return selectedObject;
}
public void setSelectedObject(DrawObject selectedObject)
{
this.selectedObject = selectedObject;
}
public String getClickedOption()
{
return clickedOption;
}
public void setClickedOption(String clickedOption)
{
this.clickedOption = clickedOption;
}
/**
* Remove a DrawObject from the list.
*
* @param o
* - the DrawObject you want to remove from the list.
*/
public void removeObject(DrawObject o)
{
Iterator<DrawObject> itr = objects.iterator();
while (itr.hasNext())
{
DrawObject nextObject = (DrawObject) itr.next();
if (nextObject.equals(o))
{
pp.clearSelected();
itr.remove();
}
repaint();
}
}
public void clearObjectSelection()
{
for (DrawObject o : objects)
{
o.setSelected(false);
}
}
public void checkCollision()
{
boolean collision = false;
for (DrawObject o : getObjects())
{
if (getSelectedObject().collision(o) && o != getSelectedObject())
{
collision = true;
getSelectedObject().setRectangleColor(Color.RED);
break;
}
if (!collision)
getSelectedObject().setRectangleColor(Color.BLACK);
}
}
/**
* Begin making a new path.
*/
public void startPath()
{
setClickedOption("Path");
currentPath = new Path();
paths.add(currentPath);
pp.setSelectedPath(currentPath);
}
/**
* Get the current selected Path.
*
* @return - the selected Path.
*/
public Path getCurrentPath()
{
return currentPath;
}
/**
* Set the selected Path object.
*
* @param path
* - the selected Path object.
*/
public void setcurrentPath(Path path)
{
currentPath = path;
pp.setSelectedPath(currentPath);
}
/**
* Checks if the point is contained in one of the path's.
*
* @param point
* - The point to check for.
* @return if the point is contained in one of the path's.
*/
public boolean checkPath(Point2D point)
{
for (Path path : paths)
{
if (path.containsPoint(point))
{
setcurrentPath(path);
setClickedOption("Path");
return true;
}
}
return false;
}
/**
* Remove a path from the list.
*
* @param path
* - the path you want to remove from the list.
*/
public void removePath(Path path)
{
Iterator<Path> it = paths.iterator();
while (it.hasNext())
{
if (it.next().equals(path))
{
pp.clearSelected();
setClickedOption("drag");
currentPath = null;
it.remove();
}
repaint();
}
}
public Agenda getAgenda()
{
return agenda;
}
public void setAgenda(Agenda agenda)
{
this.agenda = agenda;
}
@Override
public void actionPerformed(ActionEvent e) {
tick++;
@@ -190,134 +535,17 @@ public class Panel extends JPanel implements ActionListener {
for (Visitor v: visitors){
v.update(objects, currentTime, visitors);
}
repaint();
}
public AffineTransform getCamera() {
AffineTransform tx = new AffineTransform();
tx.translate(-cameraPoint.getX() + getWidth() / 2, -cameraPoint.getY() + getHeight() / 2);
tx.scale(cameraScale, cameraScale);
return tx;
}
public Point2D getClickPoint(Point point) {
try {
return getCamera().inverseTransform(point, null);
} catch (NoninvertibleTransformException e1) {
e1.printStackTrace();
}
return null;
}
public void setBackground(BufferedImage background) {
this.background = background;
}
public ArrayList<DrawObject> getObjects() {
return objects;
}
public void setObjects(ArrayList<DrawObject> objects) {
this.objects = objects;
}
public DrawObject getDragObject() {
return dragObject;
}
public void setDragObject(DrawObject dragObject) {
this.dragObject = dragObject;
}
public Point2D getCameraPoint() {
return cameraPoint;
}
public void setCameraPoint(Point2D cameraPoint) {
this.cameraPoint = cameraPoint;
}
public float getCameraScale() {
return cameraScale;
}
public void setCameraScale(float cameraScale) {
this.cameraScale = cameraScale;
}
public Point2D getLastClickPosition() {
return lastClickPosition;
}
public void setLastClickPosition(Point2D lastClickPosition) {
this.lastClickPosition = lastClickPosition;
}
public Point getLastMousePosition() {
return lastMousePosition;
}
public void setLastMousePosition(Point lastMousePosition) {
this.lastMousePosition = lastMousePosition;
}
public BufferedImage getPodiumImage() {
return podiumImage;
}
public void setPodiumImage(BufferedImage podiumImage) {
this.podiumImage = podiumImage;
}
public ArrayList<BufferedImage> getPanelInfo() {
return panelInfo;
}
public void setPanelInfo(ArrayList<BufferedImage> panelInfo) {
this.panelInfo = panelInfo;
}
public int getScrollfactor() {
return scrollfactor;
}
public void setScrollfactor(int scrollfactor) {
this.scrollfactor = scrollfactor;
}
public int getPanelInfox() {
return panelInfox;
}
public void setPanelInfox(int panelInfox) {
this.panelInfox = panelInfox;
}
public PropertiesPanel getPP() {
return pp;
}
public void update() {
repaint();
}
public DrawObject getSelectedObject() {
return selectedObject;
public javax.swing.Timer getT()
{
return t;
}
public void setSelectedObject(DrawObject selectedObject) {
this.selectedObject = selectedObject;
public void setT(javax.swing.Timer t)
{
this.t = t;
}
public String getClickedOption() {
return clickedOption;
}
public void setClickedOption(String clickedOption) {
this.clickedOption = clickedOption;
}
public void clearObjects(){
objects.clear();
}
}
}
+373 -98
View File
@@ -1,32 +1,56 @@
package Applicatie;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Point2D;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import Objects.DrawObject;
import Objects.Path;
@SuppressWarnings("serial")
public class PropertiesPanel extends JPanel {
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;
JTextField locationXField;
JTextField locationYField;
JTextField scaleField;
JTextField rotationField;
JTextField areaTopField;
JTextField areaBottomField;
JTextField areaLeftField;
JTextField areaRightField;
PropertiesPanel() {
PropertiesPanel()
{
super();
BoxLayout box = new BoxLayout(this, BoxLayout.PAGE_AXIS);
setLayout(box);
@@ -44,17 +68,224 @@ public class PropertiesPanel extends JPanel {
propPanel.add(propLabel);
add(propPanel);
// NAME
JPanel namePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
nameLabel = new JLabel("No Selection");
nameLabel.setFont(new Font("Segoe UI", Font.PLAIN, 20));
namePanel.setPreferredSize(new Dimension(200, 40));
namePanel.setMaximumSize(new Dimension(200, 40));
namePanel.add(nameLabel);
add(namePanel);
// SPACER
add(Box.createRigidArea(spacerDimension));
// BUTTONS
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel buttonLabel = new JLabel("Actions");
buttonLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20));
buttonPanel.setPreferredSize(new Dimension(200, 40));
buttonPanel.setMaximumSize(new Dimension(200, 40));
buttonPanel.add(buttonLabel);
add(buttonPanel);
//AREA PANEL: AVAILABLE FOR ACTIONLISTENER
areaPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
areaPanel.setVisible(false);
rigidArea = Box.createRigidArea(spacerDimension);
rigidArea.setVisible(false);
// BUTTONS ROW 1
JPanel row1ButtonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
JButton deleteButton = new JButton("Delete");
deleteButton.setFont(new Font("Segoe UI", Font.PLAIN, 20));
deleteButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(selectedObject != null)
p.removeObject(selectedObject);
else if(selectedPath != null) {
p.removePath(selectedPath);
}
}
});
JButton areaButton = new JButton("Area");
areaButton.setFont(new Font("Segoe UI", Font.PLAIN, 20));
areaButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
areaPanel.setVisible(!areaPanel.isVisible());
rigidArea.setVisible(!rigidArea.isVisible());
}
});
row1ButtonPanel.setPreferredSize(new Dimension(200, 50));
row1ButtonPanel.setMaximumSize(new Dimension(200, 50));
row1ButtonPanel.add(deleteButton);
row1ButtonPanel.add(areaButton);
add(row1ButtonPanel);
add(rigidArea);
//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.add(areaLabel);
add(areaPanel);
{
JPanel areaTopPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
areaTopPanel.setPreferredSize(new Dimension(200, 30));
areaPanel.add(areaTopPanel);
JLabel areaTopLabel = new JLabel("Top ");
areaTopPanel.add(areaTopLabel);
areaTopField = new JTextField();
areaTopField.setPreferredSize(new Dimension(120, 25));
{
areaTopField.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e)
{
try
{
areaTopField.setBackground(Color.WHITE);
int top = Integer.parseInt(areaTopField.getText());
selectedObject.setAreaTop(top);
p.update();
} catch (NumberFormatException nfe)
{
areaTopField.setBackground(Color.RED);
}
}
public void keyPressed(KeyEvent e){}
});
}
areaTopPanel.add(areaTopField);
}
{
JPanel areaBottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
areaBottomPanel.setPreferredSize(new Dimension(200, 30));
areaPanel.add(areaBottomPanel);
JLabel areaBottomLabel = new JLabel("Bottom");
areaBottomPanel.add(areaBottomLabel);
areaBottomField = new JTextField();
areaBottomField.setPreferredSize(new Dimension(120, 25));
{
areaBottomField.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e)
{
try
{
areaBottomField.setBackground(Color.WHITE);
int bottom = Integer.parseInt(areaBottomField.getText());
selectedObject.setAreaBottom(bottom);
p.update();
} catch (NumberFormatException nfe)
{
areaBottomField.setBackground(Color.RED);
}
}
public void keyPressed(KeyEvent e){}
});
}
areaBottomPanel.add(areaBottomField);
}
{
JPanel areaLeftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
areaLeftPanel.setPreferredSize(new Dimension(200, 30));
areaPanel.add(areaLeftPanel);
JLabel areaLeftLabel = new JLabel("Left ");
areaLeftPanel.add(areaLeftLabel);
areaLeftField = new JTextField();
areaLeftField.setPreferredSize(new Dimension(120, 25));
{
areaLeftField.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e)
{
try
{
areaLeftField.setBackground(Color.WHITE);
int left = Integer.parseInt(areaLeftField.getText());
selectedObject.setAreaLeft(left);
p.update();
} catch (NumberFormatException nfe)
{
areaLeftField.setBackground(Color.RED);
}
}
public void keyPressed(KeyEvent e){}
});
}
areaLeftPanel.add(areaLeftField);
}
{
JPanel areaRightPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
areaRightPanel.setPreferredSize(new Dimension(200, 30));
areaPanel.add(areaRightPanel);
JLabel areaRightLabel = new JLabel("Right ");
areaRightPanel.add(areaRightLabel);
areaRightField = new JTextField();
areaRightField.setPreferredSize(new Dimension(120, 25));
{
areaRightField.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e)
{
try
{
areaRightField.setBackground(Color.WHITE);
int right = Integer.parseInt(areaRightField.getText());
selectedObject.setAreaRight(right);
p.update();
} catch (NumberFormatException nfe)
{
areaRightField.setBackground(Color.RED);
}
}
public void keyPressed(KeyEvent e){}
});
}
areaRightPanel.add(areaRightField);
}
// SPACER
add(Box.createRigidArea(spacerDimension));
// LOCATION
JPanel locationPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel locationLabel = new JLabel("Location");
locationLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20));
locationPanel.setPreferredSize(new Dimension(200, 150));
locationPanel.setMaximumSize(new Dimension(200, 150));
locationPanel.setPreferredSize(new Dimension(200, 110));
locationPanel.setMaximumSize(new Dimension(200, 110));
locationPanel.add(locationLabel);
add(locationPanel);
{
JPanel locationXPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
locationXPanel.setPreferredSize(new Dimension(200, 50));
locationXPanel.setPreferredSize(new Dimension(200, 30));
locationPanel.add(locationXPanel);
JLabel locationXLabel = new JLabel("X");
@@ -62,27 +293,29 @@ public class PropertiesPanel extends JPanel {
locationXField = new JTextField();
locationXField.setPreferredSize(new Dimension(150, 25));
{
locationXField.addKeyListener(new KeyListener() {
locationXField.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e) {
public void keyTyped(KeyEvent e)
{
}
try {
public void keyReleased(KeyEvent e)
{
try
{
locationXField.setBackground(Color.WHITE);
double xpos = Double.parseDouble(locationXField
.getText());
selectedObject.setPosition(new Point2D.Double(xpos,
selectedObject.getPosition().getY()));
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);
}
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
public void keyPressed(KeyEvent e)
{
}
});
}
@@ -90,7 +323,7 @@ public class PropertiesPanel extends JPanel {
}
{
JPanel locationYPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
locationYPanel.setPreferredSize(new Dimension(200, 50));
locationYPanel.setPreferredSize(new Dimension(200, 30));
locationPanel.add(locationYPanel);
JLabel locationYLabel = new JLabel("Y");
@@ -98,28 +331,32 @@ public class PropertiesPanel extends JPanel {
locationYField = new JTextField();
locationYField.setPreferredSize(new Dimension(150, 25));
{
locationYField.addKeyListener(new KeyListener() {
locationYField.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e) {
try {
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
try
{
locationYField.setBackground(Color.WHITE);
double ypos = Double.parseDouble(locationYField
.getText());
selectedObject.setPosition(new Point2D.Double(
selectedObject.getPosition().getX(), ypos));
double ypos = Double.parseDouble(locationYField.getText());
selectedObject.setPosition(new Point2D.Double(selectedObject.getPosition().getX(), ypos));
;
p.update();
} catch (NumberFormatException nfe) {
} catch (NumberFormatException nfe)
{
locationYField.setBackground(Color.RED);
}
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
public void keyPressed(KeyEvent e)
{
}
});
}
@@ -130,13 +367,13 @@ public class PropertiesPanel extends JPanel {
JPanel scalePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel scaleLabel = new JLabel("Scale");
scaleLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20));
scalePanel.setPreferredSize(new Dimension(200, 100));
scalePanel.setMaximumSize(new Dimension(200, 100));
scalePanel.setPreferredSize(new Dimension(200, 70));
scalePanel.setMaximumSize(new Dimension(200, 70));
scalePanel.add(scaleLabel);
add(scalePanel);
{
JPanel scalePanel2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
scalePanel2.setPreferredSize(new Dimension(200, 50));
scalePanel2.setPreferredSize(new Dimension(200, 30));
scalePanel.add(scalePanel2);
JLabel scale2Label = new JLabel(" ");
@@ -144,26 +381,29 @@ public class PropertiesPanel extends JPanel {
scaleField = new JTextField();
scaleField.setPreferredSize(new Dimension(150, 25));
{
scaleField.addKeyListener(new KeyListener() {
scaleField.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e) {
public void keyTyped(KeyEvent e)
{
}
try {
public void keyReleased(KeyEvent e)
{
try
{
scaleField.setBackground(Color.WHITE);
double scale = Double.parseDouble(scaleField
.getText());
double scale = Double.parseDouble(scaleField.getText());
selectedObject.setScale(scale);
p.update();
} catch (NumberFormatException nfe) {
} catch (NumberFormatException nfe)
{
scaleField.setBackground(Color.RED);
}
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
public void keyPressed(KeyEvent e)
{
}
});
}
@@ -174,13 +414,13 @@ public class PropertiesPanel extends JPanel {
JPanel rotationPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel rotationLabel = new JLabel("Rotation");
rotationLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20));
rotationPanel.setPreferredSize(new Dimension(200, 100));
rotationPanel.setMaximumSize(new Dimension(200, 100));
rotationPanel.setPreferredSize(new Dimension(200, 80));
rotationPanel.setMaximumSize(new Dimension(200, 80));
rotationPanel.add(rotationLabel);
add(rotationPanel);
{
JPanel rotationPanel2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
rotationPanel2.setPreferredSize(new Dimension(200, 50));
rotationPanel2.setPreferredSize(new Dimension(200, 30));
rotationPanel.add(rotationPanel2);
JLabel rotation2Label = new JLabel(" ");
@@ -188,27 +428,30 @@ public class PropertiesPanel extends JPanel {
rotationField = new JTextField();
rotationField.setPreferredSize(new Dimension(150, 25));
{
rotationField.addKeyListener(new KeyListener() {
rotationField.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e) {
public void keyTyped(KeyEvent e)
{
}
try {
public void keyReleased(KeyEvent e)
{
try
{
rotationField.setBackground(Color.WHITE);
int rotation = Integer.parseInt(rotationField
.getText()) % 360;
int rotation = Integer.parseInt(rotationField.getText()) % 360;
rotationField.setText(rotation + "");
selectedObject.setRotation(rotation);
p.update();
} catch (NumberFormatException nfe) {
} catch (NumberFormatException nfe)
{
rotationField.setBackground(Color.RED);
}
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
public void keyPressed(KeyEvent e)
{
}
});
}
@@ -216,79 +459,111 @@ public class PropertiesPanel extends JPanel {
}
// SPACER
JPanel spacerPanel = new JPanel();
spacerPanel.setPreferredSize(new Dimension(200, 50));
spacerPanel.setMaximumSize(new Dimension(200, 50));
spacerPanel.setBackground(new Color(220, 220, 220));
add(spacerPanel);
add(Box.createRigidArea(spacerDimension));
// EXAMPLE
JPanel examplePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel exampleLabel = new JLabel("Example");
exampleLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20));
examplePanel.setPreferredSize(new Dimension(200, 100));
examplePanel.setMaximumSize(new Dimension(200, 100));
examplePanel.add(exampleLabel);
add(examplePanel);
// AGENDA
JPanel agendaPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel agendaLabel = new JLabel("Agenda");
agendaLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20));
agendaPanel.setPreferredSize(new Dimension(200, 100));
agendaPanel.setMaximumSize(new Dimension(200, 100));
agendaPanel.add(agendaLabel);
add(agendaPanel);
enableComponents(this, false);
}
public void setSelected(DrawObject drOb) {
public void setSelected(DrawObject drOb)
{
selectedObject = drOb;
selectedPath = null;
fillFields();
enableComponents(this, true);
}
public void clearSelected() {
public void clearSelected()
{
enableComponents(this, false);
clearFields(this);
selectedObject = null;
selectedPath = null;
}
public void update() {
fillFields();
public void update()
{
if(selectedObject != null)
fillFields();
}
private void enableComponents(Container container, boolean enable) {
private void enableComponents(Container container, boolean enable)
{
Component[] components = container.getComponents();
for (Component component : components) {
for (Component component : components)
{
component.setEnabled(enable);
if (component instanceof Container) {
if (component instanceof Container)
{
enableComponents((Container) component, enable);
}
}
}
private void clearFields(Container container) {
private void clearFields(Container container)
{
Component[] components = container.getComponents();
for (Component component : components) {
if (component instanceof JTextField) {
for (Component component : components)
{
if (component instanceof JTextField)
{
((JTextField) component).setText("");
((JTextField) component).setBackground(Color.WHITE);
}
if (component instanceof Container) {
if (component instanceof Container)
{
clearFields((Container) component);
}
}
nameLabel.setText("No Selection");
areaPanel.setVisible(false);
rigidArea.setVisible(false);
}
private void fillFields() {
if (selectedObject != null) {
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)
+ "");
}
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() + "");
}
public void setPanel(Panel p) {
public void setPanel(Panel p)
{
this.p = p;
}
}
public void setSelectedPath(Path path) {
selectedObject = null;
selectedPath = path;
fillPathFields();
}
private void fillPathFields() {
nameLabel.setText("Path");
enableComponents(this, true);
locationXField.setEnabled(false);
locationYField.setEnabled(false);
scaleField.setEnabled(false);
rotationField.setEnabled(false);
}
}
+8 -6
View File
@@ -11,6 +11,8 @@ import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import Objects.DrawObject;
public class SaveLoad {
@@ -21,7 +23,7 @@ public class SaveLoad {
fileChooser.setFileFilter(new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.isFile() && pathname.getName().endsWith(".agn"))
if(pathname.isFile() && pathname.getName().endsWith(".ter"))
{
return true;
}else if(pathname.isDirectory()){return true;}else{return false;}
@@ -29,7 +31,7 @@ public class SaveLoad {
@Override
public String getDescription() {
return ".agn";
return ".ter";
}
});
@@ -39,9 +41,9 @@ public class SaveLoad {
if(userSelection == JFileChooser.APPROVE_OPTION)
{
File file = fileChooser.getSelectedFile();
if(!file.getName().endsWith(".agn"))
if(!file.getName().endsWith(".ter"))
{
file = new File(file.getAbsolutePath() + ".agn");
file = new File(file.getAbsolutePath() + ".ter");
}
if(file.exists())
@@ -80,7 +82,7 @@ public class SaveLoad {
fileChooser.setFileFilter(new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.isFile() && pathname.getName().endsWith(".agn"))
if(pathname.isFile() && pathname.getName().endsWith(".ter"))
{
return true;
}else if(pathname.isDirectory()){return true;}else{return false;}
@@ -88,7 +90,7 @@ public class SaveLoad {
@Override
public String getDescription() {
return ".agn";
return ".ter";
}
});
+110 -78
View File
@@ -7,54 +7,60 @@ import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import Agenda.Agenda;
import Agenda.Event;
import Objects.DrawObject;
public class Visitor {
public class Visitor
{
Point2D position;
double rotation;
double scale;
double speed;
String filename;
ArrayList<Action> actions;
Agenda agenda;
ArrayList<DrawObject> objects;
public Visitor(String filename, Point2D position, Agenda agenda,
ArrayList<DrawObject> objects) {
public Visitor(String filename, Point2D position, Agenda agenda, ArrayList<DrawObject> objects)
{
this.position = position;
this.filename = filename;
this.rotation = 0;
this.speed = 1 + Math.random()*5;
this.speed = 1 + Math.random() * 4;
scale = 1;
actions = new ArrayList<Action>();
this.agenda = agenda;
this.objects = objects;
fillActions();
}
public void draw(Graphics2D g2)
public void draw(Graphics2D g2)
{
AffineTransform tx = getTransform();
Image image = Images.getImage(filename);
g2.drawImage(image, tx, null);
}
private AffineTransform getTransform() {
AffineTransform tx = new AffineTransform();
tx.translate(position.getX(), position.getY());
private AffineTransform getTransform()
{
Image image = Images.getImage(filename);
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<DrawObject> objects, int currentTime,
ArrayList<Visitor> visitors) {
Point2D target = new Point(-100, -100);
for (Action a : actions) {
if (currentTime >= a.getStartTime()
&& currentTime < a.getStoptime()) {
public void update(ArrayList<DrawObject> objects, int currentTime, ArrayList<Visitor> visitors)
{
Point2D target = new Point(500, 500);
for (Action a : actions)
{
if (currentTime >= a.getStartTime() && currentTime < a.getStoptime())
{
target = a.getPosition();
}
@@ -62,93 +68,119 @@ public class Visitor {
moveToTarget(target, objects, visitors);
}
public void moveToTarget(Point2D target, ArrayList<DrawObject> objects, ArrayList<Visitor> visitors) {
public void moveToTarget(Point2D target, ArrayList<DrawObject> objects, ArrayList<Visitor> visitors)
{
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 > 15){
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)
{
rotation -= 0.15;
} else if (rotation < newRot && distance > 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 > 15){
position = new Point2D.Double((position.getX() + directionX * speed),(position.getY() + directionY * speed));
// 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)) {
for (DrawObject object : objects)
{
if (hitTest(object))
{
possible = false;
}
}
for (Visitor object : visitors) {
if (hitTestVisitor(object) && object != this) {
possible = false;
}
}
if (possible == false) {
// for (Visitor object : visitors)
// {
// if (hitTestVisitor(object) && object != this)
// {
// possible = false;
// }
// }
if (possible == false)
{
position = oldPosition;
rotation += 0.2;
}
}
public void fillActions() {
public void fillActions()
{
int startTime = 540;
int stopTime = 1260;
while (startTime < stopTime) {
while (startTime < stopTime)
{
int random = (int) Math.floor(Math.random() * 51);
if (random < 30) {
if (random < 30)
{
Point2D position = null;
for (Event e : agenda.getEvents()) {
if (convertMinutesToHours(startTime) > e.getStart()
&& convertMinutesToHours(startTime) < e.getStop()) {
for (DrawObject d : objects) {
if (d.getFileName().equals(e.getStage().getName())) {
position = d.getMiddlePoint();
for (Event e : agenda.getEvents())
{
if (convertMinutesToHours(startTime) > e.getStart() && convertMinutesToHours(startTime) < e.getStop())
{
for (DrawObject d : objects)
{
if (d.getFileName().equals(e.getStage().getName()))
{
position = d.getPosition();
}
}
}
}
int randomtime = (int) (40 + (Math.random() * (60 - 40)));
if (position != null) {
if (position != null)
{
actions.add(new Action(position, startTime, randomtime));
}
startTime = startTime + randomtime;
} else if (random >= 30 && random < 35) {
}
else if (random >= 30 && random < 35)
{
Point2D position = null;
for (DrawObject d : objects) {
if (d.getFileName().equals("entrance")) {
position = d.getMiddlePoint();
for (DrawObject d : objects)
{
if (d.getFileName().equals("entrance"))
{
position = d.getPosition();
}
}
if (position != null) {
if (position != null)
{
actions.add(new Action(position, startTime, 35));
startTime = startTime + 35;
}
startTime = startTime + 35;
} else if (random > 35) {
}
else if (random > 35)
{
Point2D position = null;
for (DrawObject d : objects) {
if (d.getFileName().equals("wc")) {
position = d.getMiddlePoint();
for (DrawObject d : objects)
{
if (d.getFileName().equals("wc"))
{
position = d.getPosition();
}
}
if (position != null) {
if (position != null)
{
actions.add(new Action(position, startTime, 35));
}
startTime = startTime + 35;
@@ -157,7 +189,8 @@ public class Visitor {
}
}
public int convertMinutesToHours(int startTime) {
public int convertMinutesToHours(int startTime)
{
int time = 0;
int hours = startTime / 60;
int minutes = startTime % 60;
@@ -165,27 +198,26 @@ public class Visitor {
return time;
}
public int getEndX() {
public int getEndX()
{
Image image = Images.getImage(filename);
return (int) (position.getX() + image.getWidth(null));
}
public int getEndY() {
public int getEndY()
{
Image image = Images.getImage(filename);
return (int) (position.getY() + image.getHeight(null));
}
public boolean hitTest(DrawObject to2) {
return (getEndX() >= to2.getX() && getEndY() >= to2.getY()
&& to2.getEndX() >= position.getX() && to2.getEndY() >= position
.getY());
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());
}
}
// public boolean hitTestVisitor(Visitor v)
// {
// return (getEndX() >= v.position.getX() && getEndY() >= v.position.getY() && v.getEndX() >= position.getX() && v.getEndY() >= position.getY());
// }
}
+28 -16
View File
@@ -1,38 +1,50 @@
package Applicatie;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import Listeners.Keyboard;
public class Window extends JFrame {
public class Window extends JFrame
{
private static final long serialVersionUID = -1324363758675184283L;
Panel fp;
Window()
{
private Panel fp;
Window() {
super("Festival Plannner");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(500,600);
setExtendedState( getExtendedState()|JFrame.MAXIMIZED_BOTH );
//CONTENT PANELS
//setSize(500, 600);
setMinimumSize(new Dimension(1160, 680));
setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
// CONTENT PANELS
JPanel contentPanel = new JPanel(new BorderLayout());
PropertiesPanel pp = new PropertiesPanel();
fp = new Panel(pp);
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);
addKeyListener(new Keyboard(fp));
setContentPane(contentPanel);
//END CONTENT PANELS
//MENUBAR
// END CONTENT PANELS
// MENUBAR
setJMenuBar(new MenuBar(this));
//END MENUBAR
// END MENUBAR
setFocusable(true);
setVisible(true);
}
}
public Panel getPanel() {
return fp;
}
}
+80
View File
@@ -0,0 +1,80 @@
package Listeners;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Point2D;
import Applicatie.Panel;
public class Keyboard implements KeyListener {
private Panel panel;
public Keyboard(Panel panel) {
this.panel = panel;
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == e.VK_DELETE ) {
if(panel.getSelectedObject() != null)
panel.removeObject(panel.getSelectedObject());
else if(panel.getCurrentPath() != null)
panel.removePath(panel.getCurrentPath());
}
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.checkCollision();
}
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.checkCollision();
}
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.checkCollision();
}
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.checkCollision();
}
else if(e.getKeyCode() == e.VK_ENTER) {
if(panel.getClickedOption().equals("Path")) {
panel.setClickedOption("drag");
panel.getCurrentPath().setTempPoint(null);
panel.setcurrentPath(null);
panel.getPP().clearSelected();
}
}
else if(e.getKeyCode() == e.VK_P) {
panel.startPath();
}
panel.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
//if(e.getKeyCode() == e.VK_LEFT) {
checkCollision();
//}
}
@Override
public void keyTyped(KeyEvent e) {
}
private void checkCollision() {
if(panel.getSelectedObject() != null) {
if(panel.getSelectedObject().getRectangleColor() != Color.BLACK) {
panel.getSelectedObject().setPosition(panel.getSelectionPosition());
panel.getSelectedObject().setRectangleColor(Color.BLACK);
}
panel.repaint();
}
}
}
+109 -66
View File
@@ -1,96 +1,139 @@
package Listeners;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.util.Iterator;
import java.util.Map;
import Applicatie.DrawObject;
import Applicatie.Panel;
import Objects.Podium;
import Objects.DrawObject;
import Objects.Stage;
public class Mouse extends MouseAdapter {
public class Mouse extends MouseAdapter
{
private Panel panel;
private DrawObject selectedObject;
public Mouse(Panel panel) {
public Mouse(Panel panel)
{
this.panel = panel;
selectedObject = null;
}
public void mousePressed(MouseEvent e) {
public void mousePressed(MouseEvent e)
{
Point2D clickPoint = panel.getClickPoint(e.getPoint());
panel.setLastClickPosition(clickPoint);
panel.setLastMousePosition(e.getPoint());
if (e.getY() < 150) {
// if(e.getX() < 51) //51 = width podium image
// panel.setDragObject(new Podium(clickPoint));
// else
// panel.setDragObject(new Toilet(clickPoint));
int i = 0;
int last = 0;
for (BufferedImage image : panel.getPanelInfo()) {
if (e.getX() >= panel.getScrollfactor()
&& e.getX() < last + image.getWidth()
+ panel.getScrollfactor()) {
DrawObject tempDrawObj = panel.createNewDrawObject(i);
tempDrawObj.setPosition(clickPoint);
panel.setDragObject(tempDrawObj);
break;
}
i++;
last += image.getWidth();
}
if (panel.getDragObject() != null) {
panel.add(panel.getDragObject());
}
} else {
for (DrawObject o : panel.getObjects()) {
if (o.contains(clickPoint)) {
if (o == selectedObject) {
boolean upperLeft = o.containsCorner(clickPoint, 0);
boolean upperRight = o.containsCorner(clickPoint, 1);
boolean bottomLeft = o.containsCorner(clickPoint, 2);
boolean bottomRight = o.containsCorner(clickPoint, 3);
boolean rotate = o.containsCorner(clickPoint, 4);
if (upperLeft) {
panel.setClickedOption("upperLeft");
} else if (upperRight) {
panel.setClickedOption("upperRight");
} else if (bottomLeft) {
panel.setClickedOption("bottomLeft");
} else if (bottomRight) {
panel.setClickedOption("bottomRight");
} else if (rotate) {
panel.setClickedOption("rotate");
} else {
panel.setClickedOption("drag");
}
if(!panel.getClickedOption().equals("Path")) {
if (e.getY() < 150)
{
int i = 0;
int last = 0;
for (BufferedImage image : panel.getPanelInfo())
{
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;
break;
}
if (selectedObject != null)
selectedObject.setSelected(false);
panel.setDragObject(o);
o.setSelected(true);
selectedObject = o;
panel.setDragObject(o);
panel.getPP().setSelected(o);
i++;
last += image.getWidth();
}
if (panel.getDragObject() != null)
{
panel.add(panel.getDragObject());
}
}
else
{
for (DrawObject o : panel.getObjects())
{
if (o.contains(clickPoint))
{
if (o == selectedObject)
{
boolean upperLeft = o.containsCorner(clickPoint, 0);
boolean upperRight = o.containsCorner(clickPoint, 1);
boolean bottomLeft = o.containsCorner(clickPoint, 2);
boolean bottomRight = o.containsCorner(clickPoint, 3);
boolean rotate = o.containsCorner(clickPoint, 4);
if (upperLeft)
{
panel.setClickedOption("upperLeft");
}
else if (upperRight)
{
panel.setClickedOption("upperRight");
}
else if (bottomLeft)
{
panel.setClickedOption("bottomLeft");
}
else if (bottomRight)
{
panel.setClickedOption("bottomRight");
}
else if (rotate)
{
panel.setClickedOption("rotate");
}
else
{
panel.setClickedOption("drag");
}
}
if (selectedObject != null)
selectedObject.setSelected(false);
o.setSelected(true);
selectedObject = o;
panel.setDragObject(o);
panel.getPP().setSelected(o);
panel.setSelectedObject(o);
panel.setSelectionPosition(panel.getDragObject().getPosition());
}
}
panel.checkPath(clickPoint);
}
if (panel.getDragObject() == null && selectedObject != null)
{
selectedObject.setSelected(false);
panel.setSelectedObject(null);
panel.getPP().clearSelected();
selectedObject = null;
}
}
if (panel.getDragObject() == null && selectedObject != null) {
selectedObject.setSelected(false);
selectedObject = null;
else { //Making path.
panel.getCurrentPath().addPoint(new Point2D.Double(clickPoint.getX(),clickPoint.getY()));
}
panel.repaint();
}
public void mouseReleased(MouseEvent e) {
panel.setDragObject(null);
panel.setClickedOption("drag");
public void mouseReleased(MouseEvent e)
{
if(panel.getDragObject() != null) {
if(panel.getDragObject().getRectangleColor() != Color.RED) {
panel.setDragObject(null);
panel.setClickedOption("drag");
}
else {
panel.getDragObject().setPosition(panel.getSelectionPosition());
panel.getDragObject().setRectangleColor(Color.BLACK);
}
panel.setSelectionPosition(panel.getSelectedObject().getPosition());
}
panel.repaint();
}
}
}
+61 -37
View File
@@ -1,11 +1,15 @@
package Listeners;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Point2D;
import Applicatie.Panel;
import Objects.DrawObject;
public class MouseMotion extends MouseMotionAdapter {
public class MouseMotion extends MouseMotionAdapter
{
private Panel panel;
@@ -14,78 +18,98 @@ public class MouseMotion extends MouseMotionAdapter {
this.panel = panel;
}
public void mouseDragged(MouseEvent e) {
public void mouseDragged(MouseEvent e)
{
Point2D clickPoint = panel.getClickPoint(e.getPoint());
if(panel.getDragObject() != null) {
Point2D objectPoint = panel.getDragObject().getObjectPoint(panel.getDragObject().getPosition());
switch(panel.getClickedOption()) {
if (panel.getDragObject() != null)
{
switch (panel.getClickedOption())
{
case "drag":
if(panel.getDragObject() != null)
panel.getDragObject().setPosition(new Point2D.Double(
(panel.getDragObject().getPosition().getX() ) - ((panel.getLastClickPosition().getX() - clickPoint.getX()) ) / panel.getDragObject().getScale(),
(panel.getDragObject().getPosition().getY()) - (panel.getLastClickPosition().getY() - clickPoint.getY()) / panel.getDragObject().getScale() ));
if (panel.getDragObject() != null)
panel.getDragObject().setPosition(new Point2D.Double((panel.getDragObject().getPosition().getX()) - ((panel.getLastClickPosition().getX() - clickPoint.getX())) / panel.getDragObject().getScale(), (panel.getDragObject().getPosition().getY()) - (panel.getLastClickPosition().getY() - clickPoint.getY()) / panel.getDragObject().getScale()));
panel.checkCollision();
break;
case "upperLeft":
if(clickPoint.getX() < panel.getDragObject().getPosition().getX() && clickPoint.getY() < panel.getDragObject().getPosition().getY()) {
if (clickPoint.getX() < panel.getDragObject().getPosition().getX() && clickPoint.getY() < panel.getDragObject().getPosition().getY())
{
resizeBigger();
}
else if (clickPoint.getX() > panel.getDragObject().getPosition().getX() && clickPoint.getY() > panel.getDragObject().getPosition().getY()) {
resizeSmaller();
else if (clickPoint.getX() > panel.getDragObject().getPosition().getX() && clickPoint.getY() > panel.getDragObject().getPosition().getY())
{
resizeSmaller(clickPoint);
}
break;
case "upperRight":
if(clickPoint.getX() > panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() < panel.getDragObject().getRectangle().getY()) {
if (clickPoint.getX() > panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() < panel.getDragObject().getRectangle().getY())
{
resizeBigger();
}
else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() > panel.getDragObject().getRectangle().getY()) {
resizeSmaller();
else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() > panel.getDragObject().getRectangle().getY())
{
resizeSmaller(clickPoint);
}
break;
case "bottomLeft":
if(clickPoint.getX() < panel.getDragObject().getRectangle().getX() && clickPoint.getY() > panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) {
case "bottomLeft":
if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() && clickPoint.getY() > panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight())
{
resizeBigger();
}
else if (clickPoint.getX() > panel.getDragObject().getRectangle().getX() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) {
resizeSmaller();
else if (clickPoint.getX() > panel.getDragObject().getRectangle().getX() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight())
{
resizeSmaller(clickPoint);
}
break;
case "bottomRight":
if(clickPoint.getX() > panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() > panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) {
if (clickPoint.getX() > panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() > panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight())
{
resizeBigger();
}
else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) {
resizeSmaller();
else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight())
{
resizeSmaller(clickPoint);
}
break;
case "rotate":
double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX());
case "rotate":
double tempval = panel.getDragObject().getRotation() - (panel.getLastClickPosition().getX() - clickPoint.getX());
panel.getDragObject().setRotation(tempval);
break;
}
}
else {
panel.setCameraPoint(new Point2D.Double(
panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()),
panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY())
));
}
else
{
panel.setCameraPoint(new Point2D.Double(panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()), panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY())));
}
panel.repaint();
panel.setLastMousePosition(e.getPoint());
panel.setLastClickPosition(clickPoint);
panel.getPP().update();
}
private void resizeBigger() {
public void mouseMoved(MouseEvent e) {
if(panel.getClickedOption().equals("Path"))
panel.getCurrentPath().setTempPoint(panel.getClickPoint(e.getPoint()));
panel.repaint();
}
private void resizeBigger()
{
double scale = panel.getDragObject().getScale()*1 + 0.02;
panel.getDragObject().setScale(scale);
panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX()-2,panel.getDragObject().getPosition().getY()-2));
panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX() -2, panel.getDragObject().getPosition().getY() - 2));
panel.checkCollision();
}
private void resizeSmaller() {
if(panel.getDragObject().getScale() > 0.2) {
private void resizeSmaller(Point2D clickPoint)
{
System.out.println(clickPoint.getX());
if (panel.getDragObject().getScale() > 0.2)
{
double scale = panel.getDragObject().getScale()*1 - 0.02;
panel.getDragObject().setScale(scale);
panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX()+2,panel.getDragObject().getPosition().getY()+2));
panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX() +2, panel.getDragObject().getPosition().getY() +2 ));
panel.checkCollision();
}
}
}
}
+33 -31
View File
@@ -1,59 +1,61 @@
package Listeners;
import java.awt.Point;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.geom.Point2D;
import Applicatie.DrawObject;
import Applicatie.Panel;
public class MouseWheel implements MouseWheelListener {
public class MouseWheel implements MouseWheelListener
{
private Panel panel;
private int scrollfactor;
public MouseWheel(Panel panel) {
public MouseWheel(Panel panel)
{
this.panel = panel;
scrollfactor = 20;
}
public void mouseWheelMoved(MouseWheelEvent e) {
Point2D clickPoint = panel.getClickPoint(e.getPoint());
for (DrawObject o : panel.getObjects()) {
if (o.contains(clickPoint)) {
double scale = o.getScale() * 1
+ (e.getPreciseWheelRotation() / 10.0);
o.setScale(scale);
panel.getPP().update();
panel.repaint();
return;
}
}
public void mouseWheelMoved(MouseWheelEvent e)
{
if (e.getY() < 150)
{
if (e.getY() < 150) {
if (e.getPreciseWheelRotation() < 0) {
if (panel.getScrollfactor() + scrollfactor
+ panel.getPanelInfoLength() < panel.getWidth()) {
panel.setScrollfactor(panel.getScrollfactor()
+ scrollfactor);
if (e.getPreciseWheelRotation() < 0)
{
if (panel.getScrollfactor() + scrollfactor + panel.getPanelInfoLength() < panel.getWidth())
{
panel.setScrollfactor(panel.getScrollfactor() + scrollfactor);
}
} else {
if (panel.getScrollfactor() - scrollfactor >= 0) {
panel.setScrollfactor(panel.getScrollfactor()
- scrollfactor);
} else
{
if (panel.getScrollfactor() - scrollfactor >= 0)
{
panel.setScrollfactor(panel.getScrollfactor() - scrollfactor);
}
}
} else {
} else
{
// cameraPoint
double cameraScale = panel.getCameraScale() * 1
- (e.getPreciseWheelRotation() / 10);
panel.setCameraScale((float) cameraScale);
double cameraScale = panel.getCameraScale() * 1 - (e.getPreciseWheelRotation() / 10);
if (cameraScale >= 0.1 && cameraScale < 4)
{
panel.setCameraScale((float) cameraScale);
//panel.setCameraPoint(new Point2D.Double(e.getX()-(panel.getWidth()/2)-panel.getCameraPoint().getX(), e.getY()-(panel.getHeight()/2) - panel.getCameraPoint().getY()));
//panel.setCameraPoint( new Point2D.Double(
// -panel.getClickPoint(new Point(e.getX(), e.getY())).getX(),
// -panel.getClickPoint(new Point(e.getX(), e.getY())).getY()
// ));
//TODO FIX
}
}
panel.repaint();
}
}
}
+347
View File
@@ -0,0 +1,347 @@
package Objects;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.Serializable;
import javax.swing.ImageIcon;
import Applicatie.Images;
public abstract class DrawObject implements Serializable
{
Point2D position;
double rotation;
double scale;
int width;
int height;
// private Image image;
protected boolean selected;
private String filename;
protected int areaTop;
protected int areaBottom;
protected int areaLeft;
protected int areaRight;
private Rectangle2D rektAngle;
private Rectangle2D upperLeftCorner;
private Rectangle2D upperRightCorner;
private Rectangle2D bottomLeftCorner;
private Rectangle2D bottomRightCorner;
private Ellipse2D rotateDot;
static final int UPPERLEFT = 0;
static final int UPPERRIGHT = 1;
static final int BOTTOMLEFT = 2;
static final int BOTTOMRIGHT = 3;
private Color rectangleColor;
public DrawObject(String filename, Point2D position)
{
// image = new ImageIcon(filename).getImage();
Image image = Images.getImage(filename);
width = image.getWidth(null);
height = image.getHeight(null);
this.filename = filename;
scale = 1;
rotation = 0;
this.position = position;
rectangleColor = Color.BLACK;
areaTop = 0;
areaBottom = 0;
areaLeft = 0;
areaRight = 0;
}
public abstract String getName();
public void draw(Graphics2D g)
{
AffineTransform tx = getTransform();
Image image = Images.getImage(filename);
g.drawImage(image, tx, null);
if (selected)
{
// g.rotate(Math.toRadians(rotation), width/2,
// height/2);
AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(rotation), position.getX() + image.getWidth(null) / 2, position.getY() + image.getHeight(null) / 2);
// g.transform(rotate);
g.setColor(rectangleColor);
g.setStroke(new BasicStroke(7));
rektAngle = new Rectangle2D.Double((int) position.getX() - areaLeft, (int) position.getY() - areaTop, width + areaLeft + areaRight, height + areaTop + areaBottom);
tx = getTransformRectangle();
rektAngle.setFrame(tx.createTransformedShape(rektAngle).getBounds());
g.draw(rektAngle);
g.setColor(Color.YELLOW);
upperLeftCorner = new Rectangle2D.Double(rektAngle.getX() - 7, rektAngle.getY() - 7, 15, 15);
upperRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth() - 8, rektAngle.getY() - 7, 15, 15);
bottomLeftCorner = new Rectangle2D.Double(rektAngle.getX() - 7, rektAngle.getY() + rektAngle.getHeight() - 8, 15, 15);
bottomRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth() - 8, rektAngle.getY() + rektAngle.getHeight() - 8, 15, 15);
g.fill(upperLeftCorner); // upperleft
g.fill(upperRightCorner); // upperright
g.fill(bottomLeftCorner); // bottomleft
g.fill(bottomRightCorner); // bottomright
g.setColor(Color.RED);
rotateDot = new Ellipse2D.Double((rektAngle.getX() + (rektAngle.getWidth() / 2)) - 8, rektAngle.getY() - 8, 15, 15);
g.fill(rotateDot);
}
}
protected AffineTransform getTransform()
{
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;
}
protected AffineTransform getTransformSelection()
{
AffineTransform tx = new AffineTransform();
tx.scale(scale, scale);
tx.translate(position.getX(), position.getY());
return tx;
}
/**
* Special transformation for the selection rectangle, because the
* translation of the image one places the rectangle translated from the
* image.
*
* @return affineTransform
*/
private AffineTransform getTransformRectangle()
{
AffineTransform tx = new AffineTransform();
tx.scale(scale, scale);
return tx;
}
public boolean contains(Point2D clickPoint)
{
Shape shape;
if (rektAngle == null)
{
shape = new Rectangle2D.Double(0 - areaLeft, 0 - areaTop, width + areaLeft + areaRight, height + areaTop + areaBottom);
return getTransform().createTransformedShape(shape).contains(clickPoint);
}
else
{
shape = new Rectangle2D.Double(-9 - areaLeft, -9 - areaTop, width + 13 + areaLeft + areaRight, height + 13 + areaTop + areaBottom);
return getTransformSelection().createTransformedShape(shape).contains(clickPoint);
}
}
public Point2D getObjectPoint(Point2D point)
{
try
{
return getTransform().inverseTransform(point, null);
}
catch (NoninvertibleTransformException e)
{
e.printStackTrace();
}
return null;
}
/**
* Checking collision.
*
* @param object
* . the drawObject to check collision with.
* @return if there is a collision.
*/
public boolean collision(DrawObject object)
{
Shape ownShape = getRectangle();
Rectangle2D otherRectangle = object.getTransform().createTransformedShape(object.getImageRectangle()).getBounds2D();
if(ownShape != null && otherRectangle != null) {
if (ownShape.intersects(otherRectangle))
return true;
else
return false;
}
else
return false;
}
/**
* This method checks if the place thats clicked is inside one of the
* corners.
*
* @param point
* @param corner
* @return if the clicked point is inside one of the corners
*/
public boolean containsCorner(Point2D point, int corner)
{
Rectangle2D chosenCorner = null;
switch (corner)
{
case 0:
chosenCorner = upperLeftCorner;
break;
case 1:
chosenCorner = upperRightCorner;
break;
case 2:
chosenCorner = bottomLeftCorner;
break;
case 3:
chosenCorner = bottomRightCorner;
break;
case 4:
if (point.getX() > rotateDot.getX() && point.getX() < rotateDot.getX() + rotateDot.getWidth() && point.getY() > rotateDot.getY() && point.getY() < rotateDot.getY() + rotateDot.getHeight())
return true;
else
return false;
}
if (point.getX() > chosenCorner.getX() && point.getX() < chosenCorner.getX() + chosenCorner.getWidth() && point.getY() > chosenCorner.getY() && point.getY() < chosenCorner.getY() + chosenCorner.getHeight())
return true;
else
return false;
}
public void setSelected(boolean b)
{
selected = b;
}
public Point2D getPosition()
{
return position;
}
public void setPosition(Point2D position)
{
this.position = position;
}
public double getRotation()
{
return rotation;
}
public void setRotation(double rotation)
{
this.rotation = rotation;
}
public double getScale()
{
return scale;
}
public void setScale(double scale)
{
this.scale = scale;
}
public boolean isSelected()
{
return selected;
}
public Rectangle2D getRectangle()
{
return rektAngle;
}
public void setRectangle(Rectangle2D rectangle)
{
rektAngle = rectangle;
}
public Color getRectangleColor()
{
return rectangleColor;
}
public void setRectangleColor(Color rectangleColor)
{
this.rectangleColor = rectangleColor;
}
public Rectangle2D getImageRectangle()
{
Image image = Images.getImage(filename);
return new Rectangle2D.Double(0, 0, image.getWidth(null), image.getHeight(null));
}
public int getAreaTop()
{
return areaTop;
}
public void setAreaTop(int areaTop)
{
this.areaTop = areaTop;
}
public int getAreaBottom()
{
return areaBottom;
}
public void setAreaBottom(int areaBottom)
{
this.areaBottom = areaBottom;
}
public int getAreaLeft()
{
return areaLeft;
}
public void setAreaLeft(int areaLeft)
{
this.areaLeft = areaLeft;
}
public int getAreaRight()
{
return areaRight;
}
public void setAreaRight(int areaRight)
{
this.areaRight = areaRight;
}
public int getEndX()
{
Image image = Images.getImage(filename);
return (int) (position.getX() + image.getWidth(null));
}
public int getEndY()
{
Image image = Images.getImage(filename);
return (int) (position.getY() + image.getHeight(null));
}
public String getFileName()
{
return filename;
}
}
+9 -7
View File
@@ -1,17 +1,19 @@
package Objects;
import java.awt.geom.Point2D;
import Applicatie.DrawObject;
public class Entrance extends DrawObject
{
public class Entrance extends DrawObject {
public Entrance(Point2D position) {
public Entrance(Point2D position)
{
super("entrance", position);
}
@Override
public String getName() {
public String getName()
{
return "Entrance";
}
}
}
+15
View File
@@ -0,0 +1,15 @@
package Objects;
import java.awt.geom.Point2D;
public class Food extends DrawObject {
public Food(Point2D position) {
super("food", position);
}
public String getName() {
return "Food";
}
}
+19
View File
@@ -0,0 +1,19 @@
package Objects;
import java.awt.geom.Point2D;
public class OldPath extends DrawObject
{
public OldPath(Point2D position)
{
super("path", position);
}
@Override
public String getName()
{
return "Path";
}
}
+110 -9
View File
@@ -1,17 +1,118 @@
package Objects;
import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.TexturePaint;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import Applicatie.DrawObject;
import javax.imageio.ImageIO;
/**
* Create's a path.
* @author Wesley de Hek
* @version 1.2
*/
public class Path {
public class Path extends DrawObject {
public Path(Point2D position) {
super("path", position);
private ArrayList<Point2D> points;
private ArrayList<Shape> lines;
private Point2D tempPoint;
private BufferedImage pathBackground;
/**
* Constructor.
*/
public Path() {
points = new ArrayList<>();
lines = new ArrayList<>();
try {
pathBackground = ImageIO.read(new File("images/newPath.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
public String getName() {
return "Path";
/**
* Draws the path.
* @param g2 - the Graphics2D object.
*/
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);
Point2D point = points.get(i);
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());
}
}
}
/**
* Check if one of the lines contains the given point.
* @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)) {
return true;
}
}
return false;
}
/**
* Get array with line's from the points.
* @return a array with all the lines of the path.
*/
public ArrayList<Shape> getPath() {
lines.clear();
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);
lines.add(stroke.createStrokedShape(line));
}
return lines;
}
/**
* Add a point to the path.
* @param point - the point you want the path to pass.
*/
public void addPoint(Point2D point) {
points.add(point);
}
/**
* Get all the path points.
* @return all the points of the path.
*/
public ArrayList<Point2D> getPoints() {
return points;
}
/**
* 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) {
tempPoint = point;
}
}
-19
View File
@@ -1,19 +0,0 @@
package Objects;
import java.awt.geom.Point2D;
import Applicatie.DrawObject;
public class Podium extends DrawObject {
public Podium(Point2D position) {
super("stage", position);
}
@Override
public String getName() {
return "stage";
}
}
+9 -10
View File
@@ -1,19 +1,18 @@
package Objects;
import java.awt.geom.Point2D;
import Applicatie.DrawObject;
public class Stage extends DrawObject {
public Stage(Point2D position) {
super("stage1", position);
public class Stage extends DrawObject
{
public Stage(Point2D position)
{
super("stage", position);
}
@Override
public String getName() {
public String getName()
{
return "Stage";
}
}
}
+8 -8
View File
@@ -1,19 +1,19 @@
package Objects;
import java.awt.geom.Point2D;
import Applicatie.DrawObject;
public class Toilet extends DrawObject
{
public class Toilet extends DrawObject {
public Toilet(Point2D position) {
public Toilet(Point2D position)
{
super("wc", position);
}
@Override
public String getName() {
public String getName()
{
return "Toilet";
}
}
}
+8 -7
View File
@@ -1,18 +1,19 @@
package Objects;
import java.awt.geom.Point2D;
import Applicatie.DrawObject;
public class Wall extends DrawObject
{
public class Wall extends DrawObject {
public Wall(Point2D position) {
public Wall(Point2D position)
{
super("wall", position);
}
@Override
public String getName() {
public String getName()
{
return "Wall";
}
}
}