v1.1.1 : code optimization
This commit is contained in:
Binary file not shown.
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>fr.klemek</groupId>
|
||||
<artifactId>mapping</artifactId>
|
||||
<version>1.1</version>
|
||||
<version>1.1.1</version>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package fr.klemek.mapping;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseMotionListener;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
@@ -13,10 +11,10 @@ class MainPanel extends JPanel {
|
||||
private float ratio = DEFAULT_RATIO;
|
||||
|
||||
private transient Map map;
|
||||
private int cx;
|
||||
private int cy;
|
||||
private float mw;
|
||||
private float mh;
|
||||
private int x0;
|
||||
private int y0;
|
||||
private float xstep;
|
||||
private float ystep;
|
||||
private int sx = -1;
|
||||
private int sy = -1;
|
||||
|
||||
@@ -29,45 +27,7 @@ class MainPanel extends JPanel {
|
||||
|
||||
MainPanel(Map map) {
|
||||
this.map = map;
|
||||
|
||||
this.addMouseMotionListener(new MouseMotionListener() {
|
||||
@Override
|
||||
public void mouseDragged(MouseEvent e) {
|
||||
//ignored
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseMoved(MouseEvent e) {
|
||||
sx = -1;
|
||||
sy = -1;
|
||||
if (MainPanel.this.xs != null) {
|
||||
for (int x = 0; x < MainPanel.this.map.size(); x++)
|
||||
for (int y = 0; y < MainPanel.this.map.size(); y++)
|
||||
if (e.getPoint().distance(MainPanel.this.xs[x][y], MainPanel.this.ys[x][y]) < 6) {
|
||||
sx = x;
|
||||
sy = y;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this.addMouseWheelListener(e -> {
|
||||
if (sx >= 0 && sy >= 0) {
|
||||
if (e.isShiftDown()) {
|
||||
for (int dx = -1; dx < 2; dx++)
|
||||
for (int dy = -1; dy < 2; dy++)
|
||||
if (sx + dx >= 0 && sx + dx < MainPanel.this.map.size()
|
||||
&& sy + dy >= 0 && sy + dy < MainPanel.this.map.size())
|
||||
MainPanel.this.map.set(sx + dx, sy + dy, MainPanel.this.map.get(sx + dx, sy + dy)
|
||||
+ (e.getPreciseWheelRotation() < 0 ? 1f : -1f)
|
||||
* (e.isControlDown() ? 1f : .1f));
|
||||
} else {
|
||||
MainPanel.this.map.set(sx, sy, MainPanel.this.map.get(sx, sy)
|
||||
+ (e.getPreciseWheelRotation() < 0 ? 1f : -1f)
|
||||
* (e.isControlDown() ? 1f : .1f));
|
||||
}
|
||||
}
|
||||
});
|
||||
new MouseListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -77,56 +37,65 @@ class MainPanel extends JPanel {
|
||||
RenderingHints.KEY_ANTIALIASING,
|
||||
RenderingHints.VALUE_ANTIALIAS_ON));
|
||||
|
||||
int w = this.getWidth();
|
||||
int h = this.getHeight();
|
||||
this.cx = Math.round(w / 2f);
|
||||
this.cy = Math.round(h / 2f);
|
||||
if (w > h) {
|
||||
this.mh = h * SIZE * ratio;
|
||||
this.mw = mh / ratio;
|
||||
} else {
|
||||
this.mw = w * SIZE;
|
||||
this.mh = mw * ratio;
|
||||
}
|
||||
|
||||
g2.clearRect(0, 0, w, h);
|
||||
drawMap(g2);
|
||||
g2.clearRect(0, 0, this.getWidth(), this.getHeight());
|
||||
this.computeNodes();
|
||||
if (this.showGrid)
|
||||
this.drawGrid(g2);
|
||||
this.drawMap(g2);
|
||||
}
|
||||
|
||||
private void drawMap(Graphics2D g2) {
|
||||
g2.setStroke(new BasicStroke(1f));
|
||||
private void computeNodes() {
|
||||
int w = this.getWidth();
|
||||
int h = this.getHeight();
|
||||
|
||||
int x0 = Math.round(this.cx - this.mw / 2f);
|
||||
float mw;
|
||||
float mh;
|
||||
if (w > h) {
|
||||
mh = h * SIZE * ratio;
|
||||
mw = mh / ratio;
|
||||
} else {
|
||||
mw = w * SIZE;
|
||||
mh = mw * ratio;
|
||||
}
|
||||
|
||||
this.x0 = Math.round(w / 2f - mw / 2f);
|
||||
this.y0 = Math.round(h / 2f);
|
||||
|
||||
this.xs = new int[this.map.size()][this.map.size()];
|
||||
this.ys = new int[this.map.size()][this.map.size()];
|
||||
|
||||
float xstep = this.mw / (2 * (this.map.size() - 1));
|
||||
float ystep = this.mh / (2 * (this.map.size() - 1));
|
||||
|
||||
g2.setColor(Color.GRAY);
|
||||
this.xstep = mw / (2 * (this.map.size() - 1));
|
||||
this.ystep = mh / (2 * (this.map.size() - 1));
|
||||
|
||||
for (int x = 0; x < this.map.size(); x++) {
|
||||
for (int y = 0; y < this.map.size(); y++) {
|
||||
Point p = this.getPoint(x0, xstep, ystep, x, y, this.map.get(x, y));
|
||||
|
||||
Point p = this.getPoint(x, y, this.map.get(x, y));
|
||||
this.xs[x][y] = p.x;
|
||||
this.ys[x][y] = p.y;
|
||||
|
||||
if (this.showGrid) {
|
||||
Point p0 = this.getPoint(x0, xstep, ystep, x, y, 0);
|
||||
if (x > 0) {
|
||||
Point p1 = this.getPoint(x0, xstep, ystep, x - 1, y, 0);
|
||||
g2.drawLine(p0.x, p0.y, p1.x, p1.y);
|
||||
}
|
||||
if (y > 0) {
|
||||
Point p1 = this.getPoint(x0, xstep, ystep, x, y - 1, 0);
|
||||
g2.drawLine(p0.x, p0.y, p1.x, p1.y);
|
||||
}
|
||||
g2.drawLine(p0.x, p0.y, p.x, p.y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void drawGrid(Graphics2D g2) {
|
||||
g2.setColor(Color.GRAY);
|
||||
for (int x = 0; x < this.map.size(); x++) {
|
||||
for (int y = 0; y < this.map.size(); y++) {
|
||||
Point p0 = this.getPoint(x, y, 0);
|
||||
if (x > 0) {
|
||||
Point p1 = this.getPoint(x - 1, y, 0);
|
||||
g2.drawLine(p0.x, p0.y, p1.x, p1.y);
|
||||
}
|
||||
if (y > 0) {
|
||||
Point p1 = this.getPoint(x, y - 1, 0);
|
||||
g2.drawLine(p0.x, p0.y, p1.x, p1.y);
|
||||
}
|
||||
g2.drawLine(p0.x, p0.y, this.xs[x][y], this.ys[x][y]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void drawMap(Graphics2D g2) {
|
||||
|
||||
|
||||
for (int x = 0; x < this.map.size(); x++) {
|
||||
for (int y = 0; y < this.map.size(); y++) {
|
||||
@@ -136,15 +105,15 @@ class MainPanel extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
private Point getPoint(int x0, float xstep, float ystep, int x, int y, float value) {
|
||||
private Point getPoint(int x, int y, float value) {
|
||||
float center = this.map.size() / 2f;
|
||||
double r = Math.sqrt(Math.pow(x - center, 2) + Math.pow(y - center, 2));
|
||||
double a = Math.atan2(y - center, x - center);
|
||||
double x1 = center + r * Math.cos(a + this.angle);
|
||||
double y1 = center + r * Math.sin(a + this.angle);
|
||||
return new Point(
|
||||
Math.round(x0 + xstep * (float) x1 + xstep * (float) y1),
|
||||
Math.round(this.cy - ystep * (float) x1 + ystep * (float) y1 - ystep * value)
|
||||
Math.round(this.x0 + this.xstep * (float) x1 + this.xstep * (float) y1),
|
||||
Math.round(this.y0 - this.ystep * (float) x1 + this.ystep * (float) y1 - this.ystep * value)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -162,6 +131,39 @@ class MainPanel extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
void computeMouseMoved(Point position) {
|
||||
sx = -1;
|
||||
sy = -1;
|
||||
if (MainPanel.this.xs != null) {
|
||||
for (int x = 0; x < MainPanel.this.map.size(); x++)
|
||||
for (int y = 0; y < MainPanel.this.map.size(); y++)
|
||||
if (position.distance(MainPanel.this.xs[x][y], MainPanel.this.ys[x][y]) < 6) {
|
||||
sx = x;
|
||||
sy = y;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void computeMouseWheel(int amount, boolean controlDown, boolean shiftDown) {
|
||||
if (sx >= 0 && sy >= 0) {
|
||||
if (shiftDown) {
|
||||
for (int dx = -1; dx < 2; dx++)
|
||||
for (int dy = -1; dy < 2; dy++)
|
||||
changeNode(amount, controlDown, sx + dx, sy + dy);
|
||||
} else
|
||||
changeNode(amount, controlDown, sx, sy);
|
||||
}
|
||||
}
|
||||
|
||||
private void changeNode(int amount, boolean controlDown, int x, int y) {
|
||||
if (x >= 0 && x < this.map.size()
|
||||
&& y >= 0 && y < this.map.size())
|
||||
this.map.set(x, y, MainPanel.this.map.get(x, y)
|
||||
+ amount * (controlDown ? -1f : -.1f));
|
||||
}
|
||||
|
||||
|
||||
float getRatio() {
|
||||
return ratio;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package fr.klemek.mapping;
|
||||
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseMotionListener;
|
||||
import java.awt.event.MouseWheelEvent;
|
||||
import java.awt.event.MouseWheelListener;
|
||||
|
||||
public class MouseListener implements MouseMotionListener, MouseWheelListener {
|
||||
|
||||
private MainPanel mp;
|
||||
|
||||
MouseListener(MainPanel mp) {
|
||||
this.mp = mp;
|
||||
this.mp.addMouseWheelListener(this);
|
||||
this.mp.addMouseMotionListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged(MouseEvent e) {
|
||||
//ignored
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseMoved(MouseEvent e) {
|
||||
this.mp.computeMouseMoved(e.getPoint());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseWheelMoved(MouseWheelEvent e) {
|
||||
this.mp.computeMouseWheel(e.getWheelRotation(), e.isControlDown(), e.isShiftDown());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user