package LoopDemos;

/**
 * Wanderer.java
 *
 *
 * Created: Mon Mar 26 15:13:18 2001
 *
 * @author Stuart C. Shapiro
 */

public class Wanderer extends NGP.Graphics.FilledEllipse{
    private java.awt.Point _loc;
    private NGP.Containers.DrawingPanel _dp;

    private int blockedMinX = WanderMain.BLOCKX-50;
    private int blockedMinY = WanderMain.BLOCKY-50;
    private int blockedMaxX = WanderMain.BLOCKX+WanderMain.BLOCKW;
    private int blockedMaxY = WanderMain.BLOCKY+WanderMain.BLOCKH;

    public Wanderer (NGP.Containers.DrawingPanel dp){
	super(dp);
	_dp = dp;
	setDimension(new java.awt.Dimension(50,50));
	start();
    }

    public void start(){
	_loc = new java.awt.Point(0,0);
	setLocation(_loc);
	setColor(java.awt.Color.blue);
    }

    public void wander(){

	while (!(_loc.x==250 && _loc.y==250)) {
	    int dx, dy;

	    do {
		dx = NGP.Utilities.randomNumber(0,5);
		dy = NGP.Utilities.randomNumber(0,5);
	    } while (isBlocked(_loc.x+dx, _loc.y+dy));

	    java.awt.Rectangle oldRect = this.getBounds();
	    _loc.translate(dx, dy);
	    setLocation(_loc);
	    _dp.paintImmediately(oldRect.union(this.getBounds()));
	}

	setColor(java.awt.Color.black);
    }

    private boolean isBlocked(int newx, int newy){

	return 
	    newx<0 || newx>250
	    || newy<0 || newy>250
	    || (newx>blockedMinX && newx<blockedMaxX
		&& newy>blockedMinY && newy<blockedMaxY);
    }

}// Wanderer
