package nl.tudelft.bw4t.client.message;
import eis.iilang.Function;
import eis.iilang.Identifier;
import eis.iilang.Numeral;
import eis.iilang.Parameter;
/**
* The MessageCommand interface defines the functions a command should have
*
*/
public interface MessageCommand {
/**
* Function to translate a message to parameters
* @param message
* The message being translated
* @param entityId
* @return the translated message in parameters
*/
Parameter getParam(BW4TMessage message, String entityId);
/**
* Function to translate a BW4TMessage to String
* @param message
* The message to be translated
* @return The message as a string
*/
String getString(BW4TMessage message);
}
class CommandGoingToRoom implements MessageCommand {
@Override
public String getString(BW4TMessage message) {
if (message.getColor() == null) {
return "I am going to room " + message.getRoom();
} else {
return "I am going to room " + message.getRoom() + " to get a "
+ message.getColor() + " block";
}
}
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("imp", new Function("in", new Identifier(
entityId), new Identifier(message.getRoom())));
}
}
class CommandHasColor implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
if (message.getRoom() != null) {
return new Function("pickedUpFrom", new Identifier(entityId),
new Identifier(message.getColor()), new Identifier(
message.getRoom()));
} else {
return new Function("holding", new Identifier(entityId),
new Identifier(message.getColor()));
}
}
@Override
public String getString(BW4TMessage message) {
if (message.getRoom() == null) {
return "I have a " + message.getColor() + " block";
} else {
return "I have a " + message.getColor() + " block from room "
+ message.getRoom();
}
}
}
class CommandWeNeed implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("need", new Identifier(message.getColor()));
}
@Override
public String getString(BW4TMessage message) {
return "We need a " + message.getColor() + " block";
}
}
class CommandLookingFor implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("imp", new Function("found", new Identifier(
entityId), new Identifier(message.getColor())));
}
@Override
public String getString(BW4TMessage message) {
return "I am looking for a " + message.getColor() + " block";
}
}
class CommandAmGettingColor implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("imp", new Function("pickedUpFrom",
new Identifier(entityId),
new Identifier(message.getColor()), new Identifier(
message.getRoom())));
}
@Override
public String getString(BW4TMessage message) {
if (message.getRoom() == null) {
return "I am getting a " + message.getColor() + " block";
} else {
return "I am getting a " + message.getColor()
+ " block from room " + message.getRoom();
}
}
}
class CommandWillGetColor implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("imp", new Function("holding", new Identifier(
entityId), new Identifier(message.getColor())));
}
@Override
public String getString(BW4TMessage message) {
if (message.getRoom() == null) {
return "I will get a " + message.getColor() + " block";
} else {
return "I will get a " + message.getColor()
+ " block from room " + message.getRoom();
}
}
}
class CommandRoomContains implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("at", new Identifier(message.getColor()),
new Identifier(message.getRoom()));
}
@Override
public String getString(BW4TMessage message) {
return "room " + message.getRoom() + " contains a "
+ message.getColor() + " block";
}
}
class CommandRoomIsEmpty implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("empty", new Identifier(message.getRoom()));
}
@Override
public String getString(BW4TMessage message) {
return "room " + message.getRoom() + " is empty";
}
}
class CommandInRoom implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("in", new Identifier(entityId), new Identifier(
message.getRoom()));
}
@Override
public String getString(BW4TMessage message) {
return "I am in room " + message.getRoom();
}
}
class CommandAboutToDropOffBlock implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("imp", new Function("putDown", new Identifier(
entityId)));
}
@Override
public String getString(BW4TMessage message) {
return "I am about to drop off a " + message.getColor() + " block";
}
}
class CommandDroppedOffBlock implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
if (message.getColor() == null) {
return new Function("putDown", new Identifier(entityId));
} else {
return new Function("putDown", new Identifier(entityId),
new Identifier(message.getColor()));
}
}
@Override
public String getString(BW4TMessage message) {
if (message.getColor() == null) {
return "I just dropped off a block";
} else {
return "I just dropped off a " + message.getColor() + " block";
}
}
}
class CommandAmWaitingOutsideRoom implements MessageCommand {
private final static String RET = "I am waiting outside room ";
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("waitingOutside", new Identifier(entityId),
new Identifier(message.getRoom()));
}
@Override
public String getString(BW4TMessage message) {
if (message.getColor() != null) {
return RET + message.getRoom()
+ " with a " + message.getColor() + " block";
} else {
return RET + message.getRoom();
}
}
}
class CommandYes implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("yes");
}
@Override
public String getString(BW4TMessage message) {
return "yes";
}
}
class CommandNo implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("no");
}
@Override
public String getString(BW4TMessage message) {
return "no";
}
}
class CommandIDoNotKnow implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("dontknow");
}
@Override
public String getString(BW4TMessage message) {
return "I don't know";
}
}
class CommandOk implements MessageCommand {
@Override
public String getString(BW4TMessage message) {
if (message.getRoom() == null) {
return "OK";
} else if (message.getRoom() != null) {
return "OK, room " + message.getRoom();
} else {
return null;
}
}
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
if (message.getRoom() == null) {
return new Identifier("ok");
} else {
return new Function("ok", new Identifier(message.getRoom()));
}
}
}
class CommandIDo implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("ido");
}
@Override
public String getString(BW4TMessage message) {
return "I do";
}
}
class CommandIDoNot implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("idont");
}
@Override
public String getString(BW4TMessage message) {
return "I don't";
}
}
class CommandWait implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("wait");
}
@Override
public String getString(BW4TMessage message) {
return "wait";
}
}
class CommandOnTheWay implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("ontheway");
}
@Override
public String getString(BW4TMessage message) {
return "I am on the way";
}
}
class CommandAlmostThere implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("almostthere");
}
@Override
public String getString(BW4TMessage message) {
return "I am almost there";
}
}
class CommandFarAway implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("faraway");
}
@Override
public String getString(BW4TMessage message) {
return "I am far away";
}
}
class CommandDelayed implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("delayed");
}
@Override
public String getString(BW4TMessage message) {
return "I am delayed";
}
}
class CommandIsAnybodyGoingToRoom implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("int", new Function("imp", new Function("in",
new Identifier("unknown"),
new Identifier(message.getRoom()))));
}
@Override
public String getString(BW4TMessage message) {
return "Is anybody going to room " + message.getRoom() + "?";
}
}
class CommandWhoHasABlock implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("int", new Function("holding", new Identifier(
"unknown"), new Identifier(message.getColor())));
}
@Override
public String getString(BW4TMessage message) {
return "Who has a " + message.getColor() + " block?";
}
}
class CommandWhereIsColor implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("int", new Function("at", new Identifier(
message.getColor()), new Identifier("unknown")));
}
@Override
public String getString(BW4TMessage message) {
return "Where is a " + message.getColor() + " block?";
}
}
class CommandWhatIsInRoom implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("int", new Function("at", new Identifier(
"unknown"), new Identifier(message.getRoom())));
}
@Override
public String getString(BW4TMessage message) {
return "What is in room " + message.getRoom() + "?";
}
}
class CommandHasAnybodyCheckedRoom implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("int", new Function("checked", new Identifier(
"unknown"), new Identifier(message.getRoom())));
}
@Override
public String getString(BW4TMessage message) {
return "Has anybody checked room " + message.getRoom() + "?";
}
}
class CommandWhoIsInRoom implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("int", new Function("in", new Identifier(
"unknown"), new Identifier(message.getRoom())));
}
@Override
public String getString(BW4TMessage message) {
return "Who is in room " + message.getRoom() + "?";
}
}
class CommandAreYouClose implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("int", new Function("areClose", new Identifier(
message.getPlayerId())));
}
@Override
public String getString(BW4TMessage message) {
return message.getPlayerId() + ", are you close?";
}
}
class CommandWillYouBeLong implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("int", new Function("willBeLong",
new Identifier(message.getPlayerId())));
}
@Override
public String getString(BW4TMessage message) {
return message.getPlayerId() + ", will you be long?";
}
}
class CommandWhereShouldIGo implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("int", new Function("imp", new Function("in",
new Identifier(entityId), new Identifier("unknown"))));
}
@Override
public String getString(BW4TMessage message) {
return "Where should I go?";
}
}
class CommandWhatColorShouldIGet implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("int", new Function("imp", new Function(
"holding", new Identifier(entityId), new Identifier(
"unknown"))));
}
@Override
public String getString(BW4TMessage message) {
return "What color should I get?";
}
}
class CommandGotoRoom implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("imp", new Function("in", new Identifier(
message.getPlayerId()), new Identifier(message.getRoom())));
}
@Override
public String getString(BW4TMessage message) {
return message.getPlayerId() + ", go to room " + message.getRoom();
}
}
class CommandFindColor implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("imp", new Function("found", new Identifier(
message.getPlayerId()), new Identifier(message.getColor())));
}
@Override
public String getString(BW4TMessage message) {
return message.getPlayerId() + ", find a " + message.getColor() + " block";
}
}
class CommandGetColorFromRoom implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("imp", new Function("pickedUpFrom",
new Identifier(message.getPlayerId()), new Identifier(
message.getColor()), new Identifier(
message.getRoom())));
}
@Override
public String getString(BW4TMessage message) {
return message.getPlayerId() + ", get the " + message.getColor()
+ " from room " + message.getRoom();
}
}
class CommandAtBox implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("atBox", new Identifier(message.getColor()));
}
@Override
public String getString(BW4TMessage message) {
return "I am at a " + message.getColor() + " block";
}
}
class CommandCouldNot implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("couldnot");
}
@Override
public String getString(BW4TMessage message) {
return "I couldn't";
}
}
class CommandPutDown implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("imp", new Function("putDown", new Identifier(
message.getPlayerId())));
}
@Override
public String getString(BW4TMessage message) {
return message.getPlayerId() + ", put down the block you are holding";
}
}
class CommandRoomContainsAmount implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Function("at", new Numeral(message.getNumber()),
new Identifier(message.getColor()), new Identifier(
message.getRoom()));
}
@Override
public String getString(BW4TMessage message) {
return "room " + message.getRoom() + " contains "
+ message.getNumber() + " " + message.getColor()
+ " blocks";
}
}
class CommandChecked implements MessageCommand {
@Override
public String getString(BW4TMessage message) {
if (message.getPlayerId() == null) {
return "room " + message.getRoom() + " has been checked";
} else {
return "room " + message.getRoom() + " has been checked by "
+ message.getPlayerId();
}
}
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
if (message.getPlayerId() == null) {
return new Function("checked",
new Identifier(message.getRoom()));
} else {
return new Function("checked", new Identifier(
message.getPlayerId()), new Identifier(
message.getRoom()));
}
}
}
class CommandEPartnerIWantToGo implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("IWantToGoTo TODO");
}
@Override
public String getString(BW4TMessage message) {
return "I want to go to " + message.getRoom();
}
}
class CommandEPartnerYouForgotMe implements MessageCommand {
@Override
public Parameter getParam(BW4TMessage message, String entityId) {
return new Identifier("YouForgotMe TODO");
}
@Override
public String getString(BW4TMessage message) {
return "You forgot me in " + message.getRoom();
}
}