private void AddCharHoles(PolygonCollider2D navPoly, AC.Char charToExclude, CharacterEvasion characterEvasion)
        {
            ResetHoles (KickStarter.sceneSettings.navMesh, false);

            Vector2 navPosition = navPoly.transform.position;
            AC.Char[] characters = GameObject.FindObjectsOfType (typeof (AC.Char)) as AC.Char[];

            foreach (AC.Char character in characters)
            {
                CircleCollider2D circleCollider2D = character.GetComponent <CircleCollider2D>();
                if (circleCollider2D != null &&
                    (character.charState == CharState.Idle || characterEvasion == CharacterEvasion.AllCharacters) &&
                    (charToExclude == null || character != charToExclude) &&
                    Physics2D.OverlapPointNonAlloc (character.transform.position, NavigationEngine_PolygonCollider.results, 1 << KickStarter.sceneSettings.navMesh.gameObject.layer) != 0)
                {
                    circleCollider2D.isTrigger = true;
                    List<Vector2> newPoints3D = new List<Vector2>();

                    #if UNITY_5
                    Vector2 centrePoint = character.transform.TransformPoint (circleCollider2D.offset);
                    #else
                    Vector2 centrePoint = character.transform.TransformPoint (circleCollider2D.center);
                    #endif

                    float radius = circleCollider2D.radius * character.transform.localScale.x;

                    newPoints3D.Add (centrePoint + Vector2.up * radius);
                    newPoints3D.Add (centrePoint + Vector2.right * radius);
                    newPoints3D.Add (centrePoint - Vector2.up * radius);
                    newPoints3D.Add (centrePoint - Vector2.right * radius);

                    navPoly.pathCount ++;

                    List<Vector2> newPoints = new List<Vector2>();
                    for (int i=0; i<newPoints3D.Count; i++)
                    {
                        // Only add a point if it is on the NavMesh
                        if (Physics2D.OverlapPointNonAlloc (newPoints3D[i], NavigationEngine_PolygonCollider.results, 1 << KickStarter.sceneSettings.navMesh.gameObject.layer) != 0)
                        {
                            newPoints.Add (newPoints3D[i] - navPosition);
                        }
                        else
                        {
                            Vector2 altPoint = GetLineIntersect (newPoints3D[i], centrePoint);
                            if (altPoint != Vector2.zero)
                            {
                                newPoints.Add (altPoint - navPosition);
                            }
                        }
                    }

                    if (newPoints.Count > 1)
                    {
                        navPoly.SetPath (navPoly.pathCount-1, newPoints.ToArray ());
                    }
                }
            }

            RebuildVertexArray (navPoly.transform, navPoly);
        }
        private void AddCharHoles(PolygonCollider2D navPoly, AC.Char charToExclude, CharacterEvasion characterEvasion)
        {
            ResetHoles(KickStarter.sceneSettings.navMesh, false);

            Vector2 navPosition = navPoly.transform.position;

            AC.Char[] characters = GameObject.FindObjectsOfType(typeof(AC.Char)) as AC.Char[];

            foreach (AC.Char character in characters)
            {
                CircleCollider2D circleCollider2D = character.GetComponent <CircleCollider2D>();
                if (circleCollider2D != null &&
                    (character.charState == CharState.Idle || characterEvasion == CharacterEvasion.AllCharacters) &&
                    (charToExclude == null || character != charToExclude) &&
                    Physics2D.OverlapPointNonAlloc(character.transform.position, NavigationEngine_PolygonCollider.results, 1 << KickStarter.sceneSettings.navMesh.gameObject.layer) != 0)
                {
                    circleCollider2D.isTrigger = true;
                    List <Vector2> newPoints3D = new List <Vector2>();

                                        #if UNITY_5
                    Vector2 centrePoint = character.transform.TransformPoint(circleCollider2D.offset);
                                        #else
                    Vector2 centrePoint = character.transform.TransformPoint(circleCollider2D.center);
                                        #endif

                    float radius = circleCollider2D.radius * character.transform.localScale.x;

                    newPoints3D.Add(centrePoint + Vector2.up * radius);
                    newPoints3D.Add(centrePoint + Vector2.right * radius);
                    newPoints3D.Add(centrePoint - Vector2.up * radius);
                    newPoints3D.Add(centrePoint - Vector2.right * radius);

                    navPoly.pathCount++;

                    List <Vector2> newPoints = new List <Vector2>();
                    for (int i = 0; i < newPoints3D.Count; i++)
                    {
                        // Only add a point if it is on the NavMesh
                        if (Physics2D.OverlapPointNonAlloc(newPoints3D[i], NavigationEngine_PolygonCollider.results, 1 << KickStarter.sceneSettings.navMesh.gameObject.layer) != 0)
                        {
                            newPoints.Add(newPoints3D[i] - navPosition);
                        }
                        else
                        {
                            Vector2 altPoint = GetLineIntersect(newPoints3D[i], centrePoint);
                            if (altPoint != Vector2.zero)
                            {
                                newPoints.Add(altPoint - navPosition);
                            }
                        }
                    }

                    if (newPoints.Count > 1)
                    {
                        navPoly.SetPath(navPoly.pathCount - 1, newPoints.ToArray());
                    }
                }
            }

            RebuildVertexArray(navPoly.transform, navPoly);
        }