I am writing an editor code to alter my own terrain system and need help getting it to recognize when I am clicking teh mouse button.
using UnityEngine;
using UnityEditor;
using System.Collections;
public class TerrainEditor : EditorWindow
{
public bool editVertices = true;
public bool editTextures = false;
public float gridLock = 0.5f;
public static bool showBrush = true;
public static string brushRadius = "5";
public static string mouseOver = "Nothing";
public static GameObject mouseBoundsPosition;
public static SceneView view;
public static GameObject[] Cells;
void OnInspectorUpdate()
{
if (mouseOverWindow) mouseOverWindow.Focus();
Repaint();
}
[MenuItem("Heightmap/Terrain Editor %#e")]
public static void Init()
{
ClearTempFiles();
GameObject tempFolder = new GameObject();
tempFolder.name = "Temp Folder";
tempFolder.tag = "Temporary";
tempFolder.transform.parent = GameObject.FindGameObjectWithTag(TerrainSystem.worldTag).transform;
mouseBoundsPosition = new GameObject();
mouseBoundsPosition.name = "Temp Mouse";
mouseBoundsPosition.tag = "Temporary";
mouseBoundsPosition.transform.parent = tempFolder.transform;
mouseBoundsPosition.AddComponent<SphereCollider>();
TerrainEditor editorWindow = (TerrainEditor)GetWindow(typeof(TerrainEditor), false, "Terrain Editor");
SceneView.onSceneGUIDelegate += OnScene;
editorWindow.Show();
}
void OnGUI()
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("Map Editor");
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
brushRadius = GUILayout.TextField(brushRadius, 2);
showBrush = GUILayout.Toggle(showBrush, "Show Brush");
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
editVertices = GUILayout.Toggle(editVertices, "Edit Terrain");
EditorGUILayout.EndHorizontal();
}
public static void OnScene(SceneView sceneview)
{
Cells = GameObject.FindGameObjectsWithTag(TerrainSystem.cellTag);
if (Cells.Length > 0)
{
if (showBrush)
{
view = SceneView.currentDrawingSceneView;
if (view != null)
{
view.rotation = Quaternion.Euler(90, 0, 0);
}
HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive));
Ray worldRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
RaycastHit hitInfo;
if (Physics.Raycast(worldRay, out hitInfo))
{
if (hitInfo.transform.tag == TerrainSystem.cellTag)
{
Vector3 mousePosition = hitInfo.point;
float radius = (float.Parse(brushRadius));
Handles.color = Color.blue;
Handles.DrawWireDisc(mousePosition, Vector3.up, radius);
mouseBoundsPosition.transform.position = mousePosition;
Bounds mouseBounds = mouseBoundsPosition.GetComponent<SphereCollider>().bounds;
mouseBounds.Expand(radius / 2);
foreach (GameObject cell in Cells)
{
if (mouseBounds.Intersects(cell.GetComponent<MeshCollider>().bounds))
{
Mesh mesh = cell.GetComponent<MeshFilter>().sharedMesh;
Vector3[] verts = mesh.vertices;
if (Input.GetMouseButton(0) == true)
{
Debug.Log("working");
for (int i = 0; i <= verts.Length; i++)
{
if (mouseBounds.Contains(verts[i]))
{
Vector3 newPosition = new Vector3(verts[i].x, verts[i].y + 1, verts[i].z);
verts[i] = newPosition;
mesh.vertices = verts;
mesh.RecalculateBounds();
mesh.RecalculateNormals();
}
}
}
}
}
}
}
}
}
else ErrorCodeT.x003b();
}
public void OnDestroy()
{
SceneView.onSceneGUIDelegate -= OnScene;
ClearTempFiles();
}
public static void ClearTempFiles()
{
GameObject[] tempFiles = GameObject.FindGameObjectsWithTag("Temporary");
foreach (GameObject tempFile in tempFiles)
{
DestroyImmediate(tempFile);
}
}
}