void Manual::solve( int mazeWidth, int mazeHeight, bool isOfficialMaze, char initialDirection, sim::MouseInterface* mouse) { sim::S()->setRotateZoomedMap(true); double accelerateAmount = 60.0; double decelerateAmount = 1.5; double leftWheelSpeed = 0.0; double rightWheelSpeed = 0.0; while (true) { leftWheelSpeed /= decelerateAmount; rightWheelSpeed /= decelerateAmount; if (sim::S()->arrowKeyIsPressed(sim::Key::UP)) { leftWheelSpeed -= accelerateAmount; rightWheelSpeed += accelerateAmount; } if (sim::S()->arrowKeyIsPressed(sim::Key::DOWN)) { leftWheelSpeed += accelerateAmount; rightWheelSpeed -= accelerateAmount; } if (sim::S()->arrowKeyIsPressed(sim::Key::RIGHT)) { leftWheelSpeed -= accelerateAmount / 4.0; rightWheelSpeed -= accelerateAmount / 4.0; } if (sim::S()->arrowKeyIsPressed(sim::Key::LEFT)) { leftWheelSpeed += accelerateAmount / 4.0; rightWheelSpeed += accelerateAmount / 4.0; } if (mouseFile() == "megaMouse.xml") { if (leftWheelSpeed < -mouse->getWheelMaxSpeed("left-upper")) { leftWheelSpeed = -mouse->getWheelMaxSpeed("left-upper"); } if (mouse->getWheelMaxSpeed("left-upper") < leftWheelSpeed) { leftWheelSpeed = mouse->getWheelMaxSpeed("left-upper"); } if (rightWheelSpeed < -mouse->getWheelMaxSpeed("right-upper")) { rightWheelSpeed = -mouse->getWheelMaxSpeed("right-upper"); } if (mouse->getWheelMaxSpeed("right-upper") < rightWheelSpeed) { rightWheelSpeed = mouse->getWheelMaxSpeed("right-upper"); } mouse->setWheelSpeed("left-upper", leftWheelSpeed); mouse->setWheelSpeed("left-lower", leftWheelSpeed); mouse->setWheelSpeed("right-upper", rightWheelSpeed); mouse->setWheelSpeed("right-lower", rightWheelSpeed); } else if (mouseFile() == "default.xml") { if (leftWheelSpeed < -mouse->getWheelMaxSpeed("left")) { leftWheelSpeed = -mouse->getWheelMaxSpeed("left"); } if (mouse->getWheelMaxSpeed("left") < leftWheelSpeed) { leftWheelSpeed = mouse->getWheelMaxSpeed("left"); } if (rightWheelSpeed < -mouse->getWheelMaxSpeed("right")) { rightWheelSpeed = -mouse->getWheelMaxSpeed("right"); } if (mouse->getWheelMaxSpeed("right") < rightWheelSpeed) { rightWheelSpeed = mouse->getWheelMaxSpeed("right"); } mouse->setWheelSpeed("left", leftWheelSpeed); mouse->setWheelSpeed("right", rightWheelSpeed); } mouse->delay(30); } }
void RecordManager::readFromMouseLog(string logDir,vector<EventRecord>& records) { string filePath = logDir + "mouse.txt"; ifstream mouseFile(filePath); string line; int recordNum = 0; Mat preImg; vector<string> afkTime; int totalAfk = 0; int totalNoAfk = 0; while(getline(mouseFile,line)) { EventRecord r; r.type = "MOUSE"; trim(line); r.timestamp = line; //mouse event getline(mouseFile,line); if(line == "NOT LOGGED APPLICATION") { r.mouseEvent = "Unknow"; r.processName = "Unknow"; r.windowName = "Unknow"; records.push_back(r); continue; } vector<string> sarray = split(line," "); int len = sarray.size(); r.mousePosition.x = stringToNumber<int>(sarray[len-2]); r.mousePosition.y = stringToNumber<int>(sarray[len-1]); r.mouseEvent = join(subvector(sarray, 0, len-2)," "); cout<<r.mouseEvent<<' '<<r.mousePosition.x<<' '<<r.mousePosition.y<<endl; //window getline(mouseFile,line); string::size_type pos1 = line.find_first_of(","); r.windowHwnd = line.substr(0,pos1); string::size_type pos2 = line.find_last_of("("); string::size_type pos3 = line.find_last_of(")"); string s = line.substr(pos2+1,pos3-pos2-1); sarray = split(s," "); int left = stringToNumber<int>(sarray[0]); int top = stringToNumber<int>(sarray[1]); int right = stringToNumber<int>(sarray[2]); int bottom = stringToNumber<int>(sarray[3]); if(left<0) { r.windowRect.x = 0; r.windowRect.width = right + left; } else { r.windowRect.x = left; r.windowRect.width = right - left; } if(top<0) { r.windowRect.y = 0; r.windowRect.height = bottom + top; } else { r.windowRect.y = top; r.windowRect.height = bottom - top; } r.windowName = line.substr(pos1+1,pos2-pos1-1); trim(r.windowName); //cout<<r.windowName<<endl; //process getline(mouseFile,line); string::size_type pos = line.find_last_of(" "); r.processName = line.substr(0,pos); r.processId = stringToNumber<long>(line.substr(pos+1)); //cout<<r.processName<<endl; //parent getline(mouseFile,line); r.parentName = line; //cout<<r.parentName<<endl; recordNum++; records.push_back(r); //if(recordNum>2000) break; } mouseFile.close(); }