private static void TransformHandles(SuperPlane aPlane, Vector3 rtb, Vector3 lbf) { Vector3 snap = EditorTools.GetUnitySnap(); EditorTools.capDir = Matrix4x4.TRS(Vector3.zero, aPlane.transform.rotation, Vector3.one); Handles.color = Color.Lerp(Color.red, Color.white, 0.5f); SuperCubeEditorUtil.Handle(PivotType.Right, aPlane.transform, true, false, false, snap, ref lbf, ref rtb, EditorTools.BarCapZ); SuperCubeEditorUtil.Handle(PivotType.Left, aPlane.transform, true, false, false, snap, ref lbf, ref rtb, EditorTools.BarCapZ); Handles.color = Color.Lerp(Color.blue, Color.white, 0.5f); SuperCubeEditorUtil.Handle(PivotType.Front, aPlane.transform, false, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapX); SuperCubeEditorUtil.Handle(PivotType.Back, aPlane.transform, false, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapX); Handles.color = Color.Lerp(Color.Lerp(Color.red, Color.white, 0.5f), Color.Lerp(Color.blue, Color.white, 0.5f), .5f); SuperCubeEditorUtil.Handle(PivotType.Back | PivotType.Right, aPlane.transform, true, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapXZ); SuperCubeEditorUtil.Handle(PivotType.Back | PivotType.Left, aPlane.transform, true, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapXZ); SuperCubeEditorUtil.Handle(PivotType.Front | PivotType.Right, aPlane.transform, true, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapXZ); SuperCubeEditorUtil.Handle(PivotType.Front | PivotType.Left, aPlane.transform, true, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapXZ); // Check if there was an edit, and update the mesh! Vector3 newExtents = new Vector3(Mathf.Abs(rtb.x - lbf.x), Mathf.Abs(rtb.y - lbf.y), Mathf.Abs(rtb.z - lbf.z)); if (aPlane.Extents != newExtents) { aPlane.transform.position += aPlane.transform.TransformDirection(lbf + new Vector3((rtb.x - lbf.x) / 2, (rtb.y - lbf.y) / 2, (rtb.z - lbf.z) / 2)); aPlane.Extents = newExtents; aPlane.Build(true); } }
private void CheckScale(SuperPlane aPlane) { if (aPlane != null && aPlane.transform.localScale != Vector3.one) { aPlane.Extents = new Vector3(aPlane.Extents.x * aPlane.transform.localScale.x, aPlane.Extents.y * aPlane.transform.localScale.y, aPlane.Extents.z * aPlane.transform.localScale.z); aPlane.transform.localScale = Vector3.one; aPlane.Build(true); } }
/// <summary> /// Creates a SuperPlane game object, and assigns the given data! This function will build the mesh right away. /// </summary> /// <param name="aAt">Location in world space.</param> /// <param name="aSize">The width and height of the SuperPlane.</param> /// <param name="aMaterial">The material to assign to it, don't want that awful pink color!</param> /// <param name="aType">What type of UV coordinates do you want on the plane?</param> /// <param name="aSliceDistance">How far apart should extra verts be spaced out on the surface? 0 for none at all. floor(size/sliceDistance)</param> /// <returns>A ready-to-go SuperPlane GameObject named "SuperPlane" with a with a fully built SuperPlane, MeshFilter, Renderer, and BoxCollider component!</returns> public static GameObject Create(Vector3 aAt, Vector2 aSize, Material aMaterial, UVType aType = UVType.Unit, float aSliceDistance = 0) { GameObject go = new GameObject("SuperPlane"); SuperPlane plane = go.AddComponent <SuperPlane>(); plane.mUVType = aType; plane.Extents = new Vector3(aSize.x, 0, aSize.y); plane.transform.position = aAt; if (aSliceDistance > 0) { plane.mSliceDistance = aSliceDistance; plane.mSliceFaces = true; } plane.Build(true); go.GetComponent <Renderer>().sharedMaterial = aMaterial; go.AddComponent <BoxCollider>(); return(go); }
private static void TransformHandles (SuperPlane aPlane, Vector3 rtb, Vector3 lbf) { Vector3 snap = EditorTools.GetUnitySnap(); EditorTools.capDir = Matrix4x4.TRS(Vector3.zero, aPlane.transform.rotation, Vector3.one); Handles.color = Color.Lerp(Color.red, Color.white, 0.5f); SuperCubeEditorUtil.Handle(PivotType.Right, aPlane.transform, true, false, false, snap, ref lbf, ref rtb, EditorTools.BarCapZ); SuperCubeEditorUtil.Handle(PivotType.Left, aPlane.transform, true, false, false, snap, ref lbf, ref rtb, EditorTools.BarCapZ); Handles.color = Color.Lerp(Color.blue, Color.white, 0.5f); SuperCubeEditorUtil.Handle(PivotType.Front, aPlane.transform, false, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapX); SuperCubeEditorUtil.Handle(PivotType.Back, aPlane.transform, false, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapX); Handles.color = Color.Lerp( Color.Lerp(Color.red, Color.white, 0.5f), Color.Lerp(Color.blue, Color.white, 0.5f), .5f); SuperCubeEditorUtil.Handle(PivotType.Back | PivotType.Right, aPlane.transform, true, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapXZ); SuperCubeEditorUtil.Handle(PivotType.Back | PivotType.Left, aPlane.transform, true, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapXZ); SuperCubeEditorUtil.Handle(PivotType.Front | PivotType.Right, aPlane.transform, true, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapXZ); SuperCubeEditorUtil.Handle(PivotType.Front | PivotType.Left, aPlane.transform, true, false, true, snap, ref lbf, ref rtb, EditorTools.BarCapXZ); // Check if there was an edit, and update the mesh! Vector3 newExtents = new Vector3(Mathf.Abs(rtb.x - lbf.x), Mathf.Abs(rtb.y - lbf.y), Mathf.Abs(rtb.z - lbf.z)); if (aPlane.Extents != newExtents) { aPlane.transform.position += aPlane.transform.TransformDirection(lbf + new Vector3((rtb.x - lbf.x) / 2, (rtb.y - lbf.y) / 2, (rtb.z - lbf.z) / 2)); aPlane.Extents = newExtents; aPlane.Build(true); } }