diff --git a/res/NewHueta.png b/res/NewHueta.png
new file mode 100644
index 0000000..10d8668
Binary files /dev/null and b/res/NewHueta.png differ
diff --git a/res/objecttypes.xml b/res/objecttypes.xml
index c06b117..5320b9e 100644
--- a/res/objecttypes.xml
+++ b/res/objecttypes.xml
@@ -2,12 +2,12 @@
-
+
-
+
@@ -22,7 +22,7 @@
-
-
+
+
diff --git a/src/gui/DrawboxEditor.java b/src/gui/DrawboxEditor.java
index 0530f74..bb2d46b 100644
--- a/src/gui/DrawboxEditor.java
+++ b/src/gui/DrawboxEditor.java
@@ -46,20 +46,4 @@ public class DrawboxEditor extends Editable {
logger.setLevel(Level.CONFIG);
}
-
-
- @Override
- public void mousePressed(MouseEvent e) {
-
-
- }
-
-
- @Override
- public void mouseMoved(MouseEvent e) {
-
- }
-
-
-
}
diff --git a/src/gui/Editable.java b/src/gui/Editable.java
index 2301368..639e2f6 100644
--- a/src/gui/Editable.java
+++ b/src/gui/Editable.java
@@ -22,7 +22,7 @@ import javax.swing.event.ListSelectionListener;
import model.Entity;
import repository.Project;
-public abstract class Editable extends JPanel implements MouseListener, MouseMotionListener, ListSelectionListener {
+public abstract class Editable extends JPanel implements ListSelectionListener {
protected ListGUI listGUI;
protected Entity entity;
@@ -65,22 +65,6 @@ public abstract class Editable extends JPanel implements MouseListener, MouseMot
}
-
- // из mouse motion listener'a
- @Override
- public void mouseDragged(MouseEvent e) {}
-
- // этих ребят нас обязывает создать MouseListener, так что они здесь
- @Override
- public void mouseClicked(MouseEvent e) {}
- @Override
- public void mousePressed(MouseEvent e) {}
- @Override
- public void mouseEntered(MouseEvent e) {}
- @Override
- public void mouseExited(MouseEvent e) {}
- @Override
- public void mouseReleased(MouseEvent e) {}
@Override
public void valueChanged(ListSelectionEvent e) {
diff --git a/src/gui/EditableCanvas.java b/src/gui/EditableCanvas.java
index 0178f66..c048703 100644
--- a/src/gui/EditableCanvas.java
+++ b/src/gui/EditableCanvas.java
@@ -31,12 +31,14 @@ public class EditableCanvas extends JPanel implements MouseListener, MouseMotion
hitboxRectengleRenderFunct = new HitboxRectengleRenderingFunction();
hitboxCircleRenderFunct = new HitboxCircleRenderingFunction();
drawboxRectengleRenderFunct.subscribe(Project.getInstance()); // подписка: Project получит данные ввиде обьекта Event, содержащий данные drawbox при отрисовке последней точки из 4-х.
- //hitboxPanel.subscribe(Project.getInstance());
+ hitboxRectengleRenderFunct.subscribe(Project.getInstance());
addMouseListener(this);
addMouseMotionListener(this);
}
-
+ public HitboxRectengleRenderingFunction getHitboxRectengleRenderFunct() {
+ return hitboxRectengleRenderFunct;
+ }
public void drawing(Graphics2D g) {
if(renderingFunction!=null&&entity!=null) {
@@ -58,20 +60,11 @@ public class EditableCanvas extends JPanel implements MouseListener, MouseMotion
public void mouseMoved(MouseEvent e) {
//System.out.println("moved");
if(renderingFunction!=null&&entity!=null) {
- System.out.println("x="+e.getX()+"y="+e.getY());
+ //System.out.println("x="+e.getX()+"y="+e.getY());
renderingFunction.mouseMoved(e);
repaint();
}
}
-
- @Override
- public void mouseClicked(MouseEvent e) {
- //System.out.println("Clicked");
- if(renderingFunction!=null&&entity!=null) {
- renderingFunction.mouseClicked(e);
- repaint();
- }
- }
@Override
public void mousePressed(MouseEvent e) {
@@ -94,15 +87,16 @@ public class EditableCanvas extends JPanel implements MouseListener, MouseMotion
public void setEntity(Entity e) {
entity = e;
- drawboxRectengleRenderFunct.setEntity(e);
+ drawboxRectengleRenderFunct.setEntityInDrawboxRectengle(e);
+ hitboxRectengleRenderFunct.setEntityInHtiboxRectengle(e);
}
public void setImage(BufferedImage image) {
this.image = image;
}
-
-
+ @Override
+ public void mouseClicked(MouseEvent e) {}
@Override
public void mouseDragged(MouseEvent e) {}
@Override
diff --git a/src/gui/HitboxEditor.java b/src/gui/HitboxEditor.java
index 88cf2fd..e6bfbb6 100644
--- a/src/gui/HitboxEditor.java
+++ b/src/gui/HitboxEditor.java
@@ -14,84 +14,35 @@ import events.EntityDrawboxChangedListener;
import events.EntityHitboxChangedEvent;
import events.EntityHitboxChangedListener;
import model.Hitbox;
+import model.HitboxRectangle;
import model.Point;
public class HitboxEditor extends Editable {
- Point firstIsoPoint = null;
- Point currentIsoPoint = new Point(0,0);
- Point firstCartesianPoint = new Point(0,0), currentCartesianPoint = new Point(0,0);
- private List listeners = new ArrayList<>();
+
HitboxEditor(ListGUI listGUI) {
super(listGUI);
- }
-
- //@Override
- //public void drawing(Graphics2D g) {
- /*Hitbox nowHitbox = entity.getHitbox();
- //if(firstIsoPoint != null) {
- int x1,y1,x2,y2;
- int size = nowHitbox.getListPointsIso().size();
- for(int i = 0; i < size;i++) {
- x1 = (int)nowHitbox.getListPointsIso().get(i % size).x;
- y1 = (int)nowHitbox.getListPointsIso().get(i % size).y;
- x2 = (int)nowHitbox.getListPointsIso().get((i+1) % size).x;
- y2 = (int)nowHitbox.getListPointsIso().get((i+1) % size).y;
- g.drawLine(x1, y1, x2, y2);
- }
- x1 = (int)nowHitbox.getListPointsIso().get(0).x;
- y1 = (int)nowHitbox.getListPointsIso().get(0).y;
- x2 = (int)nowHitbox.getListPointsIso().get(3).x;
- y2 = (int)nowHitbox.getListPointsIso().get(3).y;
- g.drawLine(x1, y1, x2, y2);
- //}
- */
- //}
-
-
- @Override
- public void mouseClicked(MouseEvent e) {
- if(firstIsoPoint == null) {
- firstIsoPoint = new Point(currentIsoPoint.x,currentIsoPoint.y);
- //System.out.println("firstPoint("+firstIsoPoint.x+";"+firstIsoPoint.y+");");
- firstCartesianPoint = Hitbox.isometricToCartesian(firstIsoPoint.x, firstIsoPoint.y,firstCartesianPoint);
- }else{
- /*
- * В данном месте при нажатии закрепляющей точки, необходимо вызывать функцию,
- * которая будет формировать из текущих декартовых координат:
- * 1. Точку старта и ширину с высотой.
- * 2. Так же необходимо реализовать слушатель сохранения новых хитбоксов в дерево.
- *
- * */
-
- repaint();
- }
- }
-
- @Override
- public void mouseMoved(MouseEvent e) {
- /*currentIsoPoint.x = e.getX();
- currentIsoPoint.y = e.getY();
- if(entity!=null) {
- Hitbox nowHitbox = entity.getHitbox();
- if(firstIsoPoint != null) {
- //System.out.println("firstPoint("+firstIsoPoint.x+";"+firstIsoPoint.y+");");
- currentCartesianPoint = Hitbox.isometricToCartesian(currentIsoPoint.x, currentIsoPoint.y, currentCartesianPoint);
- nowHitbox.getListPointsCartesian().get(0).setXY(firstCartesianPoint.x, firstCartesianPoint.y);
- nowHitbox.getListPointsCartesian().get(1).setXY(currentCartesianPoint.x, firstCartesianPoint.y);
- nowHitbox.getListPointsCartesian().get(2).setXY(currentCartesianPoint.x, currentCartesianPoint.y);
- nowHitbox.getListPointsCartesian().get(3).setXY(firstCartesianPoint.x, currentCartesianPoint.y);
- nowHitbox.convertCartesianPointsToIso();
- repaint();
+
+ canvas = new EditableCanvas();
+ add(canvas);
+ 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();
}
- }*/
- }
- public void subscribe(EntityHitboxChangedListener listener) {
- listeners.add(listener);
- }
-
- public void unsubscribe(EntityHitboxChangedListener listener) {
- listeners.remove(listener);
+ });
}
//НАДО ДОБАВИТЬ ЧТО БЫ ПОД КОНЕЦ РИСОВАНИЯ ХИТБОКСА ОНО ВЫЗЫВАЛО ФУНКЦИЮ И ВСЕ СОХРАНЯЛО.
@@ -99,29 +50,7 @@ public class HitboxEditor extends Editable {
//НО НЕ ДОБАВЛЕН ВЫЗОВ ФУНКЦИИ И НЕ ОФОРМЛЕНА ПОДПИСКА
//UPD: вроде подписку оформил в MainGUI;
- private void notifySubscribers() {
- for (EntityHitboxChangedListener listener : listeners) {
- listener.hitboxChanged(
- new EntityHitboxChangedEvent(entity.getHitbox(), entity)
- );
- }
- }
- //это старая очистка которая пока убрана. В будущем будет убрана вовсе, после рефакторинга.
- /*@Override
- public void actionPerformed(ActionEvent e) {
- JTabbedPane parent = (JTabbedPane) getParent();
- if(parent.getSelectedComponent() == this){
- if(entity != null) {
- firstIsoPoint = null;
- currentIsoPoint.setXY(0,0);
- repaint();
- }
- }
- }*/
- @Override
- public void valueChanged(ListSelectionEvent e) {
- // TODO Auto-generated method stub
- //super.valueChanged(e);
- }
+
+
}
diff --git a/src/gui/MainGUI.java b/src/gui/MainGUI.java
index aead57f..35712fa 100644
--- a/src/gui/MainGUI.java
+++ b/src/gui/MainGUI.java
@@ -57,11 +57,7 @@ public class MainGUI extends JFrame{
TopButtonBar.add(gridButtonBar);
TopButtonBar.setBorder(BorderFactory.createLoweredBevelBorder());
add(TopButtonBar,BorderLayout.NORTH);
-
- //clearLinesJButton.addActionListener(drawBoxPanel); - ранее регистрировались слушатели для кнопки очистки.
- //clearLinesJButton.addActionListener(hitboxPanel);
-
-
+
editorPane = new JTabbedPane();
editorPane.setVisible(true);
add(editorPane,BorderLayout.CENTER);
diff --git a/src/gui/render/DrawboxRectengleRenderingFunction.java b/src/gui/render/DrawboxRectengleRenderingFunction.java
index bbeec4c..cd06535 100644
--- a/src/gui/render/DrawboxRectengleRenderingFunction.java
+++ b/src/gui/render/DrawboxRectengleRenderingFunction.java
@@ -84,11 +84,6 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction
}
}
- @Override
- public void mouseClicked(MouseEvent e) {
- // TODO Auto-generated method stub
-
- }
@Override
public void mouseMoved(MouseEvent e) {
@@ -147,7 +142,7 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction
entity.setDrawbox(new Drawbox(drawboxPoints));
}
- public void setEntity(Entity e) {
+ public void setEntityInDrawboxRectengle(Entity e) {
entity = e;
}
diff --git a/src/gui/render/HitboxCircleRenderingFunction.java b/src/gui/render/HitboxCircleRenderingFunction.java
index 22822ae..6a6ef84 100644
--- a/src/gui/render/HitboxCircleRenderingFunction.java
+++ b/src/gui/render/HitboxCircleRenderingFunction.java
@@ -17,12 +17,6 @@ public class HitboxCircleRenderingFunction implements ShapeRenderingFunction {
}
- @Override
- public void mouseClicked(MouseEvent e) {
- // TODO Auto-generated method stub
-
- }
-
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
diff --git a/src/gui/render/HitboxRectengleRenderingFunction.java b/src/gui/render/HitboxRectengleRenderingFunction.java
index b783157..bc2ee31 100644
--- a/src/gui/render/HitboxRectengleRenderingFunction.java
+++ b/src/gui/render/HitboxRectengleRenderingFunction.java
@@ -2,31 +2,154 @@ package gui.render;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
+import java.time.LocalTime;
+import java.util.ArrayList;
+import java.util.List;
+
+import events.EntityHitboxChangedEvent;
+import events.EntityHitboxChangedListener;
+import model.Entity;
+import model.Hitbox;
+import model.HitboxRectangle;
+import model.Point;
public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction {
+ Point firstIsoPoint = null;
+ Point currentIsoPoint = new Point(0,0);
+ Point firstCartesianPoint = new Point(0,0), currentCartesianPoint = new Point(0,0);
+ private List listeners = new ArrayList<>();
+ Entity entity;
+ private List LocalListPointsIso = new ArrayList();
+ private List LocalListPointsCartesian = new ArrayList();
+
+
+ public List getLocalListPointsIso() {
+ return LocalListPointsIso;
+ }
+
+ public List getLocalListPointsCartesian() {
+ return LocalListPointsCartesian;
+ }
+
+ public void setFirstIsoPointIsNull(){
+ firstIsoPoint = null;
+ }
+
@Override
public void drawing(Graphics2D g) {
- // TODO Auto-generated method stub
+ HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox();
+ int x1,y1,x2,y2;
+ if(nowHitbox.getListPointsIso().size() == 4) {
+ drawingLinesFromListPoints(nowHitbox.getListPointsIso(),g);
+ }
+ if(firstIsoPoint!=null&&nowHitbox.getListPointsIso().size() == 0) {
+ drawingLinesFromListPoints(LocalListPointsIso,g);
+ }
}
+
+ public void drawingLinesFromListPoints(List listPointsIso, Graphics2D g) {
+ int x1,y1,x2,y2;
+ int size = listPointsIso.size();
+ for(int i = 0; i < size;i++) {
+ x1 = (int)listPointsIso.get(i % size).x;
+ y1 = (int)listPointsIso.get(i % size).y;
+ x2 = (int)listPointsIso.get((i+1) % size).x;
+ y2 = (int)listPointsIso.get((i+1) % size).y;
+ g.drawLine(x1, y1, x2, y2);
+ }
+ x1 = (int)listPointsIso.get(0).x;
+ y1 = (int)listPointsIso.get(0).y;
+ x2 = (int)listPointsIso.get(3).x;
+ y2 = (int)listPointsIso.get(3).y;
+ g.drawLine(x1, y1, x2, y2);
+ }
@Override
public void mousePressed(MouseEvent e) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void mouseClicked(MouseEvent e) {
- // TODO Auto-generated method stub
-
+ //System.out.println("mousePressed");
+ //System.out.println("mouseClicked");
+ HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox();
+ if(nowHitbox.getListPointsIso().size() == 0 && firstIsoPoint == null) {
+ initListsPoints();
+ firstIsoPoint = new Point(currentIsoPoint.x,currentIsoPoint.y);
+ LocalListPointsIso.get(0).setXY(firstIsoPoint.x, firstIsoPoint.y);
+ firstCartesianPoint = Hitbox.isometricToCartesian(firstIsoPoint.x, firstIsoPoint.y,firstCartesianPoint);
+ LocalListPointsCartesian.get(0).setXY(firstCartesianPoint.x, firstCartesianPoint.y);
+ System.out.println("mouseClicked Event 1 TIME: "+LocalTime.now());
+ }else if(nowHitbox.getListPointsIso().size() == 0 && firstIsoPoint != null) {
+ nowHitbox.getListPointsIso().addAll(LocalListPointsIso);
+ nowHitbox.getListPointsCartesian().addAll(LocalListPointsCartesian);
+ System.out.println("mouseClicked Event 2 TIME: "+LocalTime.now());
+
+ /*
+ * В данном месте при нажатии закрепляющей точки, необходимо вызывать функцию,
+ * которая будет формировать из текущих декартовых координат:
+ * 1. Точку старта и ширину с высотой.
+ * 2. Так же необходимо реализовать слушатель сохранения новых хитбоксов в дерево.
+ *
+ * */
+ notifySubscribers();
+ }
}
@Override
public void mouseMoved(MouseEvent e) {
- // TODO Auto-generated method stub
-
+ currentIsoPoint.x = e.getX();
+ currentIsoPoint.y = e.getY();
+ HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox();
+ if(entity!=null) {
+ if(firstIsoPoint != null && nowHitbox.getListPointsIso().size() == 0) {
+ //System.out.println("firstPoint("+firstIsoPoint.x+";"+firstIsoPoint.y+");");
+ currentCartesianPoint = Hitbox.isometricToCartesian(currentIsoPoint.x, currentIsoPoint.y, currentCartesianPoint);
+ LocalListPointsCartesian.get(0).setXY(firstCartesianPoint.x, firstCartesianPoint.y);
+ LocalListPointsCartesian.get(1).setXY(currentCartesianPoint.x, firstCartesianPoint.y);
+ LocalListPointsCartesian.get(2).setXY(currentCartesianPoint.x, currentCartesianPoint.y);
+ LocalListPointsCartesian.get(3).setXY(firstCartesianPoint.x, currentCartesianPoint.y);
+ convertCartesianPointsToIso();
+ }
+ }
}
+ public void setEntityInHtiboxRectengle(Entity e) {
+ entity = e;
+ }
+
+ public void subscribe(EntityHitboxChangedListener listener) {
+ listeners.add(listener);
+ }
+
+ public void unsubscribe(EntityHitboxChangedListener listener) {
+ listeners.remove(listener);
+ }
+
+ private void notifySubscribers() {
+ for (EntityHitboxChangedListener listener : listeners) {
+ listener.hitboxChanged(
+ new EntityHitboxChangedEvent(entity.getHitbox(), entity)
+ );
+ }
+ }
+
+ public void initListsPoints() {
+ if(LocalListPointsIso.size()<1) {
+ for(int i=0;i<4;i++) {
+ LocalListPointsIso.add(new Point(currentIsoPoint.x,currentIsoPoint.y));
+ }
+ }
+ if(LocalListPointsCartesian.size()<1) {
+ for(int i=0;i<4;i++) {
+ LocalListPointsCartesian.add(new Point(0,0));
+ }
+ }
+ }
+ public void convertCartesianPointsToIso() {
+ Point cartesianPoint;
+ for (int i = 0 ; i<4;i++) {
+ cartesianPoint = LocalListPointsCartesian.get(i);
+ Hitbox.cartesianToIsometric(cartesianPoint.x,cartesianPoint.y,LocalListPointsIso.get(i));
+ }
+ }
+
}
diff --git a/src/gui/render/ShapeRenderingFunction.java b/src/gui/render/ShapeRenderingFunction.java
index 279831c..0bd67d8 100644
--- a/src/gui/render/ShapeRenderingFunction.java
+++ b/src/gui/render/ShapeRenderingFunction.java
@@ -6,7 +6,6 @@ import java.awt.event.MouseEvent;
public interface ShapeRenderingFunction {
void drawing(Graphics2D g);
public void mousePressed(MouseEvent e);
- public void mouseClicked(MouseEvent e);
public void mouseMoved(MouseEvent e);
//private void notifySubscribers() ?? надо ли? подумать
}
diff --git a/src/model/Hitbox.java b/src/model/Hitbox.java
index 3d77ddf..246cb49 100644
--- a/src/model/Hitbox.java
+++ b/src/model/Hitbox.java
@@ -61,7 +61,7 @@ public abstract class Hitbox {
public String getShape() {
return shape;
}
-
+ public void calculationReferencePoint() {}
//not the same as toString()! the latter is for XML while printToConsole() is for console
public void printToConsole() {
diff --git a/src/model/HitboxRectangle.java b/src/model/HitboxRectangle.java
index a29b3c1..bacd798 100644
--- a/src/model/HitboxRectangle.java
+++ b/src/model/HitboxRectangle.java
@@ -11,7 +11,6 @@ public class HitboxRectangle extends Hitbox {
public HitboxRectangle(String shape, Entity owner){
super(shape);
setOwnerEntity(owner);
- initListsPoints();
}
public HitboxRectangle(String shape,List listPointsIso,List listPointsCartesian){
super(shape);
@@ -32,7 +31,7 @@ public class HitboxRectangle extends Hitbox {
printToConsole();
}
- private void initListsPoints() {
+ public void initListsPoints() {
if(listPointsIso.size()<1) {
for(int i=0;i<4;i++) {
listPointsIso.add(new Point(0,0));
@@ -89,6 +88,19 @@ public class HitboxRectangle extends Hitbox {
}
@Override
public String listPointsToString() {
- return "Rectangle "+referencePoint.x+" "+referencePoint.y+" "+widthHitbox+" "+heightHitbox;
+ System.out.println("Данные");
+ parseCartesianListPointsToWidthHeight();
+ calculationReferencePoint();
+ return "Rectangle "+(int)referencePoint.x+" "+(int)referencePoint.y+" "+(int)widthHitbox+" "+(int)heightHitbox;
+ }
+
+ public void parseCartesianListPointsToWidthHeight() {
+ widthHitbox = Math.abs(listPointsCartesian.get(0).x-listPointsCartesian.get(1).x);
+ heightHitbox = Math.abs(listPointsCartesian.get(1).y-listPointsCartesian.get(2).y);
+ }
+ @Override
+ public void calculationReferencePoint() {
+ referencePoint.x = listPointsIso.get(1).x-owner.getImage().getWidth()/2;
+ referencePoint.y = listPointsIso.get(1).y-owner.getImage().getHeight();
}
}