void Gource::updateUsers(float t, float dt) { std::vector<RUser*> inactiveUsers; int idle_users = 0; //recalc the user bounds user_bounds.reset(); // move users for(std::map<std::string,RUser*>::iterator it = users.begin(); it!=users.end(); it++) { RUser* u = it->second; u->logic(t, dt); //deselect user if fading out from inactivity if(u->isFading() && selectedUser == u) { selectUser(0); } if(u->isInactive()) { inactiveUsers.push_back(u); } if(u->isIdle()) { idle_users++; } else { user_bounds.update(u->getPos()); //if nothing is selected, and this user is active and this user is the specified user to follow, select them if(selectedUser == 0 && selectedFile == 0) { for(std::vector<std::string>::iterator ui = follow_users.begin(); ui != follow_users.end(); ui++) { std::string follow = *ui; if(follow.size() && u->getName() == follow) { selectUser(u); } } } } } //nothing is moving so increment idle if(idle_users==users.size()) { idle_time += dt; //if stop_on_idle is set and either no stop condition is set or the condition has been reached, exit if(stop_on_idle && (stop_position == 0.0f && !stop_at_end || stop_position_reached)) appFinished = true; } else { idle_time = 0; } // delete inactive users for(std::vector<RUser*>::iterator it = inactiveUsers.begin(); it != inactiveUsers.end(); it++) { deleteUser(*it); } }
void Gource::updateUsers(float t, float dt) { std::vector<RUser*> inactiveUsers; int idle_users = 0; //recalc the user bounds user_bounds.reset(); // move users for(std::map<std::string,RUser*>::iterator it = users.begin(); it!=users.end(); it++) { RUser* u = it->second; u->logic(t, dt); //deselect user if fading out from inactivity if(u->isFading() && selectedUser == u) { selectUser(0); } if(u->isInactive()) { inactiveUsers.push_back(u); } if(u->isIdle()) { idle_users++; } else { user_bounds.update(u->getPos()); //if nothing is selected, and this user is active and this user is the specified user to follow, select them if(selectedUser == 0 && selectedFile == 0) { for(std::vector<std::string>::iterator ui = follow_users.begin(); ui != follow_users.end(); ui++) { std::string follow = *ui; if(follow.size() && u->getName() == follow) { selectUser(u); } } } } } //nothing is moving so increment idle if(idle_users==static_cast<int>(users.size())) { idle_time += dt; } else { idle_time = 0.0f; } // delete inactive users for(std::vector<RUser*>::iterator it = inactiveUsers.begin(); it != inactiveUsers.end(); it++) { deleteUser(*it); } }
void Gource::updateBounds() { user_bounds.reset(); for(std::map<std::string,RUser*>::iterator it = users.begin(); it!=users.end(); it++) { RUser* u = it->second; if(!u->isIdle()) { user_bounds.update(u->getPos()); } } dir_bounds.reset(); for(std::map<std::string,RDirNode*>::iterator it = gGourceDirMap.begin(); it!=gGourceDirMap.end(); it++) { RDirNode* node = it->second; if(node->isVisible()) { dir_bounds.update(node->getPos()); } } }