Пример #1
0
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();
}
Пример #2
0
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);
            }
        }
    }
}