| @@ -31,6 +31,7 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| private JFrame _frame; | |||
| private JButton pauseButton; | |||
| private Random random = new Random(); | |||
| private int _lastX, _lastY; | |||
| public Render(int width, int height, Grid g, String[] rules) { | |||
| addMouseListener(this); | |||
| @@ -47,6 +48,7 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| _pixels = ((DataBufferInt) _image.getRaster().getDataBuffer()).getData(); | |||
| _lastTick = 0; | |||
| _rules = rules; | |||
| _lastX = _lastY = -1; | |||
| fps_now = 15; | |||
| setFrame(); | |||
| } | |||
| @@ -215,14 +217,32 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| int states = Goldfish.getMaxStates(rule) - 1; | |||
| if (e.getX() < 0 || e.getY() < 0 || e.getX() / scale > width || e.getY() / scale > height) | |||
| return; | |||
| _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); | |||
| if (e.getX()/scale != _lastX && e.getY()/scale != _lastY) { | |||
| _lastX = e.getX()/scale; | |||
| _lastY = e.getY()/scale; | |||
| Patch p = _grid.getPatch(_lastX, _lastY); | |||
| if (p.getState() == states) { | |||
| p.setState(0); | |||
| } else { | |||
| _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); | |||
| } | |||
| } | |||
| e.consume(); | |||
| } | |||
| @Override | |||
| public void mouseClicked(MouseEvent e) { | |||
| int states = Goldfish.getMaxStates(rule) - 1; | |||
| _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); | |||
| if (e.getX()/scale != _lastX && e.getY()/scale != _lastY) { | |||
| _lastX = e.getX()/scale; | |||
| _lastY = e.getY()/scale; | |||
| Patch p = _grid.getPatch(_lastX, _lastY); | |||
| if (p.getState() == states) { | |||
| p.setState(0); | |||
| } else { | |||
| _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); | |||
| } | |||
| } | |||
| e.consume(); | |||
| } | |||
| @@ -237,12 +257,22 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| @Override | |||
| public void mousePressed(MouseEvent e) { | |||
| int states = Goldfish.getMaxStates(rule) - 1; | |||
| _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); | |||
| if (e.getX()/scale != _lastX && e.getY()/scale != _lastY) { | |||
| _lastX = e.getX()/scale; | |||
| _lastY = e.getY()/scale; | |||
| Patch p = _grid.getPatch(_lastX, _lastY); | |||
| if (p.getState() == states) { | |||
| p.setState(0); | |||
| } else { | |||
| _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); | |||
| } | |||
| } | |||
| e.consume(); | |||
| } | |||
| @Override | |||
| public void mouseReleased(MouseEvent e) { | |||
| _lastX = _lastY = -1; | |||
| } | |||
| @Override | |||