示例#1
0
 public void Update()
 {
     if (Input.GetMouseButtonDown(0))
     {
         GameObject     selectedObject = Select();
         fortBuilderObj fbComponent    = selectedObject == null ? null : selectedObject.GetComponent <fortBuilderObj>();
         if (fbComponent != null && fbComponent.selectable)
         {
             WorldManager.Selected = fbComponent;
         }
         else if (fbComponent == null && !UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())
         {
             WorldManager.Selected = null;
         }
     }
 }
    // Update is called once per frame
    void Update()
    {
        // rotate the player to the right. Makes me a bit dizzy if
        // I hold it down too long. I recommend just turning around in
        // the room if you can lol
        if (Controller.GetPress(SteamVR_Controller.ButtonMask.Grip))
        {
            //Debug.Log("Right Controller Grip Pressed");
            VR_Rig.transform.Rotate(new Vector3(0, 70 * Time.deltaTime, 0));
        }



        if (Controller.GetPress(SteamVR_Controller.ButtonMask.Trigger))
        {
            RaycastHit hit;
            if (Physics.Raycast(controller.transform.position, transform.forward, out hit, 100))
            {
                ShowSelectLaser(hit);
                selectLaser.GetComponent <Renderer>().material.color = new Color(255, 0, 0);

                if (hit.transform.GetComponent <fortBuilderObj>())
                {
                    if (hit.transform.GetComponent <fortBuilderObj>().selectable)
                    {
                        selectLaser.GetComponent <Renderer>().material.color = new Color(0, 0, 255);
                    }
                }
                // or the object being pointed at is on the build board
                else if (hit.transform.GetComponent <selectionObject>())
                {
                    selectLaser.GetComponent <Renderer>().material.color = new Color(0, 0, 255);
                }
            }
            else
            {
                Debug.Log("this should never happen.. I mean I added walls and everything");
            }
        }
        else if (!Controller.GetPress(SteamVR_Controller.ButtonMask.Trigger))
        {
            selectLaser.SetActive(false);
            selectLaser.GetComponent <Renderer>().enabled = false;

            if (Controller.GetPressUp(SteamVR_Controller.ButtonMask.Trigger) && !isObjSelected)
            {
                RaycastHit hit;
                if (Physics.Raycast(controller.transform.position, transform.forward, out hit, 100))
                {
                    if (hit.transform.GetComponent <fortBuilderObj>())
                    {
                        if (hit.transform.GetComponent <fortBuilderObj>().selectable&& hit.collider.gameObject != null)
                        {
                            initTranslateDist = controller.transform.position - hit.transform.position;

                            isObjSelected = true;

                            GameObject selectedObject = hit.collider.gameObject;
                            currentObj = hit.collider.gameObject;


                            fortBuilderObj fbComponent = selectedObject.GetComponent <fortBuilderObj>();

                            //// recommended code by Thomas. Fixed a bug where object was unselectable
                            //if(selectedObject.GetPhotonView() != null)
                            //{
                            //    selectedObject.GetPhotonView().RPC("Grab", PhotonTargets.Others);
                            //}
                            //else
                            //{
                            //    objManager.RequestOwnership(selectedObject, PhotonNetwork.player.ID);
                            //}
                            WorldManager.Selected = fbComponent;

                            // changes object's color
                            //fbComponent.Select();


                            //// deselect the old object
                            //if (fbComponent != previousObj)
                            //{
                            //    if (previousObj != null)
                            //    {
                            //        previousObj.Deselect();
                            //        previousObj = fbComponent;
                            //    }
                            //}
                        }
                    }
                    // or the object being selected is from the selection board
                    else if (hit.transform.GetComponent <selectionObject>())
                    {
                        //isObjSelected = true;
                        transformMode = "translate";

                        if (hit.transform.gameObject.name == "Rectangular Prism")
                        {
                            string     prefabName = "FBRectPrism1_3";
                            Vector3    position   = controller.transform.position + controller.transform.forward * 2;
                            Quaternion rotation   = Quaternion.identity;
                            objManager.Instantiate(prefabName, position, rotation);
                        }
                        if (hit.transform.gameObject.name == "Cylinder")
                        {
                            string     prefabName = "FortBuilderCylinder";
                            Vector3    position   = controller.transform.position + controller.transform.forward * 2;
                            Quaternion rotation   = Quaternion.identity;
                            objManager.Instantiate(prefabName, position, rotation);
                        }
                        if (hit.transform.gameObject.name == "Cube")
                        {
                            string     prefabName = "FortBuilderCube 1";
                            Vector3    position   = controller.transform.position + controller.transform.forward * 2;
                            Quaternion rotation   = Quaternion.identity;
                            objManager.Instantiate(prefabName, position, rotation);
                        }
                        if (hit.transform.gameObject.name == "Cone")
                        {
                            string     prefabName = "Cone";
                            Vector3    position   = controller.transform.position + controller.transform.forward * 2;
                            Quaternion rotation   = Quaternion.identity;
                            objManager.Instantiate(prefabName, position, rotation);
                        }
                        if (hit.transform.gameObject.name == "Arch")
                        {
                            string     prefabName = "Arch";
                            Vector3    position   = controller.transform.position + controller.transform.forward * 2;
                            Quaternion rotation   = Quaternion.identity;
                            objManager.Instantiate(prefabName, position, rotation);
                        }
                        if (hit.transform.gameObject.name == "Prism")
                        {
                            string     prefabName = "Prism";
                            Vector3    position   = controller.transform.position + controller.transform.forward * 2;
                            Quaternion rotation   = Quaternion.identity;
                            objManager.Instantiate(prefabName, position, rotation);
                        }
                    }
                }
            }
            else if (Controller.GetPressUp(SteamVR_Controller.ButtonMask.Trigger) && isObjSelected)
            {
                // deselect currentObject
                currentObj.GetComponent <fortBuilderObj>().Deselect();
                //previousObj = currentObj.GetComponent<fortBuilderObj>();

                isObjSelected = false;
                currentObj    = null;
            }
        }

        // pressing the touchpad on the right controller toggles transformMode
        if (Controller.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
        {
            initScaleDistance = null;
            if (transformMode == "translate")
            {
                transformMode = "rotate";
            }
            else if (transformMode == "rotate")
            {
                transformMode = "scale";
                Vector3 controllerVect = controller.transform.position - leftController.position;
                var     controllerDist = controllerVect.magnitude;
                initScaleDistance = controllerDist;
            }
            else if (transformMode == "scale")
            {
                transformMode = "translate";
            }
        }

        //Debug.Log(currentObj);
        // updates the object
        if (currentObj != null)
        {
            updateCurrentObj();
        }



        //update the transformModeText in-app
        transformModeText.GetComponent <TextMeshPro>().SetText(transformMode);
    }