package Code.graphics.searchGame;
import edu.cmu.ri.createlab.terk.robot.finch.Finch;
/**
* @author Eric Cheek (echeek@andrew.cmu.edu)
*
*/
final class SearchGameTiltControl
{
Finch myFinch;
private int minX, minY, maxX, maxY, xPosition, yPosition;
private double xScale = 1, yScale = 1;
SearchGameTiltControl(Finch f)
{
myFinch = f;
minX = minY = -100;
maxX = maxY = 100;
xPosition = 0;
yPosition = 0;
}
public void setLimits(int minX, int minY, int maxX, int maxY)
{
this.minX = minX;
this.minY = minY;
this.maxX = maxX;
this.maxY = maxY;
}
public void setScales(double x, double y)
{
xScale = x;
yScale = y;
}
public void setPosition(int x, int y)
{
xPosition = x;
yPosition = y;
}
public void centerPosition()
{
xPosition = (minX + maxX) / 2;
yPosition = (minX + maxX) / 2;
}
public int getX()
{
return xPosition;
}
public int getY()
{
return yPosition;
}
/**
* Fetch finch tilt and move x, y positions appropriately
*/
public void update()
{
//X,Y axis switched for more intuitive control
//note that x movement is inverted.
int dx = (int)(-xScale * myFinch.getYAcceleration());
int dy = (int)(yScale * myFinch.getXAcceleration());
//update x and y positions
xPosition += dx;
yPosition += dy;
//test to prevent x/y from leaving set bounds
if (xPosition < minX)
{
xPosition = minX;
}
if (yPosition < minY)
{
yPosition = minY;
}
if (xPosition > maxX)
{
xPosition = maxX;
}
if (yPosition > maxY)
{
yPosition = maxY;
}
}
}