done scaling

This commit is contained in:
2026-06-01 12:18:45 +03:00
parent 669d26f595
commit 538ba5f06b
7 changed files with 70 additions and 34 deletions

View File

@ -16,37 +16,43 @@ public class HitboxCircleRenderingFunction implements ShapeRenderingFunction {
Point currentIsoPoint = new Point(0,0);
int currentDiametrX=0;
Entity entity;
private float scaleIndex = 1;
private List<EntityHitboxChangedListener> listeners = new ArrayList<>();
public void setEntityInHitboxCircle(Entity e) {
entity = e;
}
@Override
public void drawing(Graphics2D g) {
scaleIndex = entity.getScaleIndex();
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*scaleIndex), (int)((nowHitbox.getCurrentRefPoint().y-(nowHitbox.getDiametrY()/2))*scaleIndex ), (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)));
}else if(firstIsoPoint != null) {
currentDiametrX = Math.abs((int)firstIsoPoint.x-(int)currentIsoPoint.x);
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, (int)(firstIsoPoint.y-currentDiametrX/4), (int)currentDiametrX, (int)currentDiametrX/2);
g.drawOval((int)(firstIsoPoint.x*scaleIndex), (int)((firstIsoPoint.y - currentDiametrX/4)*scaleIndex), (int)(currentDiametrX*scaleIndex ), (int)(currentDiametrX/2*scaleIndex ));
}
}
//это рисование. Во время рисования, нам необходимо наоборот делить текущие координаты которые мы нажимаем на scaleIndex.
//так мы получим актуальные данные в entity
//и уже они пусть обратно умножаются и в drawing отрисовывается все правильно.
@Override
public void mousePressed(MouseEvent e) {
HitboxCircle nowHitbox = (HitboxCircle)entity.getHitbox();
if(nowHitbox.getRadius()==0 && firstIsoPoint == null) {
firstIsoPoint = new Point(e.getX(), e.getY());
firstIsoPoint = new Point(currentIsoPoint.x, currentIsoPoint.y);
}else if(nowHitbox.getRadius()==0 && firstIsoPoint != null) {
//Формула высчитывания радиуса из диаметров circle.
nowHitbox.getCurrentRefPoint().setXY(firstIsoPoint.x, firstIsoPoint.y);
nowHitbox.setDiametrXY(Math.abs(firstIsoPoint.x-e.getX()),Math.abs((firstIsoPoint.x-e.getX())/2));
nowHitbox.setDiametrXY(Math.abs(firstIsoPoint.x-currentIsoPoint.x),Math.abs((firstIsoPoint.x-currentIsoPoint.x)/2));
System.out.println("X = "+nowHitbox.getDiametrX()+ ". Y = "+nowHitbox.getDiametrY());
float temp = (float)Math.sqrt(2);
nowHitbox.setRadius((nowHitbox.getDiametrY()/2)*temp);
@ -64,8 +70,8 @@ public class HitboxCircleRenderingFunction implements ShapeRenderingFunction {
@Override
public void mouseMoved(MouseEvent e) {
currentIsoPoint.x = e.getX();
currentIsoPoint.y = e.getY();
currentIsoPoint.x = e.getX()/scaleIndex;
currentIsoPoint.y = e.getY()/scaleIndex;
}
public void functionClearHitboxJButton() {