/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package robotinterface.robot.device;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.nio.ByteBuffer;
import robotinterface.drawable.Drawable;
import robotinterface.drawable.GraphicObject;
import robotinterface.drawable.DrawingPanel;
import robotinterface.robot.Robot;
import robotinterface.robot.simulation.Environment;
import robotinterface.robot.simulation.VirtualDevice;
/**
*
* @author antunes
*/
public class IRProximitySensor extends Device implements VirtualDevice, Drawable {
public static final int MAX_DISTANCE = 500;
private int dist = 0;
private double x, y;
@Override
public void setState(ByteBuffer data) {
dist = data.getChar();
// System.out.println("Distancia: " + dist);
}
@Override
public void getState(ByteBuffer buffer, Robot robot) {
buffer.put((byte) 2);
char d = (char) robot.getEnvironment().beamDistance(robot.getPosX(), robot.getPosY(), robot.getTheta(), Robot.size / 2);
buffer.putChar(d);
}
@Override
public void setState(ByteBuffer data, Robot robot) {
setState(data);
int d = (int) robot.getEnvironment().beamDistance(robot.getPosX(), robot.getPosY(), robot.getTheta(), Robot.size / 2);
if (d < dist) {
dist = d;
}
}
@Override
public void updateRobot(Robot robot) {
double d = dist * 2 + Robot.size / 2;
robot.getPerception().addObstacle(robot.getPosX(), robot.getPosY(), robot.getTheta(), d);
}
@Override
public String stateToString() {
return "" + dist;
}
@Override
public int getClassID() {
return 5;
}
public int getDist() {
return dist;
}
@Override
public void setLocation(double x, double y) {
this.x = x;
this.y = y;
}
@Override
public double getPosX() {
return x;
}
@Override
public double getPosY() {
return y;
}
@Override
public int getDrawableLayer() {
return GraphicObject.DEFAULT_LAYER;
}
@Override
public void drawBackground(Graphics2D g, DrawingPanel.GraphicAttributes ga, DrawingPanel.InputState in) {
}
@Override
public void draw(Graphics2D g, DrawingPanel.GraphicAttributes ga, DrawingPanel.InputState in) {
AffineTransform t = ga.getT(g.getTransform());
g.setTransform(t);
g.setColor(new Color(.1f, 1f, .1f, 0.5f));
g.fillRect(30, -5, (int) (dist * 2), 10);
ga.done(t);
}
@Override
public void drawTopLayer(Graphics2D g, DrawingPanel.GraphicAttributes ga, DrawingPanel.InputState in) {
}
@Override
public String getName() {
return "Distancia";
}
@Override
public void resetState() {
dist = 0;
}
}