bool parse(int argc, char **argv, Args &args)
  {
    for (int i = 0; i < argc; ++i)
    {
      const char *opt = argv[i];

      if (strcmp("-T", opt) == 0 && i+1 < argc)
      {
        args.timestamp = (Timestamp) QByteArray(argv[++i]).toUInt(&args.hasTimestamp);
        if (!args.hasTimestamp || !validateTime(args.timestamp))
          return DEBUGRET(false, "invalid timestamp: " << argv[i]);
      }
      else if (strcmp("-K", opt) == 0 && i+1 < argc)
      {
        const char *token = argv[++i];
        args.token = token;
        if (!validateToken(token))
          return DEBUGRET(false, "invalid token: " << token);
      }
      else if ((strcmp("-E", opt) == 0 || strcmp("-G", opt) == 0) && i+1 < argc)
      {
        const char *name = argv[++i];
        if (!validateName(name))
          return DEBUGRET(false, "invalid name: " << name);
        args.person.isGuest = (strcmp("-G", opt) == 0);
        args.person.name = name;
        args.person.id = PersonID(0);
      }
      else if (strcmp("-A", opt) == 0)
      {
        args.mode = ArriveLeaveMode::Arrive;
      }
      else if (strcmp("-L", opt) == 0)
      {
        args.mode = ArriveLeaveMode::Leave;
      }
      else if (strcmp("-R", opt) == 0 && i+1 < argc)
      {
        args.room = (RoomID) QByteArray(argv[++i]).toUInt(&args.hasRoom);
        if (!args.hasRoom || !validateRoom(args.room))
          return false;
      }
      else if (*opt == '-') // unknown option
      {
        return DEBUGRET(false, "unknown option: " << opt);
      }
      else // log file
      {
        if (!args.path.isEmpty())
          return DEBUGRET(false, "path already specified");
        args.path = opt;
      }
    }

    // check mandatory values
    return (args.hasTimestamp && !args.token.isEmpty() && !args.person.name.isEmpty() &&
            args.mode != ArriveLeaveMode::None && !args.path.isEmpty());
  }
Example #2
0
File: room.cpp Project: vidarn/mgrl
bool
Room::validate(char *tiles, std::vector<CavernConnectivityPoint> &points, int id)
{
    if(!validateRoom(tiles)){
        return false;
    }
    for(unsigned int i=0;i<m_doors.size();i++){
        m_doors[i].roomID = id;
        points.push_back(m_doors[i]);
    }
    m_id = id;
    return true;
}
Example #3
0
int generateRoom(room_t* generatedRoom, room_t* rooms, int roomCount) {
    int generationTry = 0;
    room_t room;
    do {
        room.x = (uint8_t)(1 + rand() % (WIDTH - 2)); // 2 for the immutable border
        room.y = (uint8_t)(1 + rand() % (HEIGHT - 2));
        room.width = (uint8_t)(ROOM_WIDTH_MIN + rand() % (ROOM_WIDTH_MAX - ROOM_WIDTH_MIN));
        room.height = (uint8_t)(ROOM_HEIGHT_MIN + rand() % (ROOM_HEIGHT_MAX - ROOM_HEIGHT_MIN));
        if (generationTry++ >= 3000) {
            return -1;
        }
    } while (validateRoom(rooms, roomCount, room));
    *generatedRoom = room;
    return 0;
}