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();