diff --git a/res/objecttypes.xml b/res/objecttypes.xml
index 5326079..740e273 100644
--- a/res/objecttypes.xml
+++ b/res/objecttypes.xml
@@ -3,22 +3,22 @@
-
+
-
+
-
+
-
+
diff --git a/src/gui/render/HitboxCircleRenderingFunction.java b/src/gui/render/HitboxCircleRenderingFunction.java
index 63c3b3f..53ba4f2 100644
--- a/src/gui/render/HitboxCircleRenderingFunction.java
+++ b/src/gui/render/HitboxCircleRenderingFunction.java
@@ -26,10 +26,15 @@ public class HitboxCircleRenderingFunction implements ShapeRenderingFunction {
public void drawing(Graphics2D g) {
HitboxCircle nowHitbox = (HitboxCircle)entity.getHitbox();
if(nowHitbox.getRadius()!=0) {
- g.drawOval((int)nowHitbox.getCurrentRefPoint().x, (int)(nowHitbox.getCurrentRefPoint().y-(nowHitbox.getDiametrY()/2)), (int)nowHitbox.getDiametrX(), (int)(nowHitbox.getDiametrY()));
+ g.drawOval((int)nowHitbox.getCurrentRefPoint().x, (int)(nowHitbox.getCurrentRefPoint().y-(nowHitbox.getDiametrY()/2)), (int)nowHitbox.getDiametrX(), (int)(nowHitbox.getDiametrY()));
+ 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)));
+
}else if(firstIsoPoint != null) {
currentDiametrX = Math.abs((int)firstIsoPoint.x-(int)currentIsoPoint.x);
- g.drawOval((int)firstIsoPoint.x, (int)(firstIsoPoint.y-currentDiametrX/4), currentDiametrX, currentDiametrX/2);
+ 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, (int)(firstIsoPoint.y-currentDiametrX/4), (int)currentDiametrX, (int)currentDiametrX/2);
}
}
@@ -42,13 +47,17 @@ public class HitboxCircleRenderingFunction implements ShapeRenderingFunction {
//Формула высчитывания радиуса из диаметров circle.
nowHitbox.getCurrentRefPoint().setXY(firstIsoPoint.x, firstIsoPoint.y);
nowHitbox.setDiametrXY(Math.abs(firstIsoPoint.x-e.getX()),Math.abs((firstIsoPoint.x-e.getX())/2));
- System.out.println("X = "+nowHitbox.getDiametrX()+ "Y = "+nowHitbox.getDiametrY());
+ System.out.println("X = "+nowHitbox.getDiametrX()+ ". Y = "+nowHitbox.getDiametrY());
float temp = (float)Math.sqrt(2);
nowHitbox.setRadius((nowHitbox.getDiametrY()/2)*temp);
// высчитываем в параметры хитбокссеркла нужный радиус и текущую реф поинт.
// Не забываем высчитать реф поинт хитбокса относительно текущей.
// после чего вызываем listPointsToString и нотифай, который отправляет данные на сохранение
notifySubscribers();
+ //возвращаем локальные данные текущего рисования хитбокса в нулевые значения.
+ //необходимо, что бы при переходе в новый обьект, при создании хитбокса, очистился кэш канваса.
+ firstIsoPoint = null;
+ currentDiametrX = 0;
}
}
diff --git a/src/gui/render/HitboxRectengleRenderingFunction.java b/src/gui/render/HitboxRectengleRenderingFunction.java
index bedda44..8eaf1ef 100644
--- a/src/gui/render/HitboxRectengleRenderingFunction.java
+++ b/src/gui/render/HitboxRectengleRenderingFunction.java
@@ -23,7 +23,6 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction
private List LocalListPointsIso = new ArrayList();
private List LocalListPointsCartesian = new ArrayList();
-
public List getLocalListPointsIso() {
return LocalListPointsIso;
}
@@ -82,15 +81,13 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction
nowHitbox.getListPointsIso().addAll(LocalListPointsIso);
nowHitbox.getListPointsCartesian().addAll(LocalListPointsCartesian);
System.out.println("mouseClicked Event 2 TIME: "+LocalTime.now());
-
- /*
- * В данном месте при нажатии закрепляющей точки, необходимо вызывать функцию,
- * которая будет формировать из текущих декартовых координат:
- * 1. Точку старта и ширину с высотой.
- * 2. Так же необходимо реализовать слушатель сохранения новых хитбоксов в дерево.
- *
- * */
+
notifySubscribers();
+ //очистка кэша
+ firstIsoPoint = null;
+ LocalListPointsIso.clear();
+ LocalListPointsCartesian.clear();
+
}
}
diff --git a/src/model/HitboxCircle.java b/src/model/HitboxCircle.java
index 96076e4..a61eede 100644
--- a/src/model/HitboxCircle.java
+++ b/src/model/HitboxCircle.java
@@ -17,11 +17,18 @@ public class HitboxCircle extends Hitbox {
radiusHitbox = 0;
}
private void parseStringToCircleHitbox(String[] informations) {
+ float temp = (float)Math.sqrt(2);
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]);
+ diametrX = radiusHitbox/temp*4;
+ diametrY = radiusHitbox/temp*2;
+ cartesianCenterImagePoint = isometricToCartesian(owner.getImage().getWidth()/2,owner.getImage().getHeight(),cartesianCenterImagePoint);
+ Point cartesianCenterRefPoint = new Point(referencePoint.x+cartesianCenterImagePoint.x, referencePoint.y+cartesianCenterImagePoint.y);
+ Point isoCenterRefPoint = new Point(0,0);
+ isoCenterRefPoint = cartesianToIsometric(cartesianCenterRefPoint.x,cartesianCenterRefPoint.y,isoCenterRefPoint);
+ currentRefPoint.x = isoCenterRefPoint.x-diametrY;
+ currentRefPoint.y = isoCenterRefPoint.y-diametrY/2;
}
@Override
public String listPointsToString() {