Exemplo n.º 1
0
 void _interactableObject_MouseClicked(MouseCollider target)
 {
     if (!EventSystem.current.IsPointerOverGameObject())
     {
         TriggerEvent();
     }
 }
Exemplo n.º 2
0
 void _interactableObject_MouseLeft(MouseCollider target)
 {
     TriggerEvent();
 }
Exemplo n.º 3
0
    // 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;
        //	}
        //}
    }
Exemplo n.º 4
0
 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;
        }
Exemplo n.º 6
0
    // 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;
        //	}
        //}
    }