// framerate info buffer
long[] framerate = new long[4];
// create a double-buffering buffer stragey
b.createBufferStrategy(2);
BufferStrategy s = b.getBufferStrategy();
Graphics2D g;
while (b.isVisible()) {
// get the off screen graphics context and clear it
g = (Graphics2D) s.getDrawGraphics();
g.setColor(new Color(0xffffff));
g.fillRect(0, 0, b.getWidth(), b.getHeight());
g.setColor(new Color(0x000000));
// draw the spline
Point prev = null;
for (Point next : spline.intervals) {
if (prev != null)
g.drawLine(prev.x, prev.y, next.x, next.y);
prev = next;
}
int i = 0;
for (Point p : spline.points) {
g.drawString(i + "", p.x, p.y);
if (mousePressed) {
int x = mouse.x - p.x;
int y = mouse.y - p.y;
if (x >= 0 && x <= 9 && y <= 0 && y >= -9)
selected = i;
}
i++;
}
// When mouse has been dragged and a point is selected
if (mouseDragged && selected != -1) {
Point p = spline.points.get(selected);
delta.x = mouse.x - p.x;
delta.y = mouse.y - p.y;
p.x = mouse.x;
p.y = mouse.y;
forceCollinear(selected);
spline.updateIntervals();
}
// Else when mouse pressed over unoccupied space
else if (mousePressed && selected == -1) {
spline.points.add(new Point(mouse.x, mouse.y));
forceCollinear(spline.points.size() - 1);
spline.updateIntervals();
}
// calculate and draw the framerate
framerate[1]++;
framerate[3] = System.currentTimeMillis();
if ((framerate[3] - framerate[2]) > 1000) {
framerate[0] = framerate[1];
framerate[1] = 0;
framerate[2] = framerate[3];
}
g.drawString(framerate[0] + " fps", 10, 40);
// swap the buffers
s.show();
}
}