Пример #1
0
 public static void setNumPad(WaitingObject inpWaitObj)
 {
     waitingObj = inpWaitObj;
     objMenuManager.getAndEmptyObjectMenu(prevMenu);
     resetPrevMenuObjPosAndRot();
     setObjectMenu(getNumPadPrefab());
 }
Пример #2
0
 private void getPolarCount(LaserPicker laser)
 {
     if (!currWaitingObj.isSet())
     {
         return;
     }
     polarCount     = int.Parse(currWaitingObj.readString());
     actionMode     = ActionMode.ARRAYCOUNT;
     currWaitingObj = ScriptableObject.CreateInstance <WaitingObject>();
     GeneralSettings.setNumPad(currWaitingObj);
     GeneralSettings.updateInteractText("Please count for array of objects in each polar direction.");
 }
Пример #3
0
 private void getXCount(LaserPicker laser)
 {
     if (!currWaitingObj.isSet())
     {
         return;
     }
     xCount         = int.Parse(currWaitingObj.readString());
     actionMode     = ActionMode.YCOUNT;
     currWaitingObj = ScriptableObject.CreateInstance <WaitingObject>();
     GeneralSettings.setNumPad(currWaitingObj);
     GeneralSettings.updateInteractText("Please specify number of copies in Y-direction.");
 }
Пример #4
0
 private void getVec1(LaserPicker laser)
 {
     if (WandControlsManager.WandControllerRight.getTriggerDown())
     {
         if (laser.isHit())
         {
             vec1           = laser.getTerminalPoint() - startPos;
             actionMode     = ActionMode.POLARCOUNT;
             currWaitingObj = ScriptableObject.CreateInstance <WaitingObject>();
             GeneralSettings.setNumPad(currWaitingObj);
             GeneralSettings.updateInteractText("Please specify number of poles in polar array.");
         }
     }
 }
Пример #5
0
        private void WaitAndCheckScheduledObjects()
        {
            using (WaitEvent = new AutoResetEvent(false))
            {
                while (KeepRunning)
                {
                    Monitor.Enter(WaitingObjects);

                    WaitingObject Next = WaitingObjects.OrderBy(x => x.TimePoint).FirstOrDefault();

                    Monitor.Exit(WaitingObjects);

                    if (Next != null)
                    {
                        long TimePoint = Counter.ElapsedMilliseconds;

                        if (Next.TimePoint > TimePoint)
                        {
                            WaitEvent.WaitOne((int)(Next.TimePoint - TimePoint));
                        }

                        Monitor.Enter(WaitingObjects);

                        bool TimeUp = Counter.ElapsedMilliseconds >= Next.TimePoint && WaitingObjects.Remove(Next);

                        Monitor.Exit(WaitingObjects);

                        if (TimeUp)
                        {
                            Next.Object.TimeUp();
                        }
                    }
                    else
                    {
                        WaitEvent.WaitOne();
                    }
                }
            }
        }
Пример #6
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;
            }
            }
        }
    }
Пример #7
0
 public static void returnNumPadVal(string retStr)
 {
     waitingObj.setString(retStr);
     waitingObj = null;
 }