/// <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()); }
public bool overlapsPoints(Vector2[] points) { PolyClipper clipper = new PolyClipper(); return(clipper.ClipPoly(this.points.ToArray(), points, ClipperLib.ClipType.ctIntersection).Count > 0); }