void ShellCache::CPathFilter::Refresh() { excludelist.read(); includelist.read(); if ((excludeliststr.compare((tstring)excludelist) == 0) && (includeliststr.compare((tstring)includelist) == 0)) return; excludeliststr = (tstring)excludelist; includeliststr = (tstring)includelist; data.clear(); AddEntries(excludeliststr, false); AddEntries(includeliststr, true); PostProcessData(); }
void BroadPhase::GenerateCollisions() { int numPairs = bodies.size() * bodies.size(); memset(overlapMask, 0, sizeof(unsigned char) * maskByteSize); pairs.clear(); if (numPairs > maxPairs) ReallocateMask(); if (bodies.size() * 2 < entries[0].size()) { GenerateEntries(); } else if(newBodies.size() > 0) { UpdateEntries(); AddEntries(); //this way the newly added entries won't get updated since they will already be up to date } else { UpdateEntries(); } SortEntries(); indexActive.clear(); for (int i = 0; i < entries[first].size(); ++i) { if (entries[first][i].start) { indexActive.push_back(entries[first][i].index); for (int j = 0; j < indexActive.size() - 1; ++j) { SetMask(entries[first][i].index, indexActive[j], 0); } } else { for (int j = 0; j < indexActive.size(); ++j) { if (indexActive[j] == entries[first][i].index) indexActive.erase(indexActive.begin() + j); } } } for (int i = 0; i < entries[second].size(); ++i) { if (entries[second][i].start) { indexActive.push_back(entries[second][i].index); for (int j = 0; j < indexActive.size() - 1; ++j) { SetMask(entries[second][i].index, indexActive[j], 1); } } else { for (int j = 0; j < indexActive.size(); ++j) { if (indexActive[j] == entries[second][i].index) indexActive.erase(indexActive.begin() + j); } } } for (int i = 0; i < entries[third].size(); ++i) { if (entries[third][i].start) { indexActive.push_back(entries[third][i].index); for (int j = 0; j < indexActive.size() - 1; ++j) { if (CheckMask(entries[third][i].index, indexActive[j], 0) && CheckMask(entries[third][i].index, indexActive[j], 1)) { BroadPhasePair pair; pair.p1 = bodies[entries[third][i].index]; pair.p2 = bodies[indexActive[j]]; pair.p1->SetDebugColour(Vec4(1, 0, 0, 1)); pair.p2->SetDebugColour(Vec4(1, 0, 0, 1)); pairs.push_back(pair); } } } else { for (int j = 0; j < indexActive.size(); ++j) { if (indexActive[j] == entries[third][i].index) indexActive.erase(indexActive.begin() + j); } } } }