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()); }
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; }
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; }