Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.Point;
- import java.lang.Exception;
- import java.lang.Math;
- import java.lang.Thread;
- public class Mover {
- private volatile Point start, end;
- private final Thread horizontalThread;
- private final Thread verticalThread;
- private volatile boolean doMove = false;
- private final long hRate, vRate;
- public Mover (Point start, Point end, long time) {
- this.start = start;
- this.end = end;
- int xDist = Math.abs(start.x - end.x);
- int yDist = Math.abs(start.y - end.y);
- hRate = xDist != 0 ? Math.round(time / xDist) : -1;
- vRate = yDist != 0 ? Math.round(time / yDist) : -1;
- horizontalThread = new MoverThread(false);
- verticalThread = new MoverThread(true);
- }
- public Point getPoint() {
- return start;
- }
- public void startMove() {
- doMove = true;
- if(!horizontalThread.isAlive()) {
- horizontalThread.start();
- }
- if(!verticalThread.isAlive()) {
- verticalThread.start();
- }
- }
- public void stopMove() {
- doMove = false;
- }
- public boolean isMoving() {
- return horizontalThread.isAlive() || verticalThread.isAlive();
- }
- private class MoverThread extends Thread {
- final boolean vertical;
- final boolean positive;
- public MoverThread(boolean vertical) {
- this.vertical = vertical;
- this.positive = vertical ? start.y < end.y : start.x < end.x;
- }
- public void run() {
- while (doMove && (vertical ? start.y != end.y : start.x != end.x)) {
- start.move(!vertical ? positive ? start.x + 1 : start.x - 1 : start.x,
- vertical ? positive ? start.y + 1 : start.y - 1 : start.y);
- try {sleep(vertical ? vRate : hRate);} catch (Exception e) { System.out.println("Could not sleep");}
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement