package nl.tudelft.bw4t.server.model.robots; import nl.tudelft.bw4t.map.EntityType; import nl.tudelft.bw4t.map.view.ViewEPartner; import nl.tudelft.bw4t.scenariogui.BotConfig; import nl.tudelft.bw4t.scenariogui.EPartnerConfig; import nl.tudelft.bw4t.server.model.BW4TServerMap; import nl.tudelft.bw4t.server.model.epartners.EPartner; import nl.tudelft.bw4t.server.model.robots.handicap.ColorBlindHandicap; import nl.tudelft.bw4t.server.model.robots.handicap.GripperHandicap; import nl.tudelft.bw4t.server.model.robots.handicap.Human; import nl.tudelft.bw4t.server.model.robots.handicap.IRobot; import nl.tudelft.bw4t.server.model.robots.handicap.SizeOverloadHandicap; /** * Creates the default entities. */ public class DefaultEntityFactory implements EntityFactory { /** * The context which we will be using. */ private BW4TServerMap serverMap; @Override public void setServerMap(BW4TServerMap serverMap) { this.serverMap = serverMap; } @Override public IRobot makeDefaultRobot(String name) { return new NavigatingRobot(name, serverMap, serverMap.getMap().getOneBotPerCorridorZone(), 1); } @Override public IRobot makeRobot(BotConfig config) { IRobot r = makeDefaultRobot(config.getBotName()); if (config.getColorBlindHandicap()) { r = new ColorBlindHandicap(r); } r = setGripperHandicap(config, r); if (config.getMoveSpeedHandicap()) { r.setSpeedMod((double) config.getBotSpeed() / 100.0); } if (config.getSizeOverloadHandicap()) { r = new SizeOverloadHandicap(r, config.getBotSize()); } if (config.getBotController() == EntityType.HUMAN) { r = new Human(r); } r = enableBattery(config, r); return r; } /** * Sets the gripper handicap * * @param config * file which needs to be read * @param r * robot * @return robot */ private IRobot setGripperHandicap(BotConfig config, IRobot r) { IRobot i = r; if (config.getGripperHandicap()) { i = new GripperHandicap(r); } else { // if the robot does not have a gripper handicap, it grabs the value set in the UI. i.setGripperCapacity(config.getGrippers()); } return i; } /** * enables the battery * * @param config * file which needs to be read. * @param r * robot * @return robot */ private IRobot enableBattery(BotConfig config, IRobot r) { IRobot i = r; if (config.isBatteryEnabled()) { i.setBattery(new Battery(config.getBotBatteryCapacity(), config.getBotBatteryDischargeRate())); } else { i.setBattery(new Battery(1, 0)); } return i; } @Override public EPartner makeDefaultEPartner(String name) { return new EPartner(name, serverMap); } @Override public EPartner makeEPartner(EPartnerConfig c) { EPartner ep = makeDefaultEPartner(c.getEpartnerName()); if (c.isGps()) { ep.getTypeList().add(ViewEPartner.GPS); } if (c.isForgetMeNot()) { ep.getTypeList().add(ViewEPartner.FORGET_ME_NOT); } return ep; } }