Esempio n. 1
0
    /// <summary>
    /// Called by explosions to partially destroy this object.
    /// </summary>
    /// <param name="force"> Force to apply to this object </param>
    /// <param name="explosionPoints"> WORLD position of explosion points </param>
    /// <param name="clipType"> public enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor }; </param>
    public void ExplosionCut(Vector2 force, List <Vector2> explosionPoints, ClipType clipType = ClipType.ctDifference)
    {
        Transform ourTransform = gameObject.transform;


        PolyClipper clipper = new PolyClipper();

        Polygon          explosionPolygon = new Polygon(explosionPoints);
        List <Vector2[]> cutPolygons      = clipper.ClipPoly(polygon.points.ToArray(), explosionPolygon.getWorldToLocalPoints(this.transform).ToArray(), clipType);

        if (cutPolygons.Count == 0)
        {
            Destroy(this.gameObject);
            return;
        }

        //Update children copies before determining if self is anchored
        for (int i = 1; i < cutPolygons.Count; i++)
        {
            CreateCopy(cutPolygons[i]);
        }

        updateShape(cutPolygons[0]);
        determineAnchored(isAnchored());
    }
Esempio n. 2
0
        public bool overlapsPoints(Vector2[] points)
        {
            PolyClipper clipper = new PolyClipper();

            return(clipper.ClipPoly(this.points.ToArray(), points, ClipperLib.ClipType.ctIntersection).Count > 0);
        }