コード例 #1
0
 //!
 //! scale currently selected object with joystick input
 //! @param      scale     new scale of object
 //!
 public void scaleSelectionJoystick(Vector3 scale)
 {
     if (currentSelection)
     {
         // lights (scalemode is used for light parameters intensity and range)
         SceneObjectLight scl = currentSelection.GetComponent <SceneObjectLight>();
         if (scl)
         {
             // set light intensity
             scl.setLightIntensity(scl.getLightIntensity() + (scale.z * 0.5f));
             // set gui element
             scl.setLightRange(scl.getLightRange() + (scale.y * 0.5f));
             if (scale.z == 0.0f)
             {
                 UIAdapter.updateRangeSlider(scl.getLightRange());
             }
             else if (scale.y == 0.0f)
             {
                 UIAdapter.updateRangeSlider(scl.getLightIntensity());
             }
         }
         // objects
         else
         {
             if (scale.x == 0 && scale.y == 0)
             {
                 axisLocker = new Vector3(0, 0, 1);
             }
             else if (scale.x == 0 && scale.z == 0)
             {
                 axisLocker = new Vector3(0, 1, 0);
             }
             else if (scale.y == 0 && scale.z == 0)
             {
                 axisLocker = new Vector3(1, 0, 0);
             }
             else if (scale.x != 0 && scale.y != 0 && scale.z != 0)
             {
                 axisLocker = new Vector3(1, 1, 1);
                 scale      = Vector3.one * scale.x;
             }
             if (!currentSelection.transform.parent.transform.GetComponent <Light>())
             {
                 float scaleFactor = (8f * Vector3.Distance(Camera.main.transform.position, currentSelection.position) / VPETSettings.Instance.maxExtend);
                 currentSelection.transform.localScale += Vector3.Scale(scale / currentSelection.transform.parent.lossyScale.x * scaleFactor / VPETSettings.Instance.controllerSpeed, axisLocker) / 100f;
                 if (liveMode)
                 {
                     serverAdapter.SendObjectUpdate(currentSelection.GetComponent <SceneObject>(), ParameterType.SCALE);
                 }
             }
         }
     }
 }
コード例 #2
0
        public void setLightParamAngle(float angle)
        {
            SceneObjectLight currentLight = (SceneObjectLight)currentSceneObject;

            if (currentLight)
            {
                currentLight.setLightAngle(angle);
            }
            if (activeMode == Mode.lookThroughLightMode)
            {
                cameraAdapter.Fov = Mathf.Min(angle, 150f);
            }
        }
コード例 #3
0
        public void show(SceneObjectLight light)
        {
            currentLight = light;

            if (sliderType == SliderType.COLOR)
            {
                colorWheel.gameObject.SetActive(true);
                colorWheel.Value = currentLight.getLightColor();
            }
            else
            {
                colorWheel.gameObject.SetActive(false);
            }
        }
コード例 #4
0
        ////! function to be called to send a lock signal to server
        ////! @param  obj             Transform of GameObject to be locked
        ////! @param  locked          should it be locked or unlocked
        //public void sendLock(Transform obj, bool locked)
        //{
        //    if (locked) // lock it
        //    {
        //        if (currentlyLockedObject != null && currentlyLockedObject != obj && !deactivatePublish) // is another object already locked, release it first
        //        {
        //            string msg = "client " + id + "|" + "l" + "|" + vpet.Extensions.getPathString(currentlyLockedObject, scene) + "|" + false;
        //            SendObjectUpdate<ObjectSenderBasic>(msg);
        //            // print("Unlock object " + currentlyLockedObject.gameObject.name );
        //        }
        //        if (currentlyLockedObject != obj && !deactivatePublish) // lock the object if it is not locked yet
        //        {
        //            string msg = "client " + id + "|" + "l" + "|" + vpet.Extensions.getPathString(obj, scene) + "|" + true;
        //            SendObjectUpdate<ObjectSenderBasic>(msg);
        //            // print("Lock object " + obj.gameObject.name);
        //        }
        //        currentlyLockedObject = obj;
        //    }
        //    else // unlock it
        //    {
        //        if (currentlyLockedObject != null && !deactivatePublish) // unlock if locked
        //        {
        //            string msg = "client " + id + "|" + "l" + "|" + vpet.Extensions.getPathString(obj, scene) + "|" + false;
        //            SendObjectUpdate<ObjectSenderBasic>(msg);
        //            // print("Unlock object " + obj.gameObject.name);
        //        }
        //        currentlyLockedObject = null;
        //    }
        //}  // commented at sync update rewrite


        //! function parsing received message and executing change
        //! @param  message         message string received by server
        public void parseTransformation(byte[] msg)
        {
            if (msg[0] != m_id)
            {
                ParameterType paramType   = (ParameterType)msg[1];
                int           objectID    = BitConverter.ToInt32(msg, 2);
                SceneObject   sceneObject = sceneObjectRefList[objectID];

                switch (paramType)
                {
                case ParameterType.POS:
                {
#if !SCENE_HOST
                    if (!mainController.isTranslating)
#endif
                    {
                        sceneObject.transform.localPosition = new Vector3(BitConverter.ToSingle(msg, 6),
                                                                          BitConverter.ToSingle(msg, 10),
                                                                          BitConverter.ToSingle(msg, 14));
                    }
                }
                break;

                case ParameterType.ROT:
                {
#if !SCENE_HOST
                    if (!mainController.isRotating)
#endif
                    {
                        sceneObject.transform.localRotation = new Quaternion(BitConverter.ToSingle(msg, 6),
                                                                             BitConverter.ToSingle(msg, 10),
                                                                             BitConverter.ToSingle(msg, 14),
                                                                             BitConverter.ToSingle(msg, 18));
                    }
                }
                break;

                case ParameterType.SCALE:
                {
#if !SCENE_HOST
                    if (!mainController.isScaling)
#endif
                    {
                        sceneObject.transform.localScale = new Vector3(BitConverter.ToSingle(msg, 6),
                                                                       BitConverter.ToSingle(msg, 10),
                                                                       BitConverter.ToSingle(msg, 14));
                    }
                }
                break;

                case ParameterType.LOCK:
                {
#if SCENE_HOST
                    if (!sceneObject.isAnimatedCharacter)
                    {
#endif
                    bool locked = BitConverter.ToBoolean(msg, 6);
                    sceneObject.enableRigidbody(!locked);
                    sceneObject.locked = locked;
#if !SCENE_HOST
                    sceneObject.updateLockView();
#endif
#if SCENE_HOST
                }
#endif
                }
                    break;

                case ParameterType.HIDDENLOCK:
                {
#if SCENE_HOST
                    if (!sceneObject.isAnimatedCharacter)
#endif
                    {
                        bool locked = BitConverter.ToBoolean(msg, 6);
                        sceneObject.enableRigidbody(!locked);
                        sceneObject.locked = locked;
                    }
                }
                break;

                case ParameterType.KINEMATIC:
                {
                    sceneObject.globalKinematic = BitConverter.ToBoolean(msg, 6);
                }
                break;

                case ParameterType.FOV:
                {
                    SceneObjectCamera soc = (SceneObjectCamera)sceneObject;
                    if (soc)
                    {
                        soc.fov = BitConverter.ToSingle(msg, 6);
                    }
                }
                break;

                case ParameterType.ASPECT:
                {
                    SceneObjectCamera soc = (SceneObjectCamera)sceneObject;
                    if (soc)
                    {
                        soc.aspect = BitConverter.ToSingle(msg, 6);
                    }
                }
                break;

                case ParameterType.FOCUSDIST:
                {
                    SceneObjectCamera soc = (SceneObjectCamera)sceneObject;
                    if (soc)
                    {
                        soc.focDist = BitConverter.ToSingle(msg, 6);
                    }
                }
                break;

                case ParameterType.FOCUSSIZE:
                {
                    SceneObjectCamera soc = (SceneObjectCamera)sceneObject;
                    if (soc)
                    {
                        soc.focSize = BitConverter.ToSingle(msg, 6);
                    }
                }
                break;

                case ParameterType.APERTURE:
                {
                    SceneObjectCamera soc = (SceneObjectCamera)sceneObject;
                    if (soc)
                    {
                        soc.aperture = BitConverter.ToSingle(msg, 6);
                    }
                }
                break;

                case ParameterType.COLOR:
                {
                    SceneObjectLight sol = (SceneObjectLight)sceneObject;
                    if (sol)
                    {
                        sol.transform.GetChild(0).GetComponent <Light>().color = new Color(BitConverter.ToSingle(msg, 6),
                                                                                           BitConverter.ToSingle(msg, 10),
                                                                                           BitConverter.ToSingle(msg, 14));
                    }
                }
                break;

                case ParameterType.INTENSITY:
                {
                    SceneObjectLight sol = (SceneObjectLight)sceneObject;
                    if (sol)
                    {
                        sol.transform.GetChild(0).GetComponent <Light>().intensity = BitConverter.ToSingle(msg, 6);
                    }
                }
                break;

                case ParameterType.EXPOSURE:
                {
                    // no exposure for unity lights
                    // used for katana
                }
                break;

                case ParameterType.RANGE:
                {
                    SceneObjectLight sol = (SceneObjectLight)sceneObject;
                    if (sol)
                    {
                        sol.transform.GetChild(0).GetComponent <Light>().range = BitConverter.ToSingle(msg, 6);
                    }
                }
                break;

                case ParameterType.ANGLE:
                {
                    SceneObjectLight sol = (SceneObjectLight)sceneObject;
                    if (sol)
                    {
                        sol.transform.GetChild(0).GetComponent <Light>().spotAngle = BitConverter.ToSingle(msg, 6);
                    }
                }
                break;

                case ParameterType.BONEANIM:
                {
                    Vector3 hipPosition = new Vector3(BitConverter.ToSingle(msg, 6),
                                                      BitConverter.ToSingle(msg, 10),
                                                      BitConverter.ToSingle(msg, 14));

                    int          offset         = 12;
                    int          numBones       = Enum.GetNames(typeof(HumanBodyBones)).Length - 1;
                    Quaternion[] animationState = new Quaternion[numBones];
                    for (int i = 0; i < numBones; i++)
                    {
                        animationState[i] = new Quaternion(BitConverter.ToSingle(msg, offset + 6),
                                                           BitConverter.ToSingle(msg, offset + 10),
                                                           BitConverter.ToSingle(msg, offset + 14),
                                                           BitConverter.ToSingle(msg, offset + 18));
                        offset += 16;
                    }
#if !SCENE_HOST
                    if (!mainController.isTranslating)
#endif
                    sceneObject.gameObject.GetComponent <CharacterAnimationController>().bodyPosition   = hipPosition;
                    sceneObject.gameObject.GetComponent <CharacterAnimationController>().animationState = animationState;
                }
                break;

                case ParameterType.PING:
                {
                    // only for sync server
                }
                break;

                case ParameterType.RESENDUPDATE:
                {
                    // only for sync server
                }
                break;

                case ParameterType.CHARACTERTARGET:
                {
#if SCENE_HOST
                    NavMeshAgent navMeshAgent = sceneObject.transform.GetComponent <NavMeshAgent>();
                    if (navMeshAgent)
                    {
                        navMeshAgent.destination = new Vector3(BitConverter.ToSingle(msg, 6),
                                                               BitConverter.ToSingle(msg, 10),
                                                               BitConverter.ToSingle(msg, 14));
                    }
#endif
                }
                break;

                default:
                    Debug.Log("Unknown paramType in ServerAdapter:ParseTransformation");
                    return;

                    break;
                }
#if SCENE_HOST
                if (recordUpdates)
                {
                    buildRecordMessage(sceneObject, paramType);
                }
#endif
            }
        }
コード例 #5
0
        //!
        //! Update is called once per frame
        //!
        void Update()
        {
            //compensate gravity vector based on AR scene rotation
            if (arMode)
            {
                Physics.gravity = scene.transform.rotation * new Vector3(0f, -981f, 0f);
            }

            if (Application.targetFrameRate != 30)
            {
                Application.targetFrameRate = 30;
            }

            //position modifiers if neccessary
            if (currentSelection)
            {
                Vector3 modifierScale = getModifierScale();
                if (lineRenderer)
                {
                    lineRenderer.widthMultiplier = modifierScale.magnitude / 100f;
                }

                if (activeMode == Mode.translationMode || activeMode == Mode.animationEditing)
                {
                    //translateModifier.transform.position = currentSelection.position;
                    translateModifier.transform.position = currentSelection.GetComponent <Collider>().bounds.center;
                    translateModifier.transform.rotation = currentSelection.rotation;

                    translateModifier.transform.localScale           = modifierScale;
                    translateModifier.transform.GetChild(9).position = new Vector3(currentSelection.position.x, 0.001f, currentSelection.position.z);
                }
                else if (activeMode == Mode.rotationMode)
                {
                    rotationModifier.transform.position = currentSelection.position;
                    //rotationModifier.transform.position = currentSelection.GetComponent<Collider>().bounds.center;
                    rotationModifier.transform.rotation   = currentSelection.rotation;
                    rotationModifier.transform.localScale = modifierScale;
                }
                else if (activeMode == Mode.scaleMode)
                {
                    scaleModifier.transform.position   = currentSelection.position;
                    scaleModifier.transform.rotation   = currentSelection.rotation;
                    scaleModifier.transform.localScale = modifierScale;
                }
            }

            //state machine
            if (oldState != activeMode || currentSelection != oldSelection)
            {
                print(oldState.ToString() + " >>>>> " + activeMode);

                // TODO: review (and remove) this statement
                if (currentSelection == null && !cameraPointMove)
                {
                    activeMode = Mode.idle;
                }

                if (hasUpdatedProjectionMatrix)
                {
                    UpdateProjectionMatrixSecondaryCameras();
                    hasUpdatedProjectionMatrix = false;
                }

                // unlock if active mode is none editing mode
                //if (activeMode!=Mode.translationMode && activeMode!=Mode.rotationMode && activeMode != Mode.scaleMode && activeMode != Mode.objectLinkCamera && activeMode != Mode.animationEditing && activeMode != Mode.pointToMoveMode && activeMode != Mode.lightSettingsMode)
                if (activeMode != oldState)
                {
                    //serverAdapter.sendLock(currentSelection, false);
                }

                animationController.deactivate();

                if (ui.LayoutUI == layouts.ANIMATION)
                {
                    animationController.activate(currentSelection != oldSelection);
                }

                //properly disable old mode
                switch (oldState)
                {
                case (Mode.idle):
                    break;

                case (Mode.translationMode):
                    translateModifier.GetComponent <Modifier>().setVisible(false);
                    //if ( activeMode != Mode.objectLinkCamera && activeMode != Mode.pointToMoveMode && ui.LayoutUI != layouts.ANIMATION )
                    //   ui.drawSecondaryMenu(layouts.EDIT);
                    ui.hideRangeSlider();
                    if (activeMode != Mode.objectLinkCamera && activeMode != Mode.translationMode && activeMode != Mode.pointToMoveMode)
                    {
                        ui.hideParameterMenu();
                    }
                    break;

                case (Mode.rotationMode):
                    rotationModifier.GetComponent <Modifier>().setVisible(false);
                    ui.hideRangeSlider();
                    ui.hideParameterMenu();
                    break;

                case (Mode.scaleMode):
                    scaleModifier.GetComponent <Modifier>().setVisible(false);
                    ui.hideRangeSlider();
                    ui.hideParameterMenu();
                    break;

                case (Mode.objectLinkCamera):
                    if (currentSelection)
                    {
                        if (currentSceneObject.GetType() == typeof(SceneObjectLight))
                        {
                            currentSelection.parent = oldParent;
                        }
                        else
                        {
                            //if (ui.LayoutUI != layouts.ANIMATION)
                            //    currentSceneObject.setKinematic(false);
                            currentSelection.parent = oldParent;
                        }
                        //if (ui.LayoutUI == layouts.ANIMATION)
                        //    animationController.setKeyFrame();
                    }
                    //if (activeMode != Mode.objectLinkCamera && activeMode != Mode.translationMode && activeMode != Mode.pointToMoveMode) ui.drawSecondaryMenu(layouts.EDIT);
                    if (activeMode != Mode.objectLinkCamera && activeMode != Mode.translationMode && activeMode != Mode.pointToMoveMode)
                    {
                        ui.hideParameterMenu();
                    }
                    break;

                case (Mode.pointToMoveMode):
                    if (activeMode != Mode.objectLinkCamera && activeMode != Mode.translationMode && activeMode != Mode.pointToMoveMode)
                    {
                        ui.hideParameterMenu();
                    }
                    //if (activeMode != Mode.objectLinkCamera && activeMode != Mode.translationMode && activeMode != Mode.pointToMoveMode) ui.drawSecondaryMenu(layouts.EDIT);
                    break;

                case (Mode.objectMenuMode):
                    break;

                case (Mode.lightMenuMode):
                    break;

                case (Mode.cameraMenuMode):
                    break;

                case (Mode.lightSettingsMode):
                    ui.hideLightSettingsWidget();
                    ui.hideRangeSlider();
                    ui.hideParameterMenu();
                    break;

                case (Mode.lookThroughCamMode):
                    ui.hideRangeSlider();
                    Camera.main.fieldOfView = 60;
                    ui.hideParameterMenu();
                    ui.resetCenterMenu();
                    break;

                case (Mode.lookThroughLightMode):
                    ui.hideRangeSlider();
                    Camera.main.fieldOfView = 60;
                    ui.hideParameterMenu();
                    break;

                case (Mode.cameraSettingsMode):
                    ui.hideRangeSlider();
                    ui.hideParameterMenu();
                    break;

                case (Mode.addMode):
                    break;

                default:
                    break;
                }
                //enable new mode
                switch (activeMode)
                {
                case (Mode.idle):
                    ui.hideCenterMenu();
                    break;

                case (Mode.translationMode):
                    //serverAdapter.sendLock(currentSelection, true);
                    translateModifier.GetComponent <Modifier>().setVisible(true);
                    if (ui.LayoutUI != layouts.ANIMATION)
                    {
                        ui.drawSecondaryMenu(layouts.TRANSLATION);
                    }
                    ui.resetRangeSlider();
                    ConnectRangeSlider(currentSceneObject, "TranslateX", 2f * VPETSettings.Instance.sceneScale);
                    ui.drawParameterMenu(layouts.TRANSLATION);
                    break;

                case (Mode.rotationMode):
                    //serverAdapter.sendLock(currentSelection, true);
                    rotationModifier.GetComponent <Modifier>().setVisible(true);
                    ui.resetRangeSlider();
                    ConnectRangeSlider(currentSceneObject, "RotateX", 1f);
                    ui.drawParameterMenu(layouts.TRANSFORM);
                    break;

                case (Mode.scaleMode):
                    scaleModifier.GetComponent <Modifier>().setVisible(true);
                    //serverAdapter.sendLock(currentSelection, true);
                    ui.resetRangeSlider();
                    ConnectRangeSlider(currentSceneObject, "ScaleX", 0.02f);
                    ui.drawParameterMenu(layouts.TRANSFORM);
                    break;

                case (Mode.objectLinkCamera):
                    if (currentSceneObject.GetType() == typeof(SceneObjectLight))
                    {
                        oldParent = currentSelection.parent;
                        currentSelection.parent = Camera.main.transform;
                    }
                    else
                    {
                        currentSceneObject.setKinematic(true);
                        oldParent = currentSelection.parent;
                        currentSelection.parent = Camera.main.transform;
                    }
                    ui.hideRangeSlider();
                    // ui.drawParameterMenu(layouts.TRANSLATION);
                    //serverAdapter.sendLock(currentSelection, true);
                    break;

                case (Mode.pointToMoveMode):
                    ui.hideRangeSlider();
                    // ui.drawParameterMenu(layouts.TRANSLATION);
                    //serverAdapter.sendLock(currentSelection, true);
                    break;

                case (Mode.objectMenuMode):
                    if (currentSelection && ui.LayoutUI != layouts.SCOUT)
                    {
                        if (ui.LayoutUI == layouts.ANIMATION)
                        {
                            ui.drawCenterMenu(layouts.ANIMATION);
                            ui.drawSecondaryMenu(layouts.ANIMATION);
                        }
                        else
                        {
                            ui.drawCenterMenu(layouts.OBJECT);
                        }
                    }
                    break;

                case (Mode.lightMenuMode):
                    if (currentSelection && ui.LayoutUI != layouts.SCOUT)
                    {
                        if (ui.LayoutUI == layouts.ANIMATION)
                        {
                            ui.drawCenterMenu(layouts.ANIMATION);
                            ui.drawSecondaryMenu(layouts.ANIMATION);
                        }
                        else
                        {
                            SceneObjectLight solight = (SceneObjectLight)currentSceneObject;
                            if (currentSelection && solight)
                            {
                                solight.hideVisualization(false);
                            }
                            if (arMode)
                            {
                                ui.drawCenterMenu(layouts.LIGHT_AR);
                            }
                            else
                            {
                                ui.drawCenterMenu(layouts.LIGHT);
                            }
                        }

                        /*
                         *  if (currentSceneObject.isDirectionalLight)
                         *      ui.drawCenterMenu(layouts.LIGHTDIR);
                         *  else if (currentSceneObject.isPointLight)
                         *      ui.drawCenterMenu(layouts.LIGHTPOINT);
                         *  else if (currentSceneObject.isSpotLight)
                         *      ui.drawCenterMenu(layouts.LIGHTSPOT);
                         */
                    }
                    break;

                case (Mode.cameraMenuMode):
                    if (currentSelection && ui.LayoutUI != layouts.SCOUT)
                    {
                        if (arMode)
                        {
                            ui.drawCenterMenu(layouts.CAMERA_AR);
                        }
                        else
                        {
                            ui.drawCenterMenu(layouts.CAMERA);
                        }
                    }
                    break;

                case (Mode.cameraLockedMode):
                    if (currentSelection && ui.LayoutUI != layouts.SCOUT)
                    {
                        ui.drawCenterMenu(layouts.CAMERALOCKED);
                    }
                    break;

                case (Mode.lightSettingsMode):
                    SceneObjectLight sol = (SceneObjectLight)currentSceneObject;
                    if (currentSelection && sol)
                    {
                        sol.hideVisualization(true);
                    }
                    // ConnectRangeSlider(currentSceneObject, "LightIntensity", 1f);
                    ConnectRangeSlider(sol.setLightIntensity, sol.getLightIntensity(), 0.1f / VPETSettings.Instance.lightIntensityFactor);
                    if (sol.isDirectionalLight)
                    {
                        ui.drawParameterMenu(layouts.LIGHTDIR);
                    }
                    else if (sol.isPointLight)
                    {
                        ui.drawParameterMenu(layouts.LIGHTPOINT);
                    }
                    else if (sol.isSpotLight)
                    {
                        ui.drawParameterMenu(layouts.LIGHTSPOT);
                    }
                    else if (sol.isAreaLight)
                    {
                        ui.drawParameterMenu(layouts.LIGHTAREA);
                    }
                    ui.drawLightSettingsWidget();
                    //serverAdapter.sendLock(currentSelection, true);
                    break;

                case (Mode.lookThroughLightMode):
                    SceneObjectLight s = (SceneObjectLight)currentSceneObject;
                    if (currentSelection && s)
                    {
                        s.hideVisualization(true);
                    }
                    // ConnectRangeSlider(currentSceneObject, "LightIntensity", 1f);
                    ConnectRangeSlider(s.setLightIntensity, s.getLightIntensity(), 0.1f / VPETSettings.Instance.lightIntensityFactor);
                    if (s.isDirectionalLight)
                    {
                        ui.drawParameterMenu(layouts.LIGHTDIR);
                    }
                    else if (s.isPointLight)
                    {
                        ui.drawParameterMenu(layouts.LIGHTPOINT);
                    }
                    else if (s.isSpotLight)
                    {
                        ui.drawParameterMenu(layouts.LIGHTSPOT);
                    }
                    else if (s.isAreaLight)
                    {
                        ui.drawParameterMenu(layouts.LIGHTAREA);
                    }
                    ui.drawLightSettingsWidget();
                    //serverAdapter.sendLock(currentSelection, true);
                    break;

                case (Mode.addMode):
                    break;

                default:
                    break;
                }
                //renew old state
                oldState     = activeMode;
                oldSelection = currentSelection;
            }
        }
コード例 #6
0
        //!
        //! function create the object from mesh data
        //! @param  node   object which holds the data
        //! @param  parentTransform   parent object
        //!
        public static GameObject CreateLight(SceneNodeLight nodeLight, Transform parentTransform)
        {
            // Tranform
            Vector3    pos = new Vector3(nodeLight.position[0], nodeLight.position[1], nodeLight.position[2]);
            Quaternion rot = new Quaternion(nodeLight.rotation[0], nodeLight.rotation[1], nodeLight.rotation[2], nodeLight.rotation[3]);
            Vector3    scl = new Vector3(nodeLight.scale[0], nodeLight.scale[1], nodeLight.scale[2]);

            // set up object basics
            GameObject objMain = new GameObject();

            objMain.name = Encoding.ASCII.GetString(nodeLight.name);

            //place object
            objMain.transform.SetParent(parentTransform, false);
            objMain.transform.localPosition = pos;
            objMain.transform.localRotation = rot;
            objMain.transform.localScale    = Vector3.one;

            // Add light prefab
            GameObject lightUber          = Resources.Load <GameObject>("VPET/Prefabs/UberLight");
            GameObject _lightUberInstance = GameObject.Instantiate(lightUber);

            _lightUberInstance.name = lightUber.name;
            lightUber.transform.GetChild(0).gameObject.layer = 8;


            Light lightComponent = _lightUberInstance.GetComponent <Light>();

            // instert type here!!!
            lightComponent.type      = nodeLight.lightType;
            lightComponent.color     = new Color(nodeLight.color[0], nodeLight.color[1], nodeLight.color[2]);
            lightComponent.intensity = nodeLight.intensity * VPETSettings.Instance.lightIntensityFactor;
            lightComponent.spotAngle = nodeLight.angle;
            if (lightComponent.type == LightType.Directional)
            {
                lightComponent.shadows        = LightShadows.Soft;
                lightComponent.shadowStrength = 0.8f;
            }
            else
            {
                lightComponent.shadows = LightShadows.None;
            }
            lightComponent.shadowBias       = 0f;
            lightComponent.shadowNormalBias = 1f;
            lightComponent.range            = nodeLight.range * VPETSettings.Instance.sceneScale;

            Debug.Log("Create Light: " + nodeLight.name + " of type: " + ((LightTypeKatana)(nodeLight.lightType)).ToString() + " Intensity: " + nodeLight.intensity + " Pos: " + pos);

            // Add light specific settings
            if (nodeLight.lightType == LightType.Directional)
            {
            }
            else if (nodeLight.lightType == LightType.Spot)
            {
                lightComponent.range *= 2;
                //objMain.transform.Rotate(new Vector3(0, 180f, 0), Space.Self);
            }
            else if (nodeLight.lightType == LightType.Area)
            {
                // TODO: use are lights when supported in unity
                lightComponent.spotAngle = 170;
                lightComponent.range    *= 4;
            }
            else
            {
                Debug.Log("Unknown Light Type in NodeBuilderBasic::CreateLight");
            }


            // parent
            _lightUberInstance.transform.SetParent(objMain.transform, false);

            // add scene object for interactivity at the light quad
            //if (nodeLight.editable)
            //{
            SceneObjectLight sco = objMain.AddComponent <SceneObjectLight>();

            sco.id       = idCount++;
            sco.exposure = nodeLight.exposure;
            //}

            // Rotate 180 around y-axis because lights and cameras have additional eye space coordinate system
            //objMain.transform.Rotate(new Vector3(0, 180f, 0), Space.Self);

            // TODO: what for ??
            objMain.layer = 0;

            return(objMain);
        }
コード例 #7
0
        public override void SendObject(byte cID, SceneObject sceneObject, ParameterType paramType, bool sendParent, Transform parent)
        {
            if (!sceneObject)
            {
                return;
            }

            string dagPath = vpet.Extensions.getPathString(sceneObject.transform, root);

            // HACK check missing '/' upstream
            dagPath = "/" + dagPath;

            //Debug.Log(dagPath);

            NodeType nodeType = NodeType.GROUP;

            if (sceneObject is SceneObjectLight)
            {
                nodeType = NodeType.LIGHT;
            }
            else if (sceneObject is SceneObjectCamera)
            {
                nodeType = NodeType.CAMERA;
            }

            if (paramType == ParameterType.POS ||
                paramType == ParameterType.ROT ||
                paramType == ParameterType.SCALE)

            {
                if (nodeType == NodeType.LIGHT) // do transform for lights to katana differently
                {
                    Transform obj = sceneObject.transform;

                    Vector3    pos = obj.localPosition;
                    Quaternion rot = obj.localRotation;
                    Vector3    scl = obj.localScale;

                    Quaternion rotY180 = Quaternion.AngleAxis(180, Vector3.up);
                    rot = rot * rotY180;
                    float   angle = 0;
                    Vector3 axis  = Vector3.zero;
                    rot.ToAngleAxis(out angle, out axis);

                    sendMessageQueue.Add(Encoding.UTF8.GetBytes(String.Format(lightTransRotTemplate,
                                                                              dagPath,
                                                                              (-pos.x + " " + pos.y + " " + pos.z),
                                                                              (angle + " " + axis.x + " " + -axis.y + " " + -axis.z),
                                                                              (scl.x + " " + scl.y + " " + scl.z))));
                }
                else if (nodeType == NodeType.CAMERA) // do camera different too --> in fact is the same as for lights??
                {
                    Transform obj = sceneObject.transform;

                    Vector3    pos = obj.localPosition;
                    Quaternion rot = obj.localRotation;
                    Vector3    scl = obj.localScale;

                    Quaternion rotY180 = Quaternion.AngleAxis(180, Vector3.up);
                    rot = rot * rotY180;
                    float   angle = 0;
                    Vector3 axis  = Vector3.zero;
                    rot.ToAngleAxis(out angle, out axis);

                    sendMessageQueue.Add(Encoding.UTF8.GetBytes(String.Format(camTransRotTemplate,
                                                                              dagPath,
                                                                              (-pos.x + " " + pos.y + " " + pos.z),
                                                                              (angle + " " + axis.x + " " + -axis.y + " " + -axis.z),
                                                                              (scl.x + " " + scl.y + " " + scl.z))));
                }
                else
                {
                    Transform obj = sceneObject.transform;

                    Vector3    pos = obj.localPosition;
                    Quaternion rot = obj.localRotation;
                    Vector3    scl = obj.localScale;

                    float   angle = 0;
                    Vector3 axis  = Vector3.zero;
                    rot.ToAngleAxis(out angle, out axis);

                    sendMessageQueue.Add(Encoding.UTF8.GetBytes(String.Format(objTemplateQuat,
                                                                              dagPath,
                                                                              (-pos.x + " " + pos.y + " " + pos.z),
                                                                              (angle + " " + axis.x + " " + -axis.y + " " + -axis.z),
                                                                              (scl.x + " " + scl.y + " " + scl.z))));
                }
            }
            else if (paramType == ParameterType.ANGLE ||
                     paramType == ParameterType.COLOR ||
                     paramType == ParameterType.INTENSITY ||
                     paramType == ParameterType.RANGE ||
                     paramType == ParameterType.EXPOSURE ||
                     paramType == ParameterType.FOV)
            {
                if (nodeType == NodeType.LIGHT)
                {
                    SceneObjectLight sol       = (SceneObjectLight)sceneObject;
                    Light            light     = sol.SourceLight;
                    LightTypeKatana  lightType = (LightTypeKatana)(light.type);

                    if (sol.isAreaLight)
                    {
                        lightType = LightTypeKatana.rect;
                    }

                    sendMessageQueue.Add(Encoding.UTF8.GetBytes(String.Format(lightIntensityColorTemplate,
                                                                              dagPath,
                                                                              (lightType).ToString(),
                                                                              light.color.r + " " + light.color.g + " " + light.color.b,
                                                                              light.intensity / VPETSettings.Instance.lightIntensityFactor,
                                                                              sol.exposure,
                                                                              light.spotAngle)));
                }
                else if (nodeType == NodeType.CAMERA)
                {
                    SceneObjectCamera sol = (SceneObjectCamera)sceneObject;

                    sendMessageQueue.Add(Encoding.UTF8.GetBytes(String.Format(camFOVTemplate,
                                                                              dagPath,
                                                                              Extensions.vFovToHFov(sol.fov, 16, 9))));
                }
            }
        }
コード例 #8
0
ファイル: ObjectSenderBasic.cs プロジェクト: k4keshaw/VPET
        public override void SendObject(byte cID, SceneObject sceneObject, ParameterType paramType, bool sendParent, Transform parent)
        {
#if SCENE_HOST
            if (sceneObject && paramType != ParameterType.LOCK)
            {
                if (!sceneObject.selected)
                {
                    sceneObject.unlockTime = 0.5f;
                    sceneObject.selected   = true;
                    SendObject(cID, sceneObject, ParameterType.LOCK, sendParent, parent);
                }
            }
#endif
            byte[] msg = null;
            switch (paramType)
            {
            case ParameterType.POS:
            {
                Vector3 locPos;
                if (sendParent)
                {
                    locPos = sceneObject.transform.position - parent.position;
                }
                else
                {
                    locPos = sceneObject.transform.localPosition;
                }

                msg = new byte[18];

                msg[0] = cID;
                msg[1] = (byte)paramType;
                Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(locPos.x), 0, msg, 6, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(locPos.y), 0, msg, 10, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(locPos.z), 0, msg, 14, 4);
            }
            break;

            case ParameterType.ROT:
            {
                Quaternion locRot;
                if (sendParent)
                {
                    locRot = Quaternion.Inverse(parent.rotation) * sceneObject.transform.rotation;
                }
                else
                {
                    locRot = sceneObject.transform.localRotation;
                }
                msg = new byte[22];

                msg[0] = cID;
                msg[1] = (byte)paramType;
                Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(locRot.x), 0, msg, 6, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(locRot.y), 0, msg, 10, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(locRot.z), 0, msg, 14, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(locRot.w), 0, msg, 18, 4);
            }
            break;

            case ParameterType.SCALE:
            {
                Vector3 locScale = sceneObject.transform.localScale;
                msg = new byte[18];

                msg[0] = cID;
                msg[1] = (byte)paramType;
                Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(locScale.x), 0, msg, 6, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(locScale.y), 0, msg, 10, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(locScale.z), 0, msg, 14, 4);
            }
            break;

            case ParameterType.LOCK:
            {
                msg = new byte[7];

                msg[0] = cID;
                msg[1] = (byte)paramType;
                Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                msg[6] = Convert.ToByte(sceneObject.selected);
            }
            break;

            case ParameterType.HIDDENLOCK:
            {
                msg = new byte[7];

                msg[0] = cID;
                msg[1] = (byte)paramType;
                Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                msg[6] = Convert.ToByte(sceneObject.isPhysicsActive || sceneObject.isPlayingAnimation);
            }
            break;

            case ParameterType.KINEMATIC:
            {
                msg = new byte[7];

                msg[0] = cID;
                msg[1] = (byte)paramType;
                Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                msg[6] = Convert.ToByte(sceneObject.globalKinematic);
            }
            break;

            case ParameterType.FOV:
            {
                SceneObjectCamera soc = (SceneObjectCamera)sceneObject;
                if (soc)
                {
                    msg = new byte[10];

                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(soc.fov), 0, msg, 6, 4);
                }
            }
            break;

            case ParameterType.ASPECT:
            {
                SceneObjectCamera soc = (SceneObjectCamera)sceneObject;
                if (soc)
                {
                    msg = new byte[10];

                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(soc.aspect), 0, msg, 6, 4);
                }
            }
            break;

            case ParameterType.FOCUSDIST:
            {
                SceneObjectCamera soc = (SceneObjectCamera)sceneObject;
                if (soc)
                {
                    msg = new byte[10];

                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(soc.focDist), 0, msg, 6, 4);
                }
            }
            break;

            case ParameterType.FOCUSSIZE:
            {
                SceneObjectCamera soc = (SceneObjectCamera)sceneObject;
                if (soc)
                {
                    msg = new byte[10];

                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(soc.focSize), 0, msg, 6, 4);
                }
            }
            break;

            case ParameterType.APERTURE:
            {
                SceneObjectCamera soc = (SceneObjectCamera)sceneObject;
                if (soc)
                {
                    msg = new byte[10];

                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(soc.aperture), 0, msg, 6, 4);
                }
            }
            break;

            case ParameterType.COLOR:
            {
                SceneObjectLight sol = (SceneObjectLight)sceneObject;
                if (sol)
                {
                    Color color = sol.getLightColor();
                    msg = new byte[18];

                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(color.r), 0, msg, 6, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(color.g), 0, msg, 10, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(color.b), 0, msg, 14, 4);
                }
            }
            break;

            case ParameterType.INTENSITY:
            {
                SceneObjectLight sol = (SceneObjectLight)sceneObject;
                if (sol)
                {
                    msg = new byte[10];

                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(sol.getLightIntensity()), 0, msg, 6, 4);
                }
            }
            break;

            case ParameterType.EXPOSURE:
            {
                SceneObjectLight sol = (SceneObjectLight)sceneObject;
                if (sol)
                {
                    msg = new byte[10];

                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(sol.exposure), 0, msg, 6, 4);
                }
            }
            break;

            case ParameterType.RANGE:
            {
                SceneObjectLight sol = (SceneObjectLight)sceneObject;
                if (sol)
                {
                    msg = new byte[10];

                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(sol.getLightRange()), 0, msg, 6, 4);
                }
            }
            break;

            case ParameterType.ANGLE:
            {
                SceneObjectLight sol = (SceneObjectLight)sceneObject;
                if (sol)
                {
                    msg = new byte[10];

                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(sol.getLightAngle()), 0, msg, 6, 4);
                }
            }
            break;

            case ParameterType.BONEANIM:
            {
                Animator animator = sceneObject.gameObject.GetComponent <Animator>();

                if (animator)
                {
                    int numHBones = Enum.GetNames(typeof(HumanBodyBones)).Length - 1;
                    msg = new byte[18 + numHBones * 16];

                    //TODO: check what needs to be send here to support all character variants
                    Vector3 locPos = animator.bodyPosition;
                    msg[0] = cID;
                    msg[1] = (byte)paramType;
                    Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(locPos.x), 0, msg, 6, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(locPos.y), 0, msg, 10, 4);
                    Buffer.BlockCopy(BitConverter.GetBytes(locPos.z), 0, msg, 14, 4);
                    int offset = 12;

                    for (int i = 0; i < numHBones; i++)
                    {
                        Transform t = animator.GetBoneTransform((HumanBodyBones)i);
                        if (t)
                        {
                            Buffer.BlockCopy(BitConverter.GetBytes(t.localRotation.x), 0, msg, offset + 6, 4);
                            Buffer.BlockCopy(BitConverter.GetBytes(t.localRotation.y), 0, msg, offset + 10, 4);
                            Buffer.BlockCopy(BitConverter.GetBytes(t.localRotation.z), 0, msg, offset + 14, 4);
                            Buffer.BlockCopy(BitConverter.GetBytes(t.localRotation.w), 0, msg, offset + 18, 4);
                            offset += 16;
                        }
                    }
                }
            }
            break;

            case ParameterType.PING:
            {
                msg = new byte[2];

                msg[0] = cID;
                msg[1] = (byte)paramType;
            }
            break;

            case ParameterType.RESENDUPDATE:
            {
                msg = new byte[2];

                msg[0] = cID;
                msg[1] = (byte)paramType;
            }
            break;

            case ParameterType.CHARACTERTARGET:
            {
                Vector3 targetPos = sceneObject.targetTranslation;

                msg = new byte[18];

                msg[0] = cID;
                msg[1] = (byte)paramType;
                Buffer.BlockCopy(BitConverter.GetBytes((Int32)sceneObject.id), 0, msg, 2, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(targetPos.x), 0, msg, 6, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(targetPos.y), 0, msg, 10, 4);
                Buffer.BlockCopy(BitConverter.GetBytes(targetPos.z), 0, msg, 14, 4);
            }
            break;

            default:
            {
                Debug.Log("Unknown paramType in ObjectSenderBasic:SendObject");
            }
            break;
            }
            if (msg != null)
            {
                sendMessageQueue.Add(msg);
            }
        }
コード例 #9
0
        private void parameterButtonHandle(IMenuButton button, int idx)
        {
            parameterMenu.reset();
            button.Toggled = true;

            // if point to move or link to camera mode switch to translation
            if (mainController.ActiveMode == MainController.Mode.pointToMoveMode || mainController.ActiveMode == MainController.Mode.objectLinkCamera)
            {
                mainController.ActiveMode = MainController.Mode.translationMode;
            }

            rangeSlider.MinValue = float.MinValue;
            rangeSlider.MaxValue = float.MaxValue;

            SceneObject sco = mainController.getCurrentSelection().GetComponent <SceneObject>();

            switch (idx)
            {
            case 0:     // X
                if (mainController.ActiveMode == MainController.Mode.translationMode)
                {
                    mainController.ConnectRangeSlider(sco, "TranslateX", 2f * VPETSettings.Instance.controllerSpeed);
                }
                else if (mainController.ActiveMode == MainController.Mode.scaleMode)
                {
                    mainController.ConnectRangeSlider(sco, "ScaleX", 0.02f);
                }
                else if (mainController.ActiveMode == MainController.Mode.rotationMode)
                {
                    mainController.ConnectRangeSlider(sco, "RotateX", 1f);
                }
                else if (mainController.ActiveMode == MainController.Mode.lightSettingsMode || mainController.ActiveMode == MainController.Mode.lookThroughLightMode)
                {
                    SceneObjectLight scl = (SceneObjectLight)sco;
                    if (scl)
                    {
                        lightSettingsWidget.hide();
                        mainController.ConnectRangeSlider(scl.setLightIntensity, scl.getLightIntensity(), 0.1f / VPETSettings.Instance.lightIntensityFactor);
                        rangeSlider.MinValue = 0f;
                    }
                }
                break;

            case 1:
                if (mainController.ActiveMode == MainController.Mode.translationMode)
                {
                    mainController.ConnectRangeSlider(sco, "TranslateY", 2f * VPETSettings.Instance.controllerSpeed);
                }
                else if (mainController.ActiveMode == MainController.Mode.scaleMode)
                {
                    mainController.ConnectRangeSlider(sco, "ScaleY", 0.02f);
                }
                else if (mainController.ActiveMode == MainController.Mode.rotationMode)
                {
                    mainController.ConnectRangeSlider(sco, "RotateY", 1f);
                }
                else if (mainController.ActiveMode == MainController.Mode.lightSettingsMode || mainController.ActiveMode == MainController.Mode.lookThroughLightMode)
                {
                    SceneObjectLight scl = (SceneObjectLight)sco;
                    if (scl)
                    {
                        lightSettingsWidget.hide();
                        mainController.ConnectRangeSlider(scl.setLightRange, scl.getLightRange(), 10f);
                        rangeSlider.MinValue = 0.1f;
                    }
                }
                break;

            case 2:
                if (mainController.ActiveMode == MainController.Mode.translationMode)
                {
                    mainController.ConnectRangeSlider(sco, "TranslateZ", 2f * VPETSettings.Instance.controllerSpeed);
                }
                else if (mainController.ActiveMode == MainController.Mode.scaleMode)
                {
                    mainController.ConnectRangeSlider(sco, "ScaleZ", 0.02f);
                }
                else if (mainController.ActiveMode == MainController.Mode.rotationMode)
                {
                    mainController.ConnectRangeSlider(sco, "RotateZ", 1f);
                }
                else if (mainController.ActiveMode == MainController.Mode.lightSettingsMode || mainController.ActiveMode == MainController.Mode.lookThroughLightMode)
                {
                    SceneObjectLight scl = (SceneObjectLight)sco;
                    if (scl)
                    {
                        lightSettingsWidget.hide();
                        mainController.ConnectRangeSlider(mainController.setLightParamAngle, scl.getLightAngle());
                        rangeSlider.MinValue = 1f;
                        rangeSlider.MaxValue = 179f;
                    }
                }
                break;

            case 3:
                if (mainController.ActiveMode == MainController.Mode.lightSettingsMode || mainController.ActiveMode == MainController.Mode.lookThroughLightMode)
                {
                    SceneObjectLight scl = (SceneObjectLight)sco;
                    if (scl)
                    {
                        hideRangeSlider();
                        lightSettingsWidget.SetSliderType(LightSettingsWidget.SliderType.COLOR);
                        lightSettingsWidget.show(mainController.getCurrentSelection().GetComponent <SceneObjectLight>());
                        //mainController.buttonLightColorClicked(button.Toggled);
                    }
                }
                break;
            }
        }