void Gource::selectNextUser() { debugLog("selectNextUser()\n"); int currTagId = -1; if(selectedUser != 0) { currTagId = selectedUser->getTagID(); } RUser* newSelectedUser = 0; // find next user after this user for(std::map<int,RUser*>::iterator it = tagusermap.begin(); it != tagusermap.end(); it++) { RUser* user = it->second; if(!user->isInactive() && user->getTagID() > currTagId && user->getAlpha() >= 1.0) { newSelectedUser = user; break; } } // just get first user if(newSelectedUser == 0) { for(std::map<int,RUser*>::iterator it = tagusermap.begin(); it != tagusermap.end(); it++) { RUser* user = it->second; if(!user->isInactive() && user->getAlpha() >= 1.0) { newSelectedUser = user; break; } } } selectUser(newSelectedUser); }
void Gource::interactUsers() { // update quad tree Bounds2D quadtreebounds = user_bounds; quadtreebounds.min -= vec2f(1.0f, 1.0f); quadtreebounds.max += vec2f(1.0f, 1.0f); update_user_tree_time = SDL_GetTicks(); if(userTree != 0) delete userTree; int max_depth = 1; //dont use deep quad tree initially when all the nodes are in one place if(dir_bounds.area() > 10000.0) { max_depth = 6; } userTree = new QuadTree(quadtreebounds, max_depth, 1); for(std::map<std::string,RUser*>::iterator it = users.begin(); it!=users.end(); it++) { RUser* user = it->second; user->updateQuadItemBounds(); userTree->addItem(user); } //move users - interact with other users and files for(std::map<std::string,RUser*>::iterator ait = users.begin(); ait!=users.end(); ait++) { RUser* a = ait->second; std::set<int> seen; std::set<int>::iterator seentest; std::vector<QuadItem*> inbounds; int found = userTree->getItemsInBounds(inbounds, a->quadItemBounds); for(std::vector<QuadItem*>::iterator it = inbounds.begin(); it != inbounds.end(); it++) { RUser* b = (RUser*) (*it); if(b==a) continue; if((seentest = seen.find(b->getTagID())) != seen.end()) { continue; } seen.insert(b->getTagID()); a->applyForceUser(b); gGourceUserInnerLoops++; } a->applyForceToActions(); } update_user_tree_time = SDL_GetTicks() - update_user_tree_time; }