diff --git a/res/circle.png b/res/circle.png index a95bb3c..80dadcb 100644 Binary files a/res/circle.png and b/res/circle.png differ diff --git a/res/destroy.png b/res/destroy.png index 547ac60..849c81b 100644 Binary files a/res/destroy.png and b/res/destroy.png differ diff --git a/res/destroy1.png b/res/destroy1.png new file mode 100644 index 0000000..547ac60 Binary files /dev/null and b/res/destroy1.png differ diff --git a/res/iloveimg-resized.zip b/res/iloveimg-resized.zip new file mode 100644 index 0000000..7b6078f Binary files /dev/null and b/res/iloveimg-resized.zip differ diff --git a/res/objecttypes.xml b/res/objecttypes.xml index 2c13548..a7de25d 100644 --- a/res/objecttypes.xml +++ b/res/objecttypes.xml @@ -23,6 +23,6 @@ - + diff --git a/res/square.png b/res/square.png index 5ef41e8..12ffc42 100644 Binary files a/res/square.png and b/res/square.png differ diff --git a/res/square1.png b/res/square1.png new file mode 100644 index 0000000..a700d09 Binary files /dev/null and b/res/square1.png differ diff --git a/src/gui/DrawboxEditor.java b/src/gui/DrawboxEditor.java index bb2d46b..15291c8 100644 --- a/src/gui/DrawboxEditor.java +++ b/src/gui/DrawboxEditor.java @@ -35,14 +35,6 @@ public class DrawboxEditor extends Editable { canvas.setDrawboxRectengleRenderingFunction(); canvas.setVisible(true); - clearLinesJButton.addActionListener((e)->{ - if(entity != null) { - entity.getDrawbox().getDrawboxlistPoints().clear(); - entity.getDrawbox().getbaseListPoints().clear(); - canvas.repaint(); - }}); - - logger.setLevel(Level.CONFIG); } diff --git a/src/gui/Editable.java b/src/gui/Editable.java index 639e2f6..9e313dd 100644 --- a/src/gui/Editable.java +++ b/src/gui/Editable.java @@ -40,12 +40,15 @@ public abstract class Editable extends JPanel implements ListSelectionListener { setLayout(new BorderLayout()); clearLinesJButton = createButton("Clear lines",null,"res/destroy.png"); - + clearLinesJButton.addActionListener((e)->{ + canvas.renderingFunction.functionClearJButton(); + canvas.repaint(); + }); toolbar.setBorder(BorderFactory.createLoweredBevelBorder()); toolbar.addSeparator(); toolbar.add(clearLinesJButton); this.add(toolbar,BorderLayout.EAST); - + toolbar.setPreferredSize(new Dimension(40,40)); // РАСКОММЕНТИТЬ ЕСЛИ НУЖНО ВЫВОДИТЬ ПОДРОБНЫЕ ЛОГИ logger.setLevel(Level.ALL); } @@ -92,12 +95,12 @@ public abstract class Editable extends JPanel implements ListSelectionListener { } } - private JButton createButton(String text,ActionListener listener,String pathImage) { + JButton createButton(String text,ActionListener listener,String pathImage) { JButton button = new JButton(new ImageIcon(pathImage)); button.addActionListener(listener); button.setContentAreaFilled(false); button.setFocusPainted(false); - button.setPreferredSize(new Dimension(38, 38)); + button.setPreferredSize(new Dimension(20, 20)); return button; } diff --git a/src/gui/EditableCanvas.java b/src/gui/EditableCanvas.java index c048703..9e3c325 100644 --- a/src/gui/EditableCanvas.java +++ b/src/gui/EditableCanvas.java @@ -88,7 +88,8 @@ public class EditableCanvas extends JPanel implements MouseListener, MouseMotion public void setEntity(Entity e) { entity = e; drawboxRectengleRenderFunct.setEntityInDrawboxRectengle(e); - hitboxRectengleRenderFunct.setEntityInHtiboxRectengle(e); + hitboxRectengleRenderFunct.setEntityInHitboxRectengle(e); + hitboxCircleRenderFunct.setEntityInHitboxCircle(e); } public void setImage(BufferedImage image) { diff --git a/src/gui/HitboxEditor.java b/src/gui/HitboxEditor.java index e6bfbb6..f1f1aeb 100644 --- a/src/gui/HitboxEditor.java +++ b/src/gui/HitboxEditor.java @@ -6,6 +6,8 @@ import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; +import javax.swing.JButton; +import javax.swing.JList; import javax.swing.JTabbedPane; import javax.swing.event.ListSelectionEvent; @@ -16,10 +18,15 @@ import events.EntityHitboxChangedListener; import model.Hitbox; import model.HitboxRectangle; import model.Point; +import repository.Project; public class HitboxEditor extends Editable { + JButton changeInRectangleHitboxJButton; + JButton changeInCircleHitboxJButton; + + HitboxEditor(ListGUI listGUI) { super(listGUI); @@ -28,29 +35,58 @@ public class HitboxEditor extends Editable { canvas.setHitboxRectengleRenderingFunction(); canvas.setVisible(true); - clearLinesJButton.addActionListener((e)->{ - if(entity != null) { - HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox(); - System.out.println("1. nowHitbox.getListPointsIso().size() = "+ nowHitbox.getListPointsIso().size()); - nowHitbox.getListPointsIso().clear(); - System.out.println("2. nowHitbox.getListPointsIso().size() = "+ nowHitbox.getListPointsIso().size()); - System.out.println("1. nowHitbox.getListPointsCartesian().size() = "+ nowHitbox.getListPointsCartesian().size() ); - nowHitbox.getListPointsCartesian().clear(); - System.out.println("2. nowHitbox.getListPointsCartesian().size() = "+ nowHitbox.getListPointsCartesian().size()); - canvas.getHitboxRectengleRenderFunct().getLocalListPointsCartesian().clear(); - canvas.getHitboxRectengleRenderFunct().getLocalListPointsIso().clear(); - canvas.getHitboxRectengleRenderFunct().setFirstIsoPointIsNull(); - canvas.repaint(); - } + changeInRectangleHitboxJButton = super.createButton("Hitbox Rectangle",null,"res/square.png"); + changeInCircleHitboxJButton = super.createButton("Hitbox circle",null,"res/circle.png"); + toolbar.add(changeInRectangleHitboxJButton); + toolbar.add(changeInCircleHitboxJButton); + + changeInRectangleHitboxJButton.addActionListener((e)->{ + functionClearHitboxJButton(); + //canvas.setHitboxRectengleRenderingFunction(); + //Сделать создание нового Hitbox формы Rectengle }); + changeInCircleHitboxJButton.addActionListener((e)->{ + functionClearHitboxJButton(); + //canvas.setHitboxCircleRenderingFunction(); + //Сделать создание нового Hitbox формы Circle + }); + + } + public void functionClearHitboxJButton() { + if(entity != null) { + canvas.renderingFunction.functionClearJButton(); + canvas.repaint(); + } } - //НАДО ДОБАВИТЬ ЧТО БЫ ПОД КОНЕЦ РИСОВАНИЯ ХИТБОКСА ОНО ВЫЗЫВАЛО ФУНКЦИЮ И ВСЕ СОХРАНЯЛО. //СОХРАНЕНИЕ УЖЕ РЕАЛИЗОВАНО. //НО НЕ ДОБАВЛЕН ВЫЗОВ ФУНКЦИИ И НЕ ОФОРМЛЕНА ПОДПИСКА //UPD: вроде подписку оформил в MainGUI; - - + @Override + public void valueChanged(ListSelectionEvent e) { + if(e.getSource() instanceof JList) { + //TODO: надо бы элегантнее пробросить сюда ListGUI - просто передача его в аргументах немножко громоздкая + // как-то обыграть это через события? + // ps. попытки обратиться к eventSource проваливаются - ListGUI это панель, уже внутри которой лежит JList + selectedEntityName = listGUI.getSelectedName(); + try { + entity = Project.getInstance().getEntityByName(selectedEntityName); + } catch (Exception e1) { + //logger.severe("Entity with name '"+selectedEntityName+"' was not found! Cannot display it on panel!"); + } + image = Project.getInstance().loadImageByName(selectedEntityName); + //TODO: if(image == null) вызов FileChooser'a и выбор изображения + canvas.setEntity(entity); + canvas.setImage(image); + if(entity.getHitbox().getShape().equals("Rectangle")) { + canvas.setHitboxRectengleRenderingFunction(); + } + if(entity.getHitbox().getShape().equals("Circle")) { + canvas.setHitboxCircleRenderingFunction(); + } + canvas.repaint(); + } + } } diff --git a/src/gui/render/DrawboxRectengleRenderingFunction.java b/src/gui/render/DrawboxRectengleRenderingFunction.java index cd06535..937d1d4 100644 --- a/src/gui/render/DrawboxRectengleRenderingFunction.java +++ b/src/gui/render/DrawboxRectengleRenderingFunction.java @@ -12,6 +12,7 @@ import events.EntityDrawboxChangedEvent; import events.EntityDrawboxChangedListener; import model.Drawbox; import model.Entity; +import model.HitboxRectangle; import model.Point; public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction { @@ -145,5 +146,10 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction public void setEntityInDrawboxRectengle(Entity e) { entity = e; } - + public void functionClearJButton() { + if(entity != null) { + entity.getDrawbox().getDrawboxlistPoints().clear(); + entity.getDrawbox().getbaseListPoints().clear(); + } + } } diff --git a/src/gui/render/HitboxCircleRenderingFunction.java b/src/gui/render/HitboxCircleRenderingFunction.java index 6a6ef84..31e3a4b 100644 --- a/src/gui/render/HitboxCircleRenderingFunction.java +++ b/src/gui/render/HitboxCircleRenderingFunction.java @@ -3,24 +3,62 @@ package gui.render; import java.awt.Graphics2D; import java.awt.event.MouseEvent; -public class HitboxCircleRenderingFunction implements ShapeRenderingFunction { +import model.Entity; +import model.HitboxCircle; +import model.Point; +public class HitboxCircleRenderingFunction implements ShapeRenderingFunction { + Point firstIsoPoint = null; + Point currentIsoPoint = new Point(0,0); + int currentRadius=0; + Entity entity; + + public void setEntityInHitboxCircle(Entity e) { + entity = e; + } + @Override public void drawing(Graphics2D g) { - // TODO Auto-generated method stub + HitboxCircle nowHitbox = (HitboxCircle)entity.getHitbox(); + if(nowHitbox.getRadius()!=0) { + g.drawOval((int)nowHitbox.getCurrentRefPoint().x, (int)nowHitbox.getCurrentRefPoint().y, (int)nowHitbox.getRadius()*2, (int)nowHitbox.getRadius()); + }else if(firstIsoPoint != null) { + currentRadius = Math.abs((int)firstIsoPoint.x-(int)currentIsoPoint.x); + g.drawOval((int)firstIsoPoint.x, (int)firstIsoPoint.y, currentRadius, currentRadius/2); + } } @Override public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub + HitboxCircle nowHitbox = (HitboxCircle)entity.getHitbox(); + if(nowHitbox.getRadius()==0 && firstIsoPoint == null) { + firstIsoPoint = new Point(e.getX(), e.getY()); + }else if(nowHitbox.getRadius()==0 && firstIsoPoint != null) { + // высчитываем в параметры хитбокссеркла нужный радиус и текущую реф поинт. + // Не забываем высчитать реф поинт хитбокса относительно текущей. + // после чего вызываем listPointsToString и нотифай, который отправляет данные на сохранение + } } @Override public void mouseMoved(MouseEvent e) { - // TODO Auto-generated method stub - + currentIsoPoint.x = e.getX(); + currentIsoPoint.y = e.getY(); } + public void functionClearHitboxJButton() { + HitboxCircle nowHitbox = (HitboxCircle)entity.getHitbox(); + + } + + @Override + public void functionClearJButton() { + firstIsoPoint = null; + currentIsoPoint = new Point(0,0); + currentRadius = 0; + HitboxCircle nowhitbox = (HitboxCircle)entity.getHitbox(); + nowhitbox.setRadius(0); + } } diff --git a/src/gui/render/HitboxRectengleRenderingFunction.java b/src/gui/render/HitboxRectengleRenderingFunction.java index bc2ee31..bedda44 100644 --- a/src/gui/render/HitboxRectengleRenderingFunction.java +++ b/src/gui/render/HitboxRectengleRenderingFunction.java @@ -32,7 +32,7 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction return LocalListPointsCartesian; } - public void setFirstIsoPointIsNull(){ + private void setFirstIsoPointIsNull(){ firstIsoPoint = null; } @@ -112,7 +112,7 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction } } - public void setEntityInHtiboxRectengle(Entity e) { + public void setEntityInHitboxRectengle(Entity e) { entity = e; } @@ -151,5 +151,15 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction Hitbox.cartesianToIsometric(cartesianPoint.x,cartesianPoint.y,LocalListPointsIso.get(i)); } } + + @Override + public void functionClearJButton() { + HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox(); + nowHitbox.getListPointsIso().clear(); + nowHitbox.getListPointsCartesian().clear(); + LocalListPointsCartesian.clear(); + LocalListPointsIso.clear(); + setFirstIsoPointIsNull(); + } } diff --git a/src/gui/render/ShapeRenderingFunction.java b/src/gui/render/ShapeRenderingFunction.java index 0bd67d8..5604c87 100644 --- a/src/gui/render/ShapeRenderingFunction.java +++ b/src/gui/render/ShapeRenderingFunction.java @@ -7,5 +7,6 @@ public interface ShapeRenderingFunction { void drawing(Graphics2D g); public void mousePressed(MouseEvent e); public void mouseMoved(MouseEvent e); + public void functionClearJButton(); //private void notifySubscribers() ?? надо ли? подумать } diff --git a/src/model/HitboxCircle.java b/src/model/HitboxCircle.java index 896e6b4..2b2e1ce 100644 --- a/src/model/HitboxCircle.java +++ b/src/model/HitboxCircle.java @@ -2,7 +2,7 @@ package model; public class HitboxCircle extends Hitbox { private float radiusHitbox; - + private Point currentRefPoint= new Point(0,0); public HitboxCircle(String[] dataHitbox, Entity owner){ super(dataHitbox[0]); setOwnerEntity(owner); @@ -16,6 +16,8 @@ public class HitboxCircle extends Hitbox { private void parseStringToCircleHitbox(String[] informations) { referencePoint.x = Float.parseFloat(informations[1]); referencePoint.y = Float.parseFloat(informations[2]); + currentRefPoint.x = owner.getImage().getWidth()/2+referencePoint.x; + currentRefPoint.y = owner.getImage().getHeight()+referencePoint.y; radiusHitbox = Float.parseFloat(informations[3]); } @Override @@ -23,4 +25,16 @@ public class HitboxCircle extends Hitbox { return "Circle"+referencePoint.x+referencePoint.x+" "+referencePoint.y+" "+radiusHitbox; } + public float getRadius() { + return radiusHitbox; + } + public void setRadius(int radius) { + radiusHitbox = radius; + } + public Point getCurrentRefPoint() { + return currentRefPoint; + } + + + }