void _interactableObject_MouseClicked(MouseCollider target) { if (!EventSystem.current.IsPointerOverGameObject()) { TriggerEvent(); } }
void _interactableObject_MouseLeft(MouseCollider target) { TriggerEvent(); }
// Update is called once per frame void Update() { //Keep track of mouse position here screenMousePosition = Input.mousePosition; worldMousePosition = activeCamera.ScreenToWorldPoint(new Vector3(screenMousePosition.x, screenMousePosition.y, activeCamera.nearClipPlane)); //Handle 6-axis motion activeCamera.transform.localPosition += Input.GetAxis("Pan") * activeCamera.transform.right + Input.GetAxis("Vertical") * activeCamera.transform.up + Input.GetAxis("Forward") * activeCamera.transform.forward; activeCamera.transform.Rotate(Input.GetAxis("Mouse Y") * Input.GetAxis("Left Click"), Input.GetAxis("Mouse X") * Input.GetAxis("Left Click"), Input.GetAxis("Mouse X") * Input.GetAxis("Right Click")); //Get hovered atom frameNum++; if (frameNum == framesUntilRefresh) { frameNum = 0; } else { ray = activeCamera.ScreenPointToRay(screenMousePosition); RaycastHit[] hitInfos; hitInfos = Physics.RaycastAll(ray); numHits = hitInfos.Length; if (numHits > 0) { closestAtom = null; hitAtom = null; closestAngle = 90f; for (int i = 0; i < numHits; i++) { hitInfo = hitInfos [i]; mouseCollider = hitInfo.collider.gameObject.GetComponent <MouseCollider> (); if (mouseCollider == null) { continue; } hitAtom = mouseCollider.parent; //Make sure the atom that's closest to the cursor is selected angle = Vector3.Angle(ray.direction, hitAtom.transform.position - activeCamera.transform.position); if (angle > closestAngle) { continue; } closestAtom = hitAtom; closestAtomIndex = hitAtom.index; closestAngle = angle; } if (closestAtom != null) { if (closestAtomIndex != hitAtom.parent.hoveredAtom) { hitAtom.parent.hoveredAtom = closestAtomIndex; hoverHalo.transform.position = closestAtom.transform.position; hoverHalo.transform.rotation = activeCamera.transform.rotation; hoverHalo.Clear(); emissionModule.enabled = true; hoverHalo.Play(); } } } else { if (hitAtom != null) { hitAtom.parent.hoveredAtom = -1; } emissionModule.enabled = false; } } //if (Physics.Raycast (ray, out hitInfo)) { // MouseCollider hoveredAtomCollider = hitInfo.collider.gameObject.GetComponent<MouseCollider> (); // // if (hoveredAtomCollider != null) { // hoveredAtomCollider.parent.parent.hoveredAtom = hoveredAtomCollider.parent.index; // } //} }
void Interactable_MouseEntered(MouseCollider target) { TriggerEvent(); }
private void recalculate(MeshGenerator meshGenerator, TrackSegment4 segment) { foreach (Transform child in segment.gameObject.transform) { if (child.name != "BetweenTracksMouseCollider" && !child.name.Contains("StationPlatformTrackTile") && child.name != "MouseSelectionCollider") { var mesh_filter = child.gameObject.GetComponent <MeshFilter> (); if (mesh_filter != null) { UnityEngine.Object.Destroy(mesh_filter.mesh); UnityEngine.Object.Destroy(mesh_filter.sharedMesh); } UnityEngine.Object.Destroy(child.gameObject); } } if (segment.getLength() <= 0f) { Debug.LogWarning("Can't extrude this segment! Has a length of 0."); } meshGenerator.prepare(segment, segment.gameObject); float num = 0f; float num2 = 0f; meshGenerator.sampleAt(segment, 0f); int num3 = 0; int num4 = 0; Vector3 b = segment.getStartpoint(); do { float num5 = 1f - num2; if (Vector3.Angle(segment.getDirection(), segment.getPoint(num2 + num5) - segment.getPoint(num2)) > 5f) { num5 /= 2f; } int num6 = 0; Vector3 point = segment.getPoint(num2 + num5); float num7 = Vector3.Angle(segment.getTangentPoint(num2), segment.getTangentPoint(num2 + num5)); num7 = Mathf.Max(num7, Vector3.Angle(segment.getNormal(num2), segment.getNormal(num2 + num5))); while (num5 > 0.01f && (num7 > 10f || (num7 > 2f && (point - b).magnitude > 0.225f))) { num4++; num5 /= 2f; point = segment.getPoint(num2 + num5); num7 = Vector3.Angle(segment.getTangentPoint(num2), segment.getTangentPoint(num2 + num5)); num7 = Mathf.Max(num7, Vector3.Angle(segment.getNormal(num2), segment.getNormal(num2 + num5))); num6++; if (num6 > 50) { break; } } num += (point - b).magnitude; num2 += num5; b = point; if (num2 > 1f) { break; } meshGenerator.sampleAt(segment, num2); num3++; }while (num2 < 1f && num3 < 300); if (!Mathf.Approximately(num2, 1f)) { meshGenerator.sampleAt(segment, 1f); } meshGenerator.afterExtrusion(segment, segment.gameObject); MeshFilter component = segment.gameObject.GetComponent <MeshFilter>(); Mesh mesh = meshGenerator.getMesh(segment.gameObject); UnityEngine.Object.Destroy(component.sharedMesh); UnityEngine.Object.Destroy(component.mesh); component.sharedMesh = mesh; meshGenerator.afterMeshGeneration(segment, segment.gameObject); Extruder buildVolumeMeshExtruder = meshGenerator.getBuildVolumeMeshExtruder(); buildVolumeMeshExtruder.transform(segment.gameObject.transform.worldToLocalMatrix); BoundingMesh boundingMesh = segment.gameObject.GetComponent <BoundingMesh>(); boundingMesh.layers = BoundingVolume.Layers.Buildvolume; boundingMesh.setMesh(buildVolumeMeshExtruder.vertices.ToArray(), buildVolumeMeshExtruder.indizes.ToArray()); GameObject track_mouse_collider = segment.transform.Find("BetweenTracksMouseCollider").gameObject; // new GameObject("BetweenTracksMouseCollider"); track_mouse_collider.transform.parent = segment.gameObject.transform; track_mouse_collider.transform.localPosition = Vector3.zero; track_mouse_collider.transform.localRotation = Quaternion.identity; track_mouse_collider.layer = LayerMasks.ID_MOUSECOLLIDERS; MeshCollider meshCollider = track_mouse_collider.GetComponent <MeshCollider>(); Mesh collisionMesh = meshGenerator.getCollisionMesh(segment.gameObject); UnityEngine.Object.Destroy(meshCollider.sharedMesh); meshCollider.sharedMesh = collisionMesh; MouseCollider mouseCollider = segment.gameObject.GetComponent <MouseCollider>(); mouseCollider.colliderObject = track_mouse_collider; }
// Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Q)) { Fortran.deallocate_all(); main.ClearQueue(); #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #else Application.Quit(); #endif } //Handle key presses if (Input.GetKeyDown(KeyCode.Escape)) { if (activeAtoms) { activeAtoms.ClearSelection(); } } //Keep track of mouse position here screenMousePosition = Input.mousePosition; worldMousePosition = activeCamera.ScreenToWorldPoint(new Vector3(screenMousePosition.x, screenMousePosition.y, activeCamera.nearClipPlane)); leftClickDown = Input.GetAxis("Left Click"); rightClickDown = Input.GetAxis("Right Click"); //Handle 6-axis motion mouseX = Input.GetAxis("Mouse X"); mouseY = Input.GetAxis("Mouse Y"); rotation.x = leftClickDown * mouseY; rotation.y = leftClickDown * mouseX; rotation.z = rightClickDown * mouseX; activeCamera.transform.localPosition += Input.GetAxis("Pan") * activeCamera.transform.right + Input.GetAxis("Vertical") * activeCamera.transform.up + Input.GetAxis("Forward") * activeCamera.transform.forward; activeCamera.transform.Rotate(rotation); //Differentiate between click and drag clicked = false; if (leftClickDown == 0) { clicked = (oldLeftClickDown != 0 && !dragged); dragged = false; } else { if (!dragged) { dragged = (mouseX * mouseX + mouseY * mouseY > dragThreshold); } } oldLeftClickDown = leftClickDown; //Get hovered atom if (activeAtoms != null) { frameNum++; if (frameNum == framesUntilRefresh) { frameNum = 0; } else { ray = activeCamera.ScreenPointToRay(screenMousePosition); //MOVE ALL HOVER HALOES TO ATOMS RaycastHit[] hitInfos; hitInfos = Physics.RaycastAll(ray); numHits = hitInfos.Length; if (numHits > 0) { closestAtom = null; hitAtom = null; closestAngle = 90f; for (int i = 0; i < numHits; i++) { hitInfo = hitInfos [i]; mouseCollider = hitInfo.collider.gameObject.GetComponent <MouseCollider> (); if (mouseCollider == null) { continue; } hitAtom = mouseCollider.parent; if (hitAtom.parent != activeAtoms) { continue; } //Make sure the atom that's closest to the cursor is selected angle = Vector3.Angle(ray.direction, hitAtom.transform.position - activeCamera.transform.position); if (angle > closestAngle) { continue; } closestAtom = hitAtom; closestAtomIndex = hitAtom.index; closestAngle = angle; } if (closestAtom != null) { if (closestAtomIndex != activeAtoms.hoveredAtom) { activeAtoms.hoveredAtom = closestAtomIndex; } if (clicked) { activeAtoms.ToggleSelect(closestAtomIndex); } } } else { if (hitAtom != null) { activeAtoms.hoveredAtom = -1; } } } } //if (Physics.Raycast (ray, out hitInfo)) { // MouseCollider hoveredAtomCollider = hitInfo.collider.gameObject.GetComponent<MouseCollider> (); // // if (hoveredAtomCollider != null) { // hoveredAtomCollider.parent.parent.hoveredAtom = hoveredAtomCollider.parent.index; // } //} }