예제 #1
0
 private void setupBoardMode(LaserPicker laser)
 {
     if (WandControlsManager.WandControllerRight.getTriggerDown())
     {
         targetBoard = Instantiate(boardPrefab, laser.getTerminalPoint(),
                                   Quaternion.LookRotation(laser.getTerminalNormal()),
                                   GeneralSettings.modelObjects.transform);
         laser.setRestrictedObject(targetBoard);
         laser.setLengthToInfinity();
     }
 }
예제 #2
0
    public void amUpdate(LaserPicker laser)
    {
        if (hostSurface != null)
        {
            if (WandControlsManager.WandControllerRight.getTriggerDown())
            {
                if (laser.isHit())
                {
                    Vector3 pt = laser.getHitPoint();
                    lastPt = Instantiate(pointMarker, pt, Quaternion.identity);
                    selectedPtObjects.Add(lastPt);


                    if (selectedPtObjects.Count == 4)
                    {
                        List <Vector3> pts = new List <Vector3>();
                        foreach (GameObject ptObj in selectedPtObjects)
                        {
                            pts.Add(ptObj.transform.position);
                        }

                        GameObject newSrf = Instantiate(app_Surface, laser.getHitPoint(), Quaternion.identity);
                        newSrf.GetComponent <app_Surface>().init(pts);
                        hostSurface.GetComponent <app_Plane>().enhostObject(newSrf);

                        GeneralSettings.updateInteractText("");
                        GeneralSettings.addLineToConsole(string.Format("{0} surface created under {1} host plane.", newSrf.name, hostSurface.name));
                        clearPointCollectionMode(laser);
                        return;
                    }
                    GeneralSettings.updateInteractText(string.Format("Pick {0} more points to complete the surafce.", 4 - selectedPtObjects.Count));
                }
            }

            if (WandControlsManager.WandControllerRight.getGripDown())
            {
                clearPointCollectionMode(laser);
                GeneralSettings.addLineToConsole("Surface creation exited.");
                GeneralSettings.updateInteractText("Please select a plane to act as host for the surface.");
            }

            return;
        }

        if (WandControlsManager.WandControllerRight.getTriggerDown())
        {
            hostSurface = laser.getHitObject();
            laser.setRestrictedObject(hostSurface);
            GeneralSettings.updateInteractText("Select 4 corner points for surface.");
            GeneralSettings.addLineToConsole(string.Format("{0} selected as host plane for surface to be created.", hostSurface.name));
        }
    }
예제 #3
0
    private void selActionMethods()
    {
        // if the hit object is a prefab
        currHitAppObj = hitAppObj;
        // and is not pointing to the same prefab as it was in the last frame
        if (currHitAppObj != prevHitAppObj)
        {
            // collapse the edit menu on the object it was previously pointing
            if (prevHitAppObj != null)
            {
                prevHitAppObj.GetComponent <Highlightable>().hideObjectMenu();
            }
            // expand the edit menu for current object
            if (currHitAppObj != null)
            {
                currHitAppObj.GetComponent <Highlightable>().displayObjectMenu();
            }
        }
        prevHitAppObj = currHitAppObj;


        if (GeneralSettings.editOn())
        {
            if (WandControlsManager.WandControllerRight.getGripDown())
            {
                GeneralSettings.clearEditObject();
                return;
            }
            if (WandControlsManager.WandControllerRight.getTriggerDown())
            {
                if (laser.isHit())
                {
                    // look at the parameters for the thing just hit
                    RaycastHit detectRay;
                    Physics.Raycast(new Ray(laser.getStartPoint(), laser.getDirection()), out detectRay);
                    incidentObj = detectRay.transform.gameObject;


                    // check whether hittin a refObject; in that case move only the ref object
                    RefObjectEdge refScriptEd = incidentObj.GetComponent <RefObjectEdge>();
                    if (refScriptEd != null)
                    {
                        laser.setRestrictedPlane(incidentObj.GetComponent <RefObjectEdge>().getRefPlane());
                        objToMove      = incidentObj;
                        startPos       = objToMove.transform.localPosition;
                        activeMoveType = SelectMoveType.MoveRefEd;
                        return;
                    }
                    // check whether hittin a refObject; in that case move only the ref object
                    RefObjectPoint refScriptPt = incidentObj.GetComponent <RefObjectPoint>();
                    if (refScriptPt != null)
                    {
                        laser.setToStickMode(detectRay.distance);
                        objToMove      = incidentObj;
                        offsetVal      = objToMove.transform.position - detectRay.point;
                        activeMoveType = SelectMoveType.MoveRefPt;
                        return;
                    }
                    // check whether hittin a refObject; in that case move only the ref object
                    RefObjectPlaneConstraintPoint refScriptConstrPt = incidentObj.GetComponent <RefObjectPlaneConstraintPoint>();
                    if (refScriptConstrPt != null)
                    {
                        laser.setRestrictedObject(refScriptConstrPt.getConstrainObject());
                        objToMove = incidentObj;
                        // offsetVal = objToMove.transform.position - detectRay.point;
                        activeMoveType = SelectMoveType.MoveRefPtConstrained;
                        objToMove.GetComponent <SphereCollider>().enabled = false;
                        return;
                    }
                    // DIRTY-FIX
                    // check whether hittin a refObject; in that case move only the ref object
                    GizmoMoveLinear gizMoveLin = incidentObj.GetComponent <GizmoMoveLinear>();
                    if (gizMoveLin != null)
                    {
                        laser.setRestrictedPlane(incidentObj.GetComponent <GizmoMoveLinear>().getRefPlane());
                        objToMove      = incidentObj;
                        startPos       = objToMove.transform.localPosition;
                        activeMoveType = SelectMoveType.MoveGizmoLinear;
                        return;
                    }
                    // check whether hittin a refObject; in that case move only the ref object
                    GizmoRotateAxis gizRotateAxis = incidentObj.GetComponent <GizmoRotateAxis>();
                    if (gizRotateAxis != null)
                    {
                        laser.setRestrictedPlane(incidentObj.GetComponent <GizmoRotateAxis>().getRefPlane());
                        objToMove      = incidentObj;
                        activeMoveType = SelectMoveType.RotateGizmoAxis;
                        return;
                    }
                    // check whether hittin a refObject; in that case move only the ref object
                    GizmoSpecMoveOneAxis moveSpecOneAxis = incidentObj.GetComponent <GizmoSpecMoveOneAxis>();
                    if (moveSpecOneAxis != null)
                    {
                        specMoveAxis   = incidentObj.GetComponent <GizmoSpecMoveOneAxis>().getAxis();
                        currWaitingObj = ScriptableObject.CreateInstance <WaitingObject>();
                        GeneralSettings.setNumPad(currWaitingObj);
                        GeneralSettings.updateInteractText("Please specify offset along " + specMoveAxis + "-axis.");
                        objToMove      = incidentObj;
                        activeMoveType = SelectMoveType.MoveSpecOneAxis;
                        return;
                    }
                    // check whether hittin a refObject; in that case move only the ref object
                    GizmoMoveSpecPoint moveSpecPt = incidentObj.GetComponent <GizmoMoveSpecPoint>();
                    if (moveSpecPt != null)
                    {
                        currWaitingObj = ScriptableObject.CreateInstance <WaitingObject>();
                        GeneralSettings.setNumPad(currWaitingObj);
                        GeneralSettings.updateInteractText("Please enter target point on X-axis.");
                        objToMove      = incidentObj;
                        activeMoveType = SelectMoveType.MoveSpecPt;
                        tgtPosList.Clear();
                        return;
                    }
                    // otherwise move the whole edit object
                    else
                    {
                        // set laser length equal to gap between laser and the center of the object highlighted
                        laser.setToStickMode(detectRay.distance);
                        objToMove      = GeneralSettings.getEditObject();
                        offsetVal      = objToMove.transform.position - detectRay.point;
                        activeMoveType = SelectMoveType.MoveObj;
                    }
                }
                return;
            }
            if (WandControlsManager.WandControllerRight.getTriggerUp())
            {
                // these modes require continuation and are not exited on just trigger up
                // their reselase methods are defined in the parts where the activeMoveType is set back to default
                if (activeMoveType == SelectMoveType.MoveSpecOneAxis || activeMoveType == SelectMoveType.MoveSpecPt)
                {
                    return;
                }
                if (objToMove.GetComponent <SphereCollider>() != null)
                {
                    objToMove.GetComponent <SphereCollider>().enabled = true;
                }
                clearLaser();
                objToMove      = null;
                activeMoveType = SelectMoveType.None;
                return;
            }
        }

        if (objToMove != null)
        {
            switch (activeMoveType)
            {
            case SelectMoveType.MoveRefEd:
            {
                tgtPos = objToMove.transform.parent.InverseTransformVector(laser.getTerminalPoint());
                objToMove.GetComponent <RefObjectEdge>().moveObject(startPos, tgtPos);
                break;
            }

            case SelectMoveType.MoveRefPt:
            {
                tgtPos = laser.getTerminalPoint();
                objToMove.GetComponent <RefObjectPoint>().moveObject(tgtPos + offsetVal);
                break;
            }

            case SelectMoveType.MoveRefPtConstrained:
            {
                if (!laser.isHit())
                {
                    break;
                }
                tgtPos = laser.getTerminalPoint();
                objToMove.GetComponent <RefObjectPlaneConstraintPoint>().moveObject(tgtPos);
                break;
            }

            case SelectMoveType.MoveObj:
            {
                tgtPos = laser.getTerminalPoint();
                objToMove.GetComponent <Editable>().moveObject(tgtPos + offsetVal);
                break;
            }

            // DIRTY-FIX
            case SelectMoveType.MoveGizmoLinear:
            {
                tgtPos = objToMove.transform.parent.InverseTransformVector(laser.getTerminalPoint());
                objToMove.GetComponent <GizmoMoveLinear>().moveObject(tgtPos);
                break;
            }

            case SelectMoveType.RotateGizmoAxis:
            {
                tgtPos = laser.getTerminalPoint();
                objToMove.GetComponent <GizmoRotateAxis>().rotateObject(tgtPos);
                break;
            }

            case SelectMoveType.MoveSpecOneAxis:
            {
                if (!currWaitingObj.isSet())
                {
                    return;
                }
                int amt = int.Parse(currWaitingObj.readString());
                objToMove.GetComponent <GizmoSpecMoveOneAxis>().moveObject(amt);
                GeneralSettings.addLineToConsole(string.Format("Moved {0} by {1} in {2}-axis", GeneralSettings.getParentClone(objToMove, "app_").name, amt, specMoveAxis));
                objToMove      = null;
                activeMoveType = SelectMoveType.None;
                GeneralSettings.reinstatePreviousMenu();
                GeneralSettings.updateInteractText("");
                if (objToMove.GetComponent <SphereCollider>() != null)
                {
                    objToMove.GetComponent <SphereCollider>().enabled = true;
                }
                clearLaser();
                break;
            }

            case SelectMoveType.MoveSpecPt:
            {
                if (!currWaitingObj.isSet())
                {
                    return;
                }
                float amt = float.Parse(currWaitingObj.readString());
                tgtPosList.Add(amt);
                if (tgtPosList.Count == 1)
                {
                    GeneralSettings.reinstatePreviousMenu();
                    currWaitingObj = ScriptableObject.CreateInstance <WaitingObject>();
                    GeneralSettings.setNumPad(currWaitingObj);
                    GeneralSettings.updateInteractText("Please enter target point on Y-axis.");
                    return;
                }
                if (tgtPosList.Count == 2)
                {
                    GeneralSettings.reinstatePreviousMenu();
                    currWaitingObj = ScriptableObject.CreateInstance <WaitingObject>();
                    GeneralSettings.setNumPad(currWaitingObj);
                    GeneralSettings.updateInteractText("Please enter target point on Z-axis.");
                    return;
                }
                if (tgtPosList.Count == 3)
                {
                    Vector3 tgtSpecPos = new Vector3(tgtPosList[0], tgtPosList[1], tgtPosList[2]);
                    objToMove.GetComponent <GizmoMoveSpecPoint>().moveObject(tgtSpecPos);
                    GeneralSettings.addLineToConsole(string.Format("Moved {0} to {1}", GeneralSettings.getParentClone(objToMove, "app_").name, tgtSpecPos));
                    if (objToMove.GetComponent <SphereCollider>() != null)
                    {
                        objToMove.GetComponent <SphereCollider>().enabled = true;
                    }
                    objToMove      = null;
                    activeMoveType = SelectMoveType.None;
                    GeneralSettings.reinstatePreviousMenu();
                    GeneralSettings.updateInteractText("");
                    clearLaser();
                }
                break;
            }

            case SelectMoveType.None:
            {
                break;
            }
            }
        }
    }