コード例 #1
0
 public static void SendAudioFrame(AirVRCameraRig cameraRig, float[] data, int sampleCount, int channels, double timestamp)
 {
     if (cameraRig.isBoundToClient)
     {
         onairvr_EncodeAudioFrame(cameraRig.playerID, data, data.Length / channels, channels, AudioSettings.dspTime);
     }
 }
コード例 #2
0
    void Start()
    {
        List <AirVRServerStreamHandover.Streams> streams = new List <AirVRServerStreamHandover.Streams>();

        AirVRServerStreamHandover.TakeAllStreamsHandedOverInPrevScene(streams);
        foreach (var item in streams)
        {
            AirVRCameraRig selected = notifyCameraRigWillBeBound(item.playerID);
            if (selected != null)
            {
                _cameraRigList.RetainCameraRig(selected);
                selected.BindPlayer(item.playerID, item.mediaStream, item.inputStream);

                if (selected.isStreaming && Delegate != null)
                {
                    Delegate.AirVRCameraRigActivated(selected);
                }
            }
            else
            {
                onairvr_Disconnect(item.playerID);
            }
        }

        updateApplicationTargetFrameRate();

        _eventDispatcher.MessageReceived += onAirVRMessageReceived;
    }
コード例 #3
0
    public void AirVRCameraRigHasBeenUnbound(AirVRCameraRig cameraRig)
    {
        if (Event != null)
            Event.OnUnbound();

        Debug.Log("[CircleVRClient] Unbounded");
    }
コード例 #4
0
    public void AirVRCameraRigHasBeenUnbound(AirVRCameraRig cameraRig)
    {
        AirVRSamplePlayer player = cameraRig.GetComponentInParent <AirVRSamplePlayer>();

        player.EnableInteraction(false);

        music.Stop();
    }
    private void Awake()
    {
        _vrCameraRig = FindObjectOfType <AirVRCameraRig>();

        _button    = transform.Find("Canvas/Panel/Button").GetComponent <Button>();
        _indicator = transform.Find("Canvas/Panel/Indicator").GetComponent <Image>();

        _indicator.gameObject.SetActive(false);
    }
コード例 #6
0
    public static void EnableTrackedDeviceFeedback(AirVRCameraRig cameraRig, Device device, Texture2D cookieTexture, float depthScaleMultiplier)
    {
        if (isTrackedDevice(device) == false)
        {
            return;
        }

        cameraRig.inputStream.EnableTrackedDeviceFeedback(deviceName(device), cookieTexture, depthScaleMultiplier);
    }
コード例 #7
0
 public void AirVRCameraRigHasBeenUnbound(AirVRCameraRig cameraRig)
 {
     // NOTE : This event occurs in OnDestroy() of AirVRCameraRig during unloading scene.
     //        You should be careful because some objects in the scene might be destroyed already on this event.
     if (music != null)
     {
         music.Stop();
     }
 }
コード例 #8
0
    public void AirVRCameraRigActivated(AirVRCameraRig cameraRig)
    {
        // The sample onairvr client app just sends back what it receives.
        // (https://github.com/onairvr/onairvr-client-for-oculus-mobile)

        string pingMessage = "ping from " + System.Environment.MachineName;

        cameraRig.SendUserData(System.Text.Encoding.UTF8.GetBytes(pingMessage));
    }
コード例 #9
0
    private void onAirVRPlayerUserDataReceived(int playerID, AirVRServerMessage message)
    {
        AirVRCameraRig cameraRig = _cameraRigList.GetBoundCameraRig(playerID);

        if (cameraRig != null && Delegate != null)
        {
            Delegate.AirVRCameraRigUserDataReceived(cameraRig, message.Data_Decoded);
        }
    }
コード例 #10
0
    private static void GetTransform(AirVRCameraRig cameraRig, string deviceName, byte controlID, ref Vector3 worldPosition, ref Quaternion worldOrientation)
    {
        Vector3    position    = Vector3.zero;
        Quaternion orientation = Quaternion.identity;

        cameraRig.inputStream.GetTransform(deviceName, controlID, ref position, ref orientation);

        worldPosition    = cameraRig.clientSpaceToWorldMatrix.MultiplyPoint(position);
        worldOrientation = Quaternion.LookRotation(cameraRig.clientSpaceToWorldMatrix.GetColumn(2), cameraRig.clientSpaceToWorldMatrix.GetColumn(1)) * orientation;
    }
コード例 #11
0
 public void ReleaseCameraRig(AirVRCameraRig cameraRig)
 {
     if (_cameraRigsAvailable.ContainsKey(cameraRig.type) && _cameraRigsRetained.ContainsKey(cameraRig.type))
     {
         if (_cameraRigsRetained[cameraRig.type].Contains(cameraRig))
         {
             _cameraRigsRetained[cameraRig.type].Remove(cameraRig);
             _cameraRigsAvailable[cameraRig.type].Add(cameraRig);
         }
     }
 }
コード例 #12
0
    private void onAirVRPlayerDeactivated(int playerID, AirVRServerMessage message)
    {
        AirVRCameraRig cameraRig = _cameraRigList.GetBoundCameraRig(playerID);

        if (cameraRig != null && Delegate != null)
        {
            Delegate.AirVRCameraRigDeactivated(cameraRig);
        }

        updateApplicationTargetFrameRate();
    }
コード例 #13
0
    public void AirVRCameraRigHasBeenUnbound(AirVRCameraRig cameraRig)
    {
        AirVRSamplePlayer player = cameraRig.GetComponentInParent <AirVRSamplePlayer>();

        player.EnableInteraction(false);

        if (getBoundCameraRigCount() == 0)
        {
            music.Stop();
        }
        display.RemoveCameraPane(cameraRig as AirVRStereoCameraRig);
    }
コード例 #14
0
    public static void FeedbackTrackedDevice(AirVRCameraRig cameraRig, Device device, Vector3 worldRayOrigin, Vector3 worldHitPosition, Vector3 worldHitNormal)
    {
        if (isTrackedDevice(device) == false)
        {
            return;
        }

        cameraRig.inputStream.FeedbackTrackedDevice(deviceName(device), feedbackRaycastHitResultControlID(device),
                                                    cameraRig.clientSpaceToWorldMatrix.inverse.MultiplyPoint(worldRayOrigin),
                                                    cameraRig.clientSpaceToWorldMatrix.inverse.MultiplyPoint(worldHitPosition),
                                                    cameraRig.clientSpaceToWorldMatrix.inverse.MultiplyVector(worldHitNormal));
    }
コード例 #15
0
ファイル: AirVRSampleSimpleScene.cs プロジェクト: hon454/Luci
    public void AirVRCameraRigHasBeenUnbound(AirVRCameraRig cameraRig)
    {
        // NOTE : This event occurs in OnDestroy() of AirVRCameraRig during unloading scene.
        //        You should be careful because some objects in the scene might be destroyed already on this event.
        if (_sceneBeingUnloaded == false)
        {
            AirVRSamplePlayer player = cameraRig.GetComponentInParent <AirVRSamplePlayer>();
            player.EnableInteraction(false);

            music.Stop();
        }
    }
コード例 #16
0
    public void Raycast(AirVRCameraRig cameraRig)
    {
        RaycastHit hit = new RaycastHit();

        Ray ray = new Ray(cameraRig.rightHandAnchor.position, cameraRig.rightHandAnchor.forward);

        Debug.DrawLine(ray.origin, ray.direction * 500, Color.red);

        if (Physics.Raycast(ray, out hit, Mathf.Infinity))
        {
            mouseRayEvents.Invoke(hit.transform.gameObject);
        }
    }
コード例 #17
0
    public static void SetVibration(AirVRCameraRig cameraRig, Device device, AnimationCurve frequency, AnimationCurve amplitude)
    {
        switch (device)
        {
        case Device.LeftHandTracker:
            renderVibration(cameraRig, (byte)AirVRInputDeviceID.LeftHandTracker, (byte)AirVRHandTrackerFeedbackControl.Vibration, frequency, amplitude);
            break;

        case Device.RightHandTracker:
            renderVibration(cameraRig, (byte)AirVRInputDeviceID.RightHandTracker, (byte)AirVRHandTrackerFeedbackControl.Vibration, frequency, amplitude);
            break;
        }
    }
コード例 #18
0
    private static void renderVibration(AirVRCameraRig cameraRig, byte device, byte control, AnimationCurve frequency, AnimationCurve amplitude)
    {
        var fps      = cameraRig.GetConfig().framerate;
        var duration = Mathf.Max(frequency.keys[frequency.keys.Length - 1].time, amplitude.keys[amplitude.keys.Length - 1].time);

        for (float t = 0.0f; t < duration; t += 1.0f / fps)
        {
            cameraRig.inputStream.PendVibration(device, control, frequency.Evaluate(t), amplitude.Evaluate(t));
        }

        // make sure to end with no vibration
        cameraRig.inputStream.PendVibration(device, control, 0, 0);
    }
コード例 #19
0
    public static void SetVibration(AirVRCameraRig cameraRig, Device device, float frequency, float amplitude)
    {
        switch (device)
        {
        case Device.LeftHandTracker:
            cameraRig.inputStream.PendVibration((byte)AirVRInputDeviceID.LeftHandTracker, (byte)AirVRHandTrackerFeedbackControl.Vibration, frequency, amplitude);
            break;

        case Device.RightHandTracker:
            cameraRig.inputStream.PendVibration((byte)AirVRInputDeviceID.RightHandTracker, (byte)AirVRHandTrackerFeedbackControl.Vibration, frequency, amplitude);
            break;
        }
    }
コード例 #20
0
 public AirVRCameraRig RetainCameraRig(AirVRCameraRig cameraRig)
 {
     if (_cameraRigsAvailable.ContainsKey(cameraRig.type) && _cameraRigsRetained.ContainsKey(cameraRig.type))
     {
         if (_cameraRigsAvailable[cameraRig.type].Contains(cameraRig))
         {
             _cameraRigsAvailable[cameraRig.type].Remove(cameraRig);
             _cameraRigsRetained[cameraRig.type].Add(cameraRig);
             return(cameraRig);
         }
     }
     return(null);
 }
コード例 #21
0
    public static int GetScreenTouchCount(AirVRCameraRig cameraRig)
    {
        var count = 0;

        for (byte control = (byte)AirVRTouchScreenControl.TouchIndexStart; control <= (byte)AirVRTouchScreenControl.TouchIndexEnd; control++)
        {
            if (cameraRig.inputStream.IsActive((byte)AirVRInputDeviceID.TouchScreen, control) ||
                cameraRig.inputStream.GetDeactivated((byte)AirVRInputDeviceID.TouchScreen, control))
            {
                count++;
            }
        }
        return(count);
    }
コード例 #22
0
    public static Vector2 Get(AirVRCameraRig cameraRig, Axis2D axis)
    {
        switch (axis)
        {
        case Axis2D.LThumbstick:
            return(cameraRig.inputStream.GetAxis2D((byte)AirVRInputDeviceID.Controller, (byte)AirVRControllerControl.Axis2DLThumbstick));

        case Axis2D.RThumbstick:
            return(cameraRig.inputStream.GetAxis2D((byte)AirVRInputDeviceID.Controller, (byte)AirVRControllerControl.Axis2DRThumbstick));

        default:
            return(Vector2.zero);
        }
    }
コード例 #23
0
    public static bool IsDeviceAvailable(AirVRCameraRig cameraRig, Device device)
    {
        switch (device)
        {
        case Device.HeadTracker:
            return(true);

        case Device.LeftHandTracker:
        case Device.RightHandTracker:
            return(cameraRig.inputStream.GetState((byte)device, (byte)AirVRHandTrackerControl.Status) != 0);

        default:
            return(false);
        }
    }
コード例 #24
0
    private void Awake()
    {
        player  = FindObjectOfType <VideoPlayer>();
        pointer = FindObjectOfType <AirXRPointer>();

        if (!player)
        {
            Debug.LogError("Not Found Video Player");
            return;
        }

        rig = FindObjectOfType <AirVRCameraRig>();

        player.prepareCompleted += OnPrepareCompleted;
        player.seekCompleted    += Player_seekCompleted;
    }
コード例 #25
0
 public void AddUnboundCameraRig(AirVRCameraRig cameraRig)
 {
     if (_cameraRigsAvailable.ContainsKey(cameraRig.type) == false)
     {
         _cameraRigsAvailable.Add(cameraRig.type, new List <AirVRCameraRig>());
     }
     if (_cameraRigsRetained.ContainsKey(cameraRig.type) == false)
     {
         _cameraRigsRetained.Add(cameraRig.type, new List <AirVRCameraRig>());
     }
     if (_cameraRigsAvailable[cameraRig.type].Contains(cameraRig) == false &&
         _cameraRigsRetained[cameraRig.type].Contains(cameraRig) == false)
     {
         _cameraRigsAvailable[cameraRig.type].Add(cameraRig);
     }
 }
コード例 #26
0
    private void onAirVRPlayerCreated(int playerID, AirVRServerMessage message)
    {
        AirVRCameraRig selected = notifyCameraRigWillBeBound(playerID);

        if (selected != null)
        {
            _cameraRigList.RetainCameraRig(selected);
            selected.BindPlayer(playerID);

            onairvr_AcceptPlayer(playerID);
        }
        else
        {
            onairvr_Disconnect(playerID);
        }
    }
コード例 #27
0
    public void RemoveCameraRig(AirVRCameraRig cameraRig)
    {
        if (_cameraRigsAvailable.ContainsKey(cameraRig.type) == false ||
            _cameraRigsRetained.ContainsKey(cameraRig.type) == false)
        {
            return;
        }

        if (_cameraRigsAvailable[cameraRig.type].Contains(cameraRig))
        {
            _cameraRigsAvailable[cameraRig.type].Remove(cameraRig);
        }
        else if (_cameraRigsRetained[cameraRig.type].Contains(cameraRig))
        {
            _cameraRigsRetained[cameraRig.type].Remove(cameraRig);
        }
    }
コード例 #28
0
    public static void GetTrackedDevicePositionAndOrientation(AirVRCameraRig cameraRig, Device device, out Vector3 worldPosition, out Quaternion worldOrientation)
    {
        if (isTrackedDevice(device) == false)
        {
            worldPosition    = cameraRig.headPose.position;
            worldOrientation = cameraRig.headPose.rotation;
            return;
        }

        Vector3    pos = Vector3.zero;
        Quaternion rot = Quaternion.identity;

        GetTransform(cameraRig, deviceName(device), transformControlID(device), ref pos, ref rot);

        worldPosition    = pos;
        worldOrientation = rot;
    }
コード例 #29
0
    private void Awake()
    {
        _cameraRig = GetComponentInChildren <AirVRCameraRig>();
        if (_cameraRig == null)
        {
            return;
        }

        var head = _cameraRig.transform.Find("TrackingSpace/CenterEyeAnchor/Head");

        if (head != null)
        {
            _head = head.GetComponent <MeshRenderer>();
        }
        _leftController  = _cameraRig.transform.Find("TrackingSpace/LeftHandAnchor/Controller").GetComponent <MeshRenderer>();
        _rightController = _cameraRig.transform.Find("TrackingSpace/RightHandAnchor/Controller").GetComponent <MeshRenderer>();

        _leftControllerColor  = _leftController.material.color;
        _rightControllerColor = _rightController.material.color;
    }
コード例 #30
0
    private void onAirVRPlayerDestroyed(int playerID, AirVRServerMessage message)
    {
        AirVRCameraRig unboundCameraRig = _cameraRigList.GetBoundCameraRig(playerID);

        if (unboundCameraRig != null)
        {
            if (unboundCameraRig.isStreaming && Delegate != null)
            {
                Delegate.AirVRCameraRigDeactivated(unboundCameraRig);
            }

            unboundCameraRig.UnbindPlayer();
            _cameraRigList.ReleaseCameraRig(unboundCameraRig);

            if (Delegate != null)
            {
                Delegate.AirVRCameraRigHasBeenUnbound(unboundCameraRig);
            }
        }
    }