private PickMode PickTriangle(PickMode pickMode) { if (Camera.current == null) { return(PickMode.Undecided); } Ray pickRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); int hitTriIndex = -1; if (RaycastUtil.Raycast(targetMeshCollider, pickRay, out hitTriIndex, 10000.0f)) { if (currentHullPainter.paintingData.HasActiveHull()) { Hull hull = currentHullPainter.paintingData.GetActiveHull(); if (pickMode == PickMode.Additive) { if (!hull.selectedFaces.Contains(hitTriIndex)) { hull.selectedFaces.Add(hitTriIndex); } PickArea(targetMeshCollider, hull, Event.current.mousePosition, true); return(PickMode.Additive); } else if (pickMode == PickMode.Subtractive) { hull.selectedFaces.Remove(hitTriIndex); PickArea(targetMeshCollider, hull, Event.current.mousePosition, false); return(PickMode.Subtractive); } else if (pickMode == PickMode.Undecided) { if (hull.selectedFaces.Contains(hitTriIndex)) { hull.selectedFaces.Remove(hitTriIndex); PickArea(targetMeshCollider, hull, Event.current.mousePosition, false); return(PickMode.Subtractive); } else { hull.selectedFaces.Add(hitTriIndex); PickArea(targetMeshCollider, hull, Event.current.mousePosition, true); return(PickMode.Additive); } } } } return(PickMode.Undecided); }
private void CameraLookEvents() { // first person camera var cam = Camera.main.transform; KeyValuePair <bool, RaycastHit> hitInfo = RaycastUtil.AABB(new Ray(cam.position, cam.forward), 3F); BlockInfo raycast = null; if (!hitInfo.Key) { return; } if (MasterEngine.getInstance().getVoxelEngine().raycastHasVoxel(hitInfo.Value)) { raycast = MasterEngine.getInstance().getVoxelEngine().getVoxelInfo(hitInfo.Value, 3f, false); } if (raycast != null) { // create a local copy of the hit voxel so we can call functions on it GameObject voxelObject = Instantiate(MasterEngine.getInstance().GetVoxelGameObject(raycast.GetVoxel())) as GameObject; // only execute this if the voxel actually has any events (either VoxelEvents component, or any component that inherits from it) if (voxelObject.GetComponent <VoxelEvents>() != null) { voxelObject.GetComponent <VoxelEvents>().OnLook(raycast); // for all mouse buttons, send events for (int i = 0; i < 3; i++) { if (Input.GetMouseButtonDown(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseDown(i, raycast); } if (Input.GetMouseButtonUp(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseUp(i, raycast); } if (Input.GetMouseButton(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseHold(i, raycast); } } } Destroy(voxelObject); } else { // disable selected block ui when no block is hit if (SelectedBlockGraphics != null) { SelectedBlockGraphics.GetComponent <Renderer>().enabled = false; } } }
private void MouseCursorEvents() { // cursor position KeyValuePair <bool, RaycastHit> hitInfo = RaycastUtil.AABB(Camera.main.ScreenPointToRay(Input.mousePosition), 2F); //Vector3 pos = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 10.0f); BlockInfo raycast = null; if (MasterEngine.getInstance().getVoxelEngine().raycastHasVoxel(hitInfo.Value)) { raycast = MasterEngine.getInstance().getVoxelEngine().getVoxelInfo(hitInfo.Value, 2F, false); } if (raycast != null) { // create a local copy of the hit voxel so we can call functions on it GameObject voxelObject = Instantiate(MasterEngine.getInstance().GetVoxelGameObject(raycast.GetVoxel())) as GameObject; // only execute this if the voxel actually has any events (either VoxelEvents component, or any component that inherits from it) if (voxelObject.GetComponent <VoxelEvents>() != null) { voxelObject.GetComponent <VoxelEvents>().OnLook(raycast); // for all mouse buttons, send events for (int i = 0; i < 3; i++) { if (Input.GetMouseButtonDown(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseDown(i, raycast); } if (Input.GetMouseButtonUp(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseUp(i, raycast); } if (Input.GetMouseButton(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseHold(i, raycast); } } } Destroy(voxelObject); } else { // disable selected block ui when no block is hit if (SelectedBlockGraphics != null) { SelectedBlockGraphics.GetComponent <Renderer>().enabled = false; } } }
private void PickArea(MeshCollider targetMeshCollider, Hull hull, Vector2 clickPos, bool asAdditive) { int range = GetBrushPixelSize(); int numRays = range + 1; for (int i = 0; i < numRays; i++) { Vector2 jitteredPos; if (i == 0) { jitteredPos = clickPos; } else { jitteredPos = new Vector2(clickPos.x + Random.Range(-range, range), clickPos.y + Random.Range(-range, range)); } Ray pickRay = HandleUtility.GUIPointToWorldRay(jitteredPos); int hitTriIndex = -1; if (RaycastUtil.Raycast(targetMeshCollider, pickRay, out hitTriIndex, 10000.0f)) { if (asAdditive) { if (!hull.selectedFaces.Contains(hitTriIndex)) { hull.selectedFaces.Add(hitTriIndex); } } else { hull.selectedFaces.Remove(hitTriIndex); } } } }
public bool DoMouseDown(PickMode initialMode) { if (currentToolSelection == ToolSelection.TrianglePainting) { if (targetMeshCollider != null) { if (currentHullPainter != null && currentHullPainter.paintingData != null) { Undo.RecordObject(currentHullPainter.paintingData, "Paint Hull"); pickMode = PickTriangle(initialMode); if (pickMode != PickMode.Undecided) { // Debug.Log ("Start drag"); Sync(); EditorUtility.SetDirty(currentHullPainter.paintingData); isSelectingFaces = true; return(true); } else { // Debug.Log ("Abandon drag"); } } else { // This can happen when unity triggers scene callbacks in an odd order and the currentHullPainter isn't set yet // Debug.LogError("SceneManipulator has no currentHullPainter!"); } } else { Debug.Log("Mouse down but no targetMeshCollider, ignoring"); } } else if (currentToolSelection == ToolSelection.Pipette) { // Raycast against the target mesh collider and see if the triangle we hit is in any current hull bool anyFound = false; Ray pickRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); int hitTriIndex = -1; if (targetMeshCollider != null && RaycastUtil.Raycast(targetMeshCollider, pickRay, out hitTriIndex, 10000.0f)) { for (int i = 0; i < currentHullPainter.paintingData.hulls.Count; i++) { Hull hull = currentHullPainter.paintingData.hulls[i]; if (hull.selectedFaces.Contains(hitTriIndex)) { // Now painting this hull! currentHullPainter.paintingData.activeHull = i; currentToolSelection = ToolSelection.TrianglePainting; anyFound = true; break; } } } if (!anyFound) { currentToolSelection = ToolSelection.TrianglePainting; currentHullPainter.paintingData.activeHull = -1; } } return(false); }
private bool ToucheMurDroite() { Bounds bounds = _collider.bounds; return(RaycastUtil.TesterCollision2D(bounds.center, Vector2.right, bounds.extents.x, layerSol)); }
private bool EstSurLeSol() { Bounds bounds = _collider.bounds; return(RaycastUtil.TesterCollision2D(bounds.center, Vector2.down, bounds.extents.y, layerSol)); }