package nl.tudelft.bw4t.server.model.robots.handicap;
import java.awt.geom.Rectangle2D;
import java.util.List;
import java.util.Stack;
import nl.tudelft.bw4t.map.view.ViewEntity;
import nl.tudelft.bw4t.server.model.BW4TServerMap;
import nl.tudelft.bw4t.server.model.BoundedMoveableObject;
import nl.tudelft.bw4t.server.model.blocks.Block;
import nl.tudelft.bw4t.server.model.doors.Door;
import nl.tudelft.bw4t.server.model.epartners.EPartner;
import nl.tudelft.bw4t.server.model.robots.AbstractRobot;
import nl.tudelft.bw4t.server.model.robots.AgentRecord;
import nl.tudelft.bw4t.server.model.robots.Battery;
import nl.tudelft.bw4t.server.model.robots.MoveType;
import nl.tudelft.bw4t.server.model.robots.NavigatingRobot.State;
import nl.tudelft.bw4t.server.model.zone.Room;
import nl.tudelft.bw4t.server.model.zone.Zone;
import repast.simphony.context.Context;
import repast.simphony.space.continuous.NdPoint;
import repast.simphony.space.grid.GridPoint;
/**
* The robot decorator.
*/
public abstract class AbstractRobotDecorator implements IRobot {
/**
* This is the parent of the component. It can be the robot itself, or
* another handicap.
*/
private IRobot parent;
/**
* This is the robot all handicaps wrap around.
*/
protected AbstractRobot robot = null;
/***
* @param p
* The interface the handicap wraps around.
*/
public AbstractRobotDecorator(IRobot p) {
parent = p;
robot = getSuperParent();
robot.setTopMostHandicap(this);
}
@Override
public String getName() {
return parent.getName();
}
@Override
public void connect() {
parent.connect();
}
@Override
public void disconnect() {
parent.disconnect();
}
@Override
public Stack<Block> getHolding() {
return parent.getHolding();
}
@Override
public NdPoint getTargetLocation() {
return parent.getTargetLocation();
}
@Override
public void setTargetLocation(NdPoint ptargetLocation) {
parent.setTargetLocation(ptargetLocation);
}
@Override
public boolean canPickUp(BoundedMoveableObject b) {
return parent.canPickUp(b);
}
@Override
public void pickUp(Block b) {
parent.pickUp(b);
}
@Override
public void drop() {
parent.drop();
}
@Override
public void drop(int amount) {
parent.drop(amount);
}
@Override
public void moveTo(double x, double y) {
parent.moveTo(x, y);
}
@Override
public MoveType getMoveType(double endx, double endy) {
return parent.getMoveType(endx, endy);
}
@Override
public MoveType checkZoneAccess(Zone startzone, Zone endzone, Door door) {
return parent.checkZoneAccess(startzone, endzone, door);
}
@Override
public Door getCurrentDoor(double x, double y) {
return parent.getCurrentDoor(x, y);
}
@Override
public Room getCurrentRoom(double x, double y) {
return parent.getCurrentRoom(x, y);
}
@Override
public Zone getZone() {
return parent.getZone();
}
@Override
public void moveByDisplacement(double x, double y) {
parent.moveByDisplacement(x, y);
}
@Override
public void move() {
parent.move();
}
@Override
public void stopRobot() {
parent.stopRobot();
}
@Override
public boolean isCollided() {
return parent.isCollided();
}
@Override
public void setCollided(boolean collided) {
parent.setCollided(collided);
}
@Override
public void clearCollided() {
parent.clearCollided();
}
@Override
public boolean isConnected() {
return parent.isConnected();
}
@Override
public boolean isOneBotPerZone() {
return parent.isOneBotPerZone();
}
@Override
public int getSize() {
return parent.getSize();
}
@Override
public void setSize(int s) {
parent.setSize(s);
}
@Override
public ViewEntity getView() {
return parent.getView();
}
@Override
public AgentRecord getAgentRecord() {
return parent.getAgentRecord();
}
@Override
public Battery getBattery() {
return parent.getBattery();
}
@Override
public void setBattery(Battery battery) {
parent.setBattery(battery);
}
@Override
public void recharge() {
parent.recharge();
}
@Override
public IRobot getParent() {
return parent;
}
@Override
public IRobot getEarliestParent() {
IRobot parent = getParent();
while (parent != null && parent.getParent() != null) {
parent = parent.getParent();
}
return parent;
}
@Override
public void setParent(IRobot hI) {
parent.setParent(hI);
}
@Override
public List<String> getHandicapsList() {
return parent.getHandicapsList();
}
@Override
public int getGripperCapacity() {
return parent.getGripperCapacity();
}
@Override
public void setGripperCapacity(int newcap) {
parent.setGripperCapacity(newcap);
}
@Override
public double getSpeedMod() {
return parent.getSpeedMod();
}
@Override
public void setSpeedMod(double speedMod) {
parent.setSpeedMod(speedMod);
}
@Override
public boolean isHuman() {
return parent.isHuman();
}
@Override
public EPartner getEPartner() {
return parent.getEPartner();
}
@Override
public boolean isHoldingEPartner() {
return parent.isHoldingEPartner();
}
@Override
public void pickUpEPartner(EPartner eP) {
parent.pickUpEPartner(eP);
}
@Override
public void dropEPartner() {
parent.dropEPartner();
}
@Override
public State getState() {
return parent.getState();
}
@Override
public void setTarget(BoundedMoveableObject target) {
parent.setTarget(target);
}
@Override
public NdPoint getLocation() {
return parent.getLocation();
}
@Override
public long getId() {
return parent.getId();
}
@Override
public Context<Object> getContext() {
return parent.getContext();
}
@Override
public double distanceTo(BoundedMoveableObject b) {
return parent.distanceTo(b);
}
@Override
public AbstractRobot getSuperParent() {
if (robot == null && parent != null) {
robot = parent.getSuperParent();
}
return robot;
}
@Override
public List<BoundedMoveableObject> getObstacles() {
return parent.getObstacles();
}
@Override
public void clearObstacles() {
parent.clearObstacles();
}
@Override
public boolean isDestinationUnreachable() {
return parent.isDestinationUnreachable();
}
@Override
public BW4TServerMap getServerMap() {
return parent.getServerMap();
}
@Override
public GridPoint getGridLocation() {
return parent.getGridLocation();
}
@Override
public Rectangle2D getBoundingBox() {
return parent.getBoundingBox();
}
@Override
public void setSize(double width, double height) {
parent.setSize(width, height);
}
@Override
public void removeFromContext() {
parent.removeFromContext();
}
@Override
public double distanceTo(NdPoint there) {
return parent.distanceTo(there);
}
@Override
public List<NdPoint> getPointsOccupiedByObject(double padding) {
return parent.getPointsOccupiedByObject(padding);
}
@Override
public boolean isFree(Class<? extends BoundedMoveableObject> freeOfType) {
return parent.isFree(freeOfType);
}
}