Exemplo n.º 1
0
    public static ParticleInfo FindParticle(string name)
    {
        name = ParticleInfo.UnifiedName(name);
        // use binary search; if there are equal names - return first particle
        var particles = Instance.particles;
        int min       = 0;
        int max       = particles.Count;
        int center    = 0;

        while (max != min)
        {
            center = (min + max) / 2;
            var comparison = string.CompareOrdinal(name, particles[center].name);
            if (comparison < 0)
            {
                max = center;
                continue;
            }
            if (comparison > 0)
            {
                min = center + 1;
                continue;
            }
            break;
        }
        if (min == max)
        {
            return(null);
        }
        // exact match was found
        int start = center - 1;

        while (start >= min && string.CompareOrdinal(name, particles[start].name) == 0)
        {
            start--;
        }
        return(particles[start + 1]); // we return first particle with this name
    }