private bool HandleClick(Vector3 localPos, int btn) { if (LevelEditor.EditState == EditState.Vertices && btn == EditWindowClickDetection.BTN_PRIMARY) { var ray = EditWindow.GetRayFromMousePosition(localPos); //raycast with vertices if (Physics.Raycast(ray, out RaycastHit hitInfo, float.MaxValue, vertexLayerMask)) { var vertex = hitInfo.transform.gameObject.GetComponent <EditableVertex>(); if (vertex != null) { Deselect(); currentlySelected = hitInfo.transform.gameObject; Gizmo_OLD.Attach(currentlySelected.transform, Vector3.zero); Gizmo_OLD.Visible = true; OnSelected.Invoke(vertex); return(true); } } else { Deselect(); } }
private bool HandleClick(Vector3 localPos, int btn) { if (LevelEditor.EditState == EditState.Vertices && btn == EditWindowClickDetection.BTN_PRIMARY) { var ray = EditWindow.GetRayFromMousePosition(localPos); //raycast with selectables if (Physics.Raycast(ray, out RaycastHit hitInfo, float.MaxValue, selectablesLayerMask)) { var selectable = hitInfo.transform.gameObject.GetComponent <Selectable>(); if (selectable != null) { if (Selection.Count > 0) { if (Selection.SelectedObjects.First() != selectable) { Selection.Clear(); Selection.Add(selectable); } } Gizmo.Instance.Visible = true; return(true); } } else { Deselect(); } }
bool HandleBeginDrag(Vector3 localPos, int btn) { if (LevelEditor.EditState == EditState.Vertices && btn == EditWindowClickDetection.BTN_PRIMARY) { var ray = EditWindow.GetRayFromMousePosition(localPos); if (Physics.Raycast(ray, out RaycastHit hit, float.PositiveInfinity, gizmoLayerMask)) { dragObject = hit.transform.gameObject; if (dragObject == moveX || dragObject == moveY || dragObject == moveZ) { virtualPosition = transform.position; dragging = true; return(true); } } } return(false); }
private bool HandleClick(Vector3 localPos, int btn) { if (LevelEditor.EditState == EditState.Polygons && btn == EditWindowClickDetection.BTN_PRIMARY) { var ray = EditWindow.GetRayFromMousePosition(localPos); //raycast with levelmeshes to see what polygon was clicked if (Physics.Raycast(ray, out RaycastHit hitInfo, float.MaxValue, polygonsLayerMask)) { var mesh = hitInfo.transform.gameObject.GetComponent <MaterialMesh>(); if (mesh != null) { var primitive = mesh.GetByTriangleIndex(hitInfo.triangleIndex); if (primitive != null) { Deselect(); //remove newly selected from mesh mesh.RemovePrimitive(primitive); mesh.UpdateMesh(); var go = new GameObject(); currentlySelected = go; go.transform.SetParent(mesh.gameObject.transform); go.transform.localPosition = Vector3.zero; go.transform.localScale = Vector3.one; var editablePrimitive = go.AddComponent <EditablePrimitive>(); editablePrimitive.UpdatePrimitive(primitive, mesh.EditorMaterial); OnSelected.Invoke(editablePrimitive); } else { Debug.LogWarning("primitive is null for " + hitInfo.triangleIndex); } } return(true); } else { Deselect(); } }