// Update is called once per frame
    void Update()
    {
        collisions.Clear();
        for (int i = 0; i < particles.Count; i++)
        {
            particles[i].ResetCollidingChecker();
            particles[i].GetComponent <Renderer>().material.SetColor("_Color", Color.red);
        }

        // Iterate through all particles
        for (int x = 0; x < particles.Count; x++)
        {
            for (int y = 0; y < particles.Count; y++)
            {
                // If the one being checked equal to itself?
                if (x != y && (particles[x].transform.parent != particles[y].transform.parent || particles[x].transform.parent == null))
                {
                    CollisionPairKey3D key = new CollisionPairKey3D(particles[y].collisionType, particles[x].collisionType);

                    CollisionInfo collision;

                    if (particles[x].collisionType > particles[y].collisionType)
                    {
                        collision = _collisionTypeCollisionTestFunctions[key](particles[y], particles[x]);
                    }
                    else
                    {
                        collision = _collisionTypeCollisionTestFunctions[key](particles[x], particles[y]);
                    }


                    if (collision != null)
                    {
                        bool isDuplicate = false;
                        for (int i = 0; i < collisions.Count; i++)
                        {
                            if ((collisions[i].a == particles[y] && collisions[i].b == particles[x]) || (collisions[i].a == particles[x] && collisions[i].b == particles[y]))
                            {
                                isDuplicate = true;
                            }
                        }

                        if (!isDuplicate)
                        {
                            collision.a.GetComponent <Renderer>().material.SetColor("_Color", Color.green);
                            collision.b.GetComponent <Renderer>().material.SetColor("_Color", Color.green);

                            collisions.Add(collision);
                        }
                    }
                }
            }
        }
        //CollisionResolution.ResolveCollisions(collisions,Time.deltaTime);
    }
    // Update is called once per frame
    void Update()
    {
        collisions.Clear();
        for (int i = 0; i < particles.Count; i++)
        {
            if (particles[i] != null)
            {
                particles[i].ResetCollidingChecker();
                particles[i].ResetColliding();
                particles[i].GetComponent <Particle3D>().collidingGameObject = null;
            }
        }

        // Iterate through all particles
        for (int x = 0; x < particles.Count; x++)
        {
            for (int y = 0; y < particles.Count; y++)
            {
                if (particles[x] != null && particles[y] != null)
                {
                    // If the one being checked equal to itself?
                    if (x != y && (particles[x].transform.parent != particles[y].transform.parent || particles[x].transform.parent == null))
                    {
                        CollisionPairKey3D key = new CollisionPairKey3D(particles[y].collisionType, particles[x].collisionType);

                        CollisionInfo collision;

                        if (particles[x].collisionType > particles[y].collisionType)
                        {
                            collision = _collisionTypeCollisionTestFunctions[key](particles[y], particles[x]);
                        }
                        else
                        {
                            collision = _collisionTypeCollisionTestFunctions[key](particles[x], particles[y]);
                        }


                        if (collision != null)
                        {
                            if ((collision.a.GetComponent <Particle3D>().isCharacterController&& !collision.a.GetComponent <Particle3D>().isUsingGravity) || (collision.b.GetComponent <Particle3D>().isCharacterController&& !collision.b.GetComponent <Particle3D>().isUsingGravity))
                            {
                            }
                            else
                            {
                                if (collision.a.GetComponent <WindZoneScript>() != null)
                                {
                                    collision.b.GetComponent <Particle3D>().AddForce(collision.a.GetComponent <WindZoneScript>().force);
                                }
                                else if (collision.b.GetComponent <WindZoneScript>() != null)
                                {
                                    collision.a.GetComponent <Particle3D>().AddForce(collision.b.GetComponent <WindZoneScript>().force);
                                }


                                bool isDuplicate = false;
                                for (int i = 0; i < collisions.Count; i++)
                                {
                                    if ((collisions[i].a == particles[y] && collisions[i].b == particles[x]) || (collisions[i].a == particles[x] && collisions[i].b == particles[y]))
                                    {
                                        isDuplicate = true;
                                    }
                                }

                                if (!isDuplicate)
                                {
                                    collisions.Add(collision);
                                }
                            }
                        }
                    }
                }
            }
        }
        CollisionResolution3D.ResolveCollisions(collisions, Time.deltaTime);
    }