using UnityEngine; using System.Collections; namespace EzySlice { /** * Define Extension methods for easy access to slicer functionality */ public static class SlicerExtensions { /** * SlicedHull Return functions and appropriate overrides! */ public static SlicedHull Slice (this GameObject obj, Plane pl, Material crossSectionMaterial = null) { return Slice (obj, pl, new TextureRegion (0.0f, 0.0f, 1.0f, 1.0f), crossSectionMaterial); } public static SlicedHull SliceObject (this GameObject obj, Vector3 position, Vector3 direction, Material crossSectionMaterial = null) { return Slice (obj, position, direction, new TextureRegion (0.0f, 0.0f, 1.0f, 1.0f), crossSectionMaterial); } public static SlicedHull Slice (this GameObject obj, Vector3 position, Vector3 direction, TextureRegion textureRegion, Material crossSectionMaterial = null) { Plane cuttingPlane = new Plane (); Vector3 refUp = obj.transform.InverseTransformDirection (direction); Vector3 refPt = obj.transform.InverseTransformPoint (position); cuttingPlane.Compute (refPt, refUp); return Slice (obj, cuttingPlane, textureRegion, crossSectionMaterial); } public static SlicedHull Slice (this GameObject obj, Plane pl, TextureRegion textureRegion, Material crossSectionMaterial = null) { return Slicer.Slice (obj, pl, textureRegion, crossSectionMaterial); } /** * These functions (and overrides) will return the final indtaniated GameObjects types */ public static GameObject[] SliceInstantiate (this GameObject obj, Plane pl) { return SliceInstantiate (obj, pl, new TextureRegion (0.0f, 0.0f, 1.0f, 1.0f)); } public static GameObject[] SliceInstantiate (this GameObject obj, Vector3 position, Vector3 direction) { return SliceInstantiate (obj, position, direction, null); } public static GameObject[] SliceInstantiate (this GameObject obj, Vector3 position, Vector3 direction, Material crossSectionMat) { return SliceInstantiate (obj, position, direction, new TextureRegion (0.0f, 0.0f, 1.0f, 1.0f), crossSectionMat); } public static GameObject[] SliceInstantiate (this GameObject obj, Vector3 position, Vector3 direction, TextureRegion cuttingRegion, Material crossSectionMaterial = null) { EzySlice.Plane cuttingPlane = new EzySlice.Plane (); Vector3 refUp = obj.transform.InverseTransformDirection (direction); Vector3 refPt = obj.transform.InverseTransformPoint (position); cuttingPlane.Compute (refPt, refUp); return SliceInstantiate (obj, cuttingPlane, cuttingRegion, crossSectionMaterial); } public static GameObject[] SliceInstantiate (this GameObject obj, Plane pl, TextureRegion cuttingRegion, Material crossSectionMaterial = null) { SlicedHull slice = Slicer.Slice (obj, pl, cuttingRegion, crossSectionMaterial); if (slice == null) { return null; } GameObject upperHull = slice.CreateUpperHull (obj, crossSectionMaterial); GameObject lowerHull = slice.CreateLowerHull (obj, crossSectionMaterial); if (upperHull != null && lowerHull != null) { return new GameObject[] { upperHull, lowerHull }; } // otherwise return only the upper hull if (upperHull != null) { return new GameObject[] { upperHull }; } // otherwise return only the lower hull if (lowerHull != null) { return new GameObject[] { lowerHull }; } // nothing to return, so return nothing! return null; } } }