package primitives.spaces;
import java.awt.*;
import primitives.machines.*;
import primitives.geomtry.Coordinate;
public class PlaneSpace implements MachineListener{
	private Coordinate dstate;
	public Point state;
	private double dx,dy;
	private Rectangle border;
	public PlaneSpace(Dimension d,double dalpha){
		 border = new Rectangle(4,4,d.width-8,d.height-8);
		 dx =  border.width*dalpha/(Math.PI*2);
		 dy = border.height*dalpha/(Math.PI*2);
		 dstate = new Coordinate(d.width/2-border.x,d.height/2-border.y);
		 state = dstate.toPoint();
	}
	public void Xtranslate(int sign){								
		dstate.move((dstate.x+sign*dx+border.width)%border.width,dstate.y);
		state = dstate.toPoint();
		state.translate(border.x-2,border.y-2);
	}
	public void Ytranslate(int sign){
	   	dstate.move(dstate.x,(dstate.y+sign*dy+border.height)%border.height);
		state = dstate.toPoint();
		state.translate(border.x-2,border.y-2);
	}							 
/*	public void update(Graphics g){
		g.setColor((Color.gray).brighter());
		g.fillRect(border.x,border.y,border.width-1,border.height-1);
		g.setColor(Color.black);							   
		g.drawRect(border.x,border.y,border.width-1,border.height-1);
	}*/
	public void redraw(Graphics g){
		g.setColor((Color.gray).brighter());
		g.fillRect(border.x,border.y,border.width-1,border.height-1);
		g.setColor(Color.black);							   
		g.drawRect(border.x,border.y,border.width-1,border.height-1);
		g.setClip(border);
		g.setColor(Color.green);
		g.fillOval(state.x+border.x-3,state.y+border.y-3,6,6);
	}
	public void finalize() throws Throwable{
		dstate = null;
		state = null;
		border = null;
	}
}

	
