diff --git a/res/objecttypes.xml b/res/objecttypes.xml index c0f0b38..5466faf 100644 --- a/res/objecttypes.xml +++ b/res/objecttypes.xml @@ -2,27 +2,27 @@ - - + + - - + + - - + + - - + + - - + + diff --git a/src/gui/EditableCanvas.java b/src/gui/EditableCanvas.java index 5f2dcde..23cb690 100644 --- a/src/gui/EditableCanvas.java +++ b/src/gui/EditableCanvas.java @@ -16,6 +16,7 @@ import gui.render.HitboxCircleRenderingFunction; import gui.render.HitboxRectengleRenderingFunction; import gui.render.ShapeRenderingFunction; import model.Entity; +import model.Point; import repository.Project; public class EditableCanvas extends JPanel implements MouseListener, MouseMotionListener { @@ -27,7 +28,7 @@ public class EditableCanvas extends JPanel implements MouseListener, MouseMotion Entity entity; BufferedImage image; private float scaleIndex = 1; - + Point centeringImage = new Point(0,0); public EditableCanvas() { drawboxRectengleRenderFunct = new DrawboxRectengleRenderingFunction(); @@ -85,15 +86,33 @@ public class EditableCanvas extends JPanel implements MouseListener, MouseMotion super.paintComponent(g); if(image!=null) { calculatedScaledIndex(); - g.drawImage(image, 0, 0, (int) (image.getWidth() * scaleIndex), + calculatedCenteringImagePoint(); + g.drawImage(image, (int)centeringImage.x, (int)centeringImage.y, (int) (image.getWidth() * scaleIndex), (int) (image.getHeight() * scaleIndex), this); - g.setColor(Color.green); + g.setColor(Color.MAGENTA); + g.drawRect((int)centeringImage.x, (int)centeringImage.y,(int) (image.getWidth() * scaleIndex)-1, + (int) (image.getHeight() * scaleIndex)-1); + g.setColor(Color.green); } if(entity != null) { drawing((Graphics2D)g); } } - //нерабочая херня + + public void calculatedCenteringImagePoint() { + centeringImage.x = (this.getWidth() - image.getWidth() * scaleIndex)/2; + centeringImage.y = (this.getHeight() - image.getHeight() * scaleIndex)/2; + System.out.println("---------------------"); + System.out.println("this.getWidth()= "+this.getWidth()); + System.out.println("this.getHeight() = "+this.getHeight()); + System.out.println("image.x = "+image.getWidth() * scaleIndex); + System.out.println("image.y = "+image.getHeight() * scaleIndex); + System.out.println("centeringImage.x = "+centeringImage.x); + System.out.println("centeringImage.y = "+centeringImage.y); + drawboxRectengleRenderFunct.setCenteringImagePoint(centeringImage); + hitboxRectengleRenderFunct.setCenteringImagePoint(centeringImage); + hitboxCircleRenderFunct.setCenteringImagePoint(centeringImage); + } public void calculatedScaledIndex() { int imageWidth = image.getWidth(), imageHeight = image.getHeight(); float iconMaxWidth = this.getWidth(); @@ -101,15 +120,15 @@ public class EditableCanvas extends JPanel implements MouseListener, MouseMotion float scaleFactorX = iconMaxWidth / imageWidth, scaleFactorY = iconMaxHeight / imageHeight; scaleIndex = scaleFactorX < scaleFactorY ? scaleFactorX : scaleFactorY; entity.setScaleIndex(scaleIndex); - System.out.println("imageWidth: "+imageWidth); - System.out.println("imageHeight: "+imageHeight); - System.out.println("iconMaxWidth: "+iconMaxWidth); - System.out.println("iconMaxHeight: "+iconMaxHeight); - - System.out.println("scaleFactorX: "+scaleFactorX); - System.out.println("scaleFactorY: "+scaleFactorY); - System.out.println("scaleIndex: "+scaleIndex); - System.out.println("_____________________: "); +// System.out.println("imageWidth: "+imageWidth); +// System.out.println("imageHeight: "+imageHeight); +// System.out.println("iconMaxWidth: "+iconMaxWidth); +// System.out.println("iconMaxHeight: "+iconMaxHeight); +// +// System.out.println("scaleFactorX: "+scaleFactorX); +// System.out.println("scaleFactorY: "+scaleFactorY); +// System.out.println("scaleIndex: "+scaleIndex); +// System.out.println("_____________________: "); } public void setEntity(Entity e) { diff --git a/src/gui/render/DrawboxRectengleRenderingFunction.java b/src/gui/render/DrawboxRectengleRenderingFunction.java index 82bc45b..a52eaba 100644 --- a/src/gui/render/DrawboxRectengleRenderingFunction.java +++ b/src/gui/render/DrawboxRectengleRenderingFunction.java @@ -23,11 +23,13 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction Entity entity; Logger logger = Logger.getLogger("gui.DrawboxRectangleEditor"); private float scaleIndex = 1; - + Point centeringImage; public DrawboxRectengleRenderingFunction() { } + + @Override public void drawing(Graphics2D g) { scaleIndex = entity.getScaleIndex(); @@ -42,13 +44,13 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction if(drawboxPoints.size() >= 1 && drawboxPoints.size() < 4) { Point lastPoint = drawboxPoints.get(drawboxPoints.size()-1); - g.drawLine((int)(lastPoint.x*scaleIndex), (int)(lastPoint.y*scaleIndex), (int)(currentPoint.x*scaleIndex), (int)(currentPoint.y*scaleIndex)); + g.drawLine((int)(lastPoint.x*scaleIndex+centeringImage.x), (int)(lastPoint.y*scaleIndex+centeringImage.y), (int)(currentPoint.x*scaleIndex+centeringImage.x), (int)(currentPoint.y*scaleIndex+centeringImage.y)); for(int i = 0; i < drawboxPoints.size()-1;i++) { int x1 = (int)drawboxPoints.get(i).x; int y1 = (int)drawboxPoints.get(i).y; int x2 = (int)drawboxPoints.get(i+1).x; int y2 = (int)drawboxPoints.get(i+1).y; - g.drawLine((int)(x1*scaleIndex), (int)(y1*scaleIndex), (int)(x2*scaleIndex), (int)(y2*scaleIndex)); + g.drawLine((int)(x1*scaleIndex+centeringImage.x), (int)(y1*scaleIndex+centeringImage.y), (int)(x2*scaleIndex+centeringImage.x), (int)(y2*scaleIndex+centeringImage.y)); } } else { for(int i = 0; i < drawboxPoints.size();i++) { @@ -56,7 +58,7 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction int y1 = (int)drawboxPoints.get(i % drawboxPoints.size()).y; int x2 = (int)drawboxPoints.get((i+1) % drawboxPoints.size()).x; int y2 = (int)drawboxPoints.get((i+1) % drawboxPoints.size()).y; - g.drawLine((int)(x1*scaleIndex), (int)(y1*scaleIndex), (int)(x2*scaleIndex), (int)(y2*scaleIndex)); + g.drawLine((int)(x1*scaleIndex+centeringImage.x), (int)(y1*scaleIndex+centeringImage.y), (int)(x2*scaleIndex+centeringImage.x), (int)(y2*scaleIndex+centeringImage.y)); } // ОТРИСОВКА ОСНОВАНИЯ g.setColor(Color.BLUE); @@ -65,7 +67,7 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction int y1 = (int)basePoints.get(i).y; int x2 = (int)basePoints.get(i+1).x; int y2 = (int)basePoints.get(i+1).y; - g.drawLine((int)(x1*scaleIndex), (int)(y1*scaleIndex), (int)(x2*scaleIndex), (int)(y2*scaleIndex)); + g.drawLine((int)(x1*scaleIndex+centeringImage.x), (int)(y1*scaleIndex+centeringImage.y), (int)(x2*scaleIndex+centeringImage.x), (int)(y2*scaleIndex+centeringImage.y)); } } @@ -91,8 +93,8 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction @Override public void mouseMoved(MouseEvent e) { - currentPoint.x = e.getX()/scaleIndex; - currentPoint.y = e.getY()/scaleIndex; + currentPoint.x = (e.getX()-centeringImage.x)/scaleIndex; + currentPoint.y = (e.getY()-centeringImage.y)/scaleIndex; } /*Точки должны идти в определенном порядке: @@ -149,6 +151,11 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction public void setEntityInDrawboxRectengle(Entity e) { entity = e; } + + public void setCenteringImagePoint(Point p) { + centeringImage = p; + } + public void functionClearJButton() { if(entity != null) { entity.getDrawbox().getDrawboxlistPoints().clear(); diff --git a/src/gui/render/HitboxCircleRenderingFunction.java b/src/gui/render/HitboxCircleRenderingFunction.java index a95dc72..e4b0cc4 100644 --- a/src/gui/render/HitboxCircleRenderingFunction.java +++ b/src/gui/render/HitboxCircleRenderingFunction.java @@ -17,18 +17,23 @@ public class HitboxCircleRenderingFunction implements ShapeRenderingFunction { int currentDiametrX=0; Entity entity; private float scaleIndex = 1; + Point centeringImage; private List listeners = new ArrayList<>(); public void setEntityInHitboxCircle(Entity e) { entity = e; } + public void setCenteringImagePoint(Point p) { + centeringImage = p; + } + @Override public void drawing(Graphics2D g) { scaleIndex = entity.getScaleIndex(); HitboxCircle nowHitbox = (HitboxCircle)entity.getHitbox(); if(nowHitbox.getRadius()!=0) { - g.drawOval((int)(nowHitbox.getCurrentRefPoint().x*scaleIndex), (int)((nowHitbox.getCurrentRefPoint().y-(nowHitbox.getDiametrY()/2))*scaleIndex ), (int)(nowHitbox.getDiametrX()*scaleIndex ), (int)(nowHitbox.getDiametrY()*scaleIndex )); + g.drawOval((int)(nowHitbox.getCurrentRefPoint().x*scaleIndex+centeringImage.x), (int)((nowHitbox.getCurrentRefPoint().y-nowHitbox.getDiametrY()/2)*scaleIndex+centeringImage.y ), (int)(nowHitbox.getDiametrX()*scaleIndex ), (int)(nowHitbox.getDiametrY()*scaleIndex )); // System.out.println("READY: diametrX = "+nowHitbox.getDiametrX()+ ". diametrY = "+nowHitbox.getDiametrY()); // System.out.println("READY: coordX = "+(int)nowHitbox.getCurrentRefPoint().x+ ". coordY = "+(int)(nowHitbox.getCurrentRefPoint().y-(nowHitbox.getDiametrY()/2))); @@ -36,7 +41,7 @@ public class HitboxCircleRenderingFunction implements ShapeRenderingFunction { currentDiametrX = Math.abs((int)(firstIsoPoint.x )-(int)(currentIsoPoint.x )); // System.out.println("CURRENT: coordX = "+(int)firstIsoPoint.x+ ". coordX = "+(int)(firstIsoPoint.y-currentDiametrX/4)); // System.out.println("CURRENT: diametrX = "+currentDiametrX+ ". diametrY = "+currentDiametrX/2); - g.drawOval((int)(firstIsoPoint.x*scaleIndex), (int)((firstIsoPoint.y - currentDiametrX/4)*scaleIndex), (int)(currentDiametrX*scaleIndex ), (int)(currentDiametrX/2*scaleIndex )); + g.drawOval((int)(firstIsoPoint.x*scaleIndex+centeringImage.x), (int)((firstIsoPoint.y - currentDiametrX/4)*scaleIndex+centeringImage.y), (int)(currentDiametrX*scaleIndex ), (int)(currentDiametrX/2*scaleIndex )); } } @@ -70,8 +75,8 @@ public class HitboxCircleRenderingFunction implements ShapeRenderingFunction { @Override public void mouseMoved(MouseEvent e) { - currentIsoPoint.x = e.getX()/scaleIndex; - currentIsoPoint.y = e.getY()/scaleIndex; + currentIsoPoint.x = (e.getX()-centeringImage.x)/scaleIndex; + currentIsoPoint.y = (e.getY()-centeringImage.y)/scaleIndex; } public void functionClearHitboxJButton() { diff --git a/src/gui/render/HitboxRectengleRenderingFunction.java b/src/gui/render/HitboxRectengleRenderingFunction.java index 57dc407..c212a9a 100644 --- a/src/gui/render/HitboxRectengleRenderingFunction.java +++ b/src/gui/render/HitboxRectengleRenderingFunction.java @@ -23,6 +23,7 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction private List LocalListPointsIso = new ArrayList(); private List LocalListPointsCartesian = new ArrayList(); private float scaleIndex = 1; + Point centeringImage; public List getLocalListPointsIso() { return LocalListPointsIso; @@ -40,7 +41,6 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction public void drawing(Graphics2D g) { scaleIndex = entity.getScaleIndex(); HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox(); - int x1,y1,x2,y2; if(nowHitbox.getListPointsIso().size() == 4) { drawingLinesFromListPoints(nowHitbox.getListPointsIso(),g); } @@ -58,13 +58,14 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction 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((int)(x1*scaleIndex), (int)(y1*scaleIndex), (int)(x2*scaleIndex), (int)(y2*scaleIndex)); + g.drawLine((int)(x1*scaleIndex+centeringImage.x), (int)(y1*scaleIndex+centeringImage.y), (int)(x2*scaleIndex+centeringImage.x), (int)(y2*scaleIndex+centeringImage.y)); + System.out.println("x = "+x1*scaleIndex+centeringImage.x+"|| y = "+y1*scaleIndex+centeringImage.y); } 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((int)(x1*scaleIndex), (int)(y1*scaleIndex), (int)(x2*scaleIndex), (int)(y2*scaleIndex)); + g.drawLine((int)(x1*scaleIndex+centeringImage.x), (int)(y1*scaleIndex+centeringImage.y), (int)(x2*scaleIndex+centeringImage.x), (int)(y2*scaleIndex+centeringImage.y)); } @Override @@ -95,8 +96,11 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction @Override public void mouseMoved(MouseEvent e) { - currentIsoPoint.x = e.getX()/scaleIndex; - currentIsoPoint.y = e.getY()/scaleIndex; + currentIsoPoint.x = (e.getX()-centeringImage.x)/scaleIndex; + currentIsoPoint.y = (e.getY()-centeringImage.y)/scaleIndex; + + System.out.println("currentIsoPoint.x = "+currentIsoPoint.x); + System.out.println("currentIsoPoint.y = "+currentIsoPoint.y); HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox(); if(entity!=null) { if(firstIsoPoint != null && nowHitbox.getListPointsIso().size() == 0) { @@ -151,6 +155,9 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction } } + public void setCenteringImagePoint(Point p) { + centeringImage = p; + } @Override public void functionClearJButton() { HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox();