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(); } }
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 void Start() { Vector3 posLocal = EditWindow.MouseGlobalToLocal(Input.mousePosition); for (int i = 0; i < lastPosition.Length; i++) { lastPosition[i] = posLocal; } }
private void UpdateButton(int btn) { var mousePosLocal = EditWindow.MouseGlobalToLocal(Input.mousePosition); if (EditWindow.MouseInEditWindow) { if (Input.GetMouseButtonDown(btn)) { Cursor.lockState = CursorLockMode.Confined; FireMouseDown(mousePosLocal, btn); mouseButtonDown[btn] = true; mouseButtonMoved[btn] = false; mouseDownPosition[btn] = mousePosLocal; } } if (Input.GetMouseButtonUp(btn)) { Cursor.lockState = CursorLockMode.None; FireMouseUp(mousePosLocal, btn, EditWindow.MouseInEditWindow); if (EditWindow.MouseInEditWindow && mouseButtonDown[btn] && !mouseButtonMoved[btn]) { FireClick(mousePosLocal, btn); } mouseButtonDown[btn] = false; if (isDragging[btn]) { FireEndDrag(mousePosLocal, btn); isDragging[btn] = false; } } if (Input.GetMouseButton(btn)) { if (isDragging[btn]) { //var offset = new Vector3(Input.GetAxis("Mouse X") * 5, Input.GetAxis("Mouse Y") * 5, 0); var offset = mousePosLocal - lastPosition[btn]; FireDrag(lastPosition[btn], mousePosLocal, offset, btn); } else if (mouseButtonDown[btn] && EditWindow.IsInEditWindow(mouseDownPosition[btn])) //only start drag if mouse down position was inside window { var offsetSinceDown = mousePosLocal - mouseDownPosition[btn]; var distanceSinceDown = offsetSinceDown.magnitude; if (distanceSinceDown >= distanceTillDrag) { mouseButtonMoved[btn] = true; FireBeginDrag(mouseDownPosition[btn], btn); isDragging[btn] = true; FireDrag(mouseDownPosition[btn], mousePosLocal, offsetSinceDown, btn); } } } lastPosition[btn] = mousePosLocal; }
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(); } }