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