123 lines
3.6 KiB
Java
123 lines
3.6 KiB
Java
package gui;
|
|
|
|
import java.awt.BasicStroke;
|
|
import java.awt.Color;
|
|
import java.awt.Graphics;
|
|
import java.awt.Graphics2D;
|
|
import java.awt.event.MouseEvent;
|
|
import java.awt.event.MouseListener;
|
|
import java.awt.event.MouseMotionListener;
|
|
import java.awt.image.BufferedImage;
|
|
|
|
import javax.swing.JPanel;
|
|
|
|
import gui.render.DrawboxRectengleRenderingFunction;
|
|
import gui.render.HitboxCircleRenderingFunction;
|
|
import gui.render.HitboxRectengleRenderingFunction;
|
|
import gui.render.ShapeRenderingFunction;
|
|
import model.Entity;
|
|
import repository.Project;
|
|
|
|
public class EditableCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
|
DrawboxRectengleRenderingFunction drawboxRectengleRenderFunct;
|
|
HitboxRectengleRenderingFunction hitboxRectengleRenderFunct;
|
|
HitboxCircleRenderingFunction hitboxCircleRenderFunct;
|
|
ShapeRenderingFunction renderingFunction;
|
|
Entity entity;
|
|
BufferedImage image;
|
|
|
|
|
|
public EditableCanvas() {
|
|
drawboxRectengleRenderFunct = new DrawboxRectengleRenderingFunction();
|
|
hitboxRectengleRenderFunct = new HitboxRectengleRenderingFunction();
|
|
hitboxCircleRenderFunct = new HitboxCircleRenderingFunction();
|
|
drawboxRectengleRenderFunct.subscribe(Project.getInstance()); // подписка: Project получит данные ввиде обьекта Event, содержащий данные drawbox при отрисовке последней точки из 4-х.
|
|
hitboxRectengleRenderFunct.subscribe(Project.getInstance());
|
|
hitboxCircleRenderFunct.subscribe(Project.getInstance());
|
|
addMouseListener(this);
|
|
addMouseMotionListener(this);
|
|
}
|
|
|
|
public HitboxRectengleRenderingFunction getHitboxRectengleRenderFunct() {
|
|
return hitboxRectengleRenderFunct;
|
|
}
|
|
|
|
public void drawing(Graphics2D g) {
|
|
if(renderingFunction!=null&&entity!=null) {
|
|
renderingFunction.drawing(g);
|
|
}
|
|
}
|
|
|
|
public void setDrawboxRectengleRenderingFunction() {
|
|
renderingFunction = drawboxRectengleRenderFunct;
|
|
}
|
|
public void setHitboxRectengleRenderingFunction() {
|
|
renderingFunction = hitboxRectengleRenderFunct;
|
|
}
|
|
public void setHitboxCircleRenderingFunction() {
|
|
renderingFunction = hitboxCircleRenderFunct;
|
|
}
|
|
|
|
@Override
|
|
public void mouseMoved(MouseEvent e) {
|
|
//System.out.println("moved");
|
|
if(renderingFunction!=null&&entity!=null) {
|
|
//System.out.println("x="+e.getX()+"y="+e.getY());
|
|
renderingFunction.mouseMoved(e);
|
|
repaint();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {
|
|
//System.out.println("mousePressed");
|
|
if(renderingFunction!=null&&entity!=null) {
|
|
renderingFunction.mousePressed(e);
|
|
repaint();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
protected void paintComponent(Graphics g) {
|
|
super.paintComponent(g);
|
|
if(image!=null) {
|
|
g.drawImage(image, 0, 0, this);
|
|
g.setColor(Color.darkGray);
|
|
g.drawRect(0, 0, image.getWidth(), image.getHeight());
|
|
g.setColor(Color.RED);
|
|
g.fillOval(image.getWidth()/2, image.getHeight(), 2, 2);
|
|
g.setColor(Color.green);
|
|
}
|
|
if(entity != null) {
|
|
drawing((Graphics2D)g);
|
|
}
|
|
}
|
|
|
|
public void setEntity(Entity e) {
|
|
entity = e;
|
|
drawboxRectengleRenderFunct.setEntityInDrawboxRectengle(e);
|
|
hitboxRectengleRenderFunct.setEntityInHitboxRectengle(e);
|
|
hitboxCircleRenderFunct.setEntityInHitboxCircle(e);
|
|
}
|
|
|
|
public void setImage(BufferedImage image) {
|
|
this.image = image;
|
|
}
|
|
|
|
@Override
|
|
public void mouseClicked(MouseEvent e) {}
|
|
@Override
|
|
public void mouseDragged(MouseEvent e) {}
|
|
@Override
|
|
public void mouseReleased(MouseEvent e) {}
|
|
@Override
|
|
public void mouseEntered(MouseEvent e) {}
|
|
@Override
|
|
public void mouseExited(MouseEvent e) {}
|
|
|
|
|
|
|
|
}
|