private void DrawTilableMeshGUI() { if (!isEditingTileIndices) { EditorGUI.BeginChangeCheck(); //water.MeshType = (PWaterMeshType)EditorGUILayout.EnumPopup("Mesh Type", water.MeshType); water.MeshType = (PWaterMeshType)EditorGUILayout.IntPopup("Mesh Type", (int)water.MeshType, meshTypeLabels, meshTypes); water.PlanePattern = (PPlaneMeshPattern)EditorGUILayout.EnumPopup("Pattern", water.PlanePattern); water.MeshResolution = EditorGUILayout.DelayedIntField("Resolution", water.MeshResolution); if (EditorGUI.EndChangeCheck()) { water.GenerateMesh(); water.ReCalculateBounds(); } water.MeshNoise = EditorGUILayout.FloatField("Noise", water.MeshNoise); EditorGUI.BeginChangeCheck(); water.TileSize = PEditorCommon.InlineVector2Field("Tile Size", water.TileSize); water.TilesFollowMainCamera = EditorGUILayout.Toggle("Follow Main Camera", water.TilesFollowMainCamera); SerializedObject so = new SerializedObject(water); SerializedProperty sp = so.FindProperty("tileIndices"); if (sp != null) { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(sp, true); if (EditorGUI.EndChangeCheck()) { so.ApplyModifiedProperties(); } } sp.Dispose(); so.Dispose(); if (EditorGUI.EndChangeCheck()) { water.ReCalculateBounds(); } } if (!isEditingTileIndices) { if (GUILayout.Button("Edit Tiles")) { isEditingTileIndices = true; } } else { EditorGUILayout.LabelField("Edit water tiles in Scene View.", PEditorCommon.WordWrapItalicLabel); if (GUILayout.Button("End Editing Tiles")) { isEditingTileIndices = false; } } }
private void OnEnable() { water = target as PWater; if (water.Profile != null) { water.ReCalculateBounds(); } tileEditingGUIDrawer = new PTilesEditingGUIDrawer(water); areaEditingGUIDrawer = new PAreaEditingGUIDrawer(water); splineEditingGUIDrawer = new PSplineEditingGUIDrawer(water); SceneView.duringSceneGui += DuringSceneGUI; }
private void HandleAddRemoveTiles() { Plane plane = new Plane(Vector3.up, water.transform.position); Ray r = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); float distance = -1; if (plane.Raycast(r, out distance)) { Vector3 hitWorldPos = r.origin + r.direction * distance; Vector3 hitLocalPos = water.transform.InverseTransformPoint(hitWorldPos); PIndex2D index = new PIndex2D( Mathf.FloorToInt(hitLocalPos.x / water.TileSize.x), Mathf.FloorToInt(hitLocalPos.z / water.TileSize.y)); Vector3 rectCenter = water.transform.TransformPoint(new Vector3( (index.X + 0.5f) * water.TileSize.x, hitLocalPos.y, (index.Z + 0.5f) * water.TileSize.y)); Vector3 rectSize = water.transform.TransformVector(new Vector3( water.TileSize.x, 0, water.TileSize.y)); if (Event.current.type == EventType.MouseDrag || Event.current.type == EventType.MouseUp) { if (Event.current.button != 0) { return; } if (Event.current.control) { water.TileIndices.Remove(index); water.ReCalculateBounds(); } else if (Event.current.shift) { if (!water.TileIndices.Contains(index)) { water.TileIndices.Add(index); water.ReCalculateBounds(); } } PUtilities.MarkCurrentSceneDirty(); EditorUtility.SetDirty(water); } Handles.color = Handles.selectedColor; Handles.DrawWireCube(rectCenter, rectSize); string s = string.Format( "{0}" + "{1}" + "{2}", index.ToString(), "\nShift+Click to pin, Ctrl+Click to unpin water planes.", "\nClick End Editing Tiles when done."); GUIContent mouseMessage = new GUIContent(s); PEditorCommon.SceneViewMouseMessage(mouseMessage); } }