Advertisement
Guest User

OVRAvatarView

a guest
Dec 7th, 2018
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. /**
  2. * Created Date: 9/18/2018
  3. * Author: Octavian Pintiliciuc
  4. *
  5. * Copyright (c) 2018 ATiStudios. All rights reserved.
  6. */
  7.  
  8. using System.Collections.Generic;
  9. using System.IO;
  10. using ATiStudios.Core;
  11. using UnityEngine;
  12.  
  13. namespace ATiStudios.MondlyVR.MultiplayerPhoton.Scripts {
  14. public class OVRAvatarView : BaseMonoBehaviour {
  15. private PhotonView _photonView;
  16. private OvrAvatar _ovrAvatar;
  17. private OvrAvatarRemoteDriver _ovrAvatarRemoteDriver;
  18. private List<byte[]> _packetData;
  19. private int _localSequence;
  20.  
  21. protected override void StartComponent() {
  22. base.StartComponent();
  23. this._packetData = new List<byte[]>();
  24. this._photonView = GetComponent<PhotonView>();
  25. if (this._photonView.isMine) {
  26. this._ovrAvatar = GetComponent<OvrAvatar>();
  27. this._ovrAvatar.RecordPackets = true;
  28. this._ovrAvatar.PacketRecorded += OnLocalAvatarPacketRecorded;
  29. this._ovrAvatar.StartWithControllers = false;
  30. this._ovrAvatar.oculusUserID = PlayerNetwork.Instance.SelectedAvatarId;
  31. } else {
  32. this._ovrAvatarRemoteDriver = GetComponent<OvrAvatarRemoteDriver>();
  33. }
  34. }
  35.  
  36. public void OnDisable() {
  37. if (this._photonView.isMine) {
  38. this._ovrAvatar.RecordPackets = false;
  39. this._ovrAvatar.PacketRecorded -= OnLocalAvatarPacketRecorded;
  40. }
  41. }
  42.  
  43. public void OnLocalAvatarPacketRecorded(object sender, OvrAvatar.PacketEventArgs args) {
  44. if (!PhotonNetwork.inRoom || PhotonNetwork.room.PlayerCount < 2 || !OvrAvatarSDKManager.Instance.IsInitialized) {
  45. return;
  46. }
  47.  
  48. using (MemoryStream outputStream = new MemoryStream()) {
  49. BinaryWriter writer = new BinaryWriter(outputStream);
  50.  
  51. var size = Oculus.Avatar.CAPI.ovrAvatarPacket_GetSize(args.Packet.ovrNativePacket);
  52. byte[] data = new byte[size];
  53. Oculus.Avatar.CAPI.ovrAvatarPacket_Write(args.Packet.ovrNativePacket, size, data);
  54.  
  55. writer.Write(this._localSequence++);
  56. writer.Write(size);
  57. writer.Write(data);
  58.  
  59. this._packetData.Add(outputStream.ToArray());
  60. }
  61. }
  62.  
  63. private void DeserializeAndQueuePacketData(byte[] data) {
  64. using (MemoryStream inputStream = new MemoryStream(data)) {
  65. BinaryReader reader = new BinaryReader(inputStream);
  66. int remoteSequence = reader.ReadInt32();
  67.  
  68. int size = reader.ReadInt32();
  69. byte[] sdkData = reader.ReadBytes(size);
  70.  
  71. System.IntPtr packet = Oculus.Avatar.CAPI.ovrAvatarPacket_Read((System.UInt32) data.Length, sdkData);
  72. this._ovrAvatarRemoteDriver.QueuePacket(remoteSequence, new OvrAvatarPacket {ovrNativePacket = packet});
  73. }
  74. }
  75.  
  76. public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) {
  77. if (stream.isWriting) {
  78. if (this._packetData.Count == 0) {
  79. return;
  80. }
  81.  
  82. stream.SendNext(this._packetData.Count);
  83.  
  84. foreach (byte[] b in this._packetData) {
  85. stream.SendNext(b);
  86. }
  87.  
  88. this._packetData.Clear();
  89. }
  90.  
  91. if (stream.isReading) {
  92. int num = (int) stream.ReceiveNext();
  93.  
  94. for (int counter = 0; counter < num; ++counter) {
  95. byte[] data = (byte[]) stream.ReceiveNext();
  96.  
  97. DeserializeAndQueuePacketData(data);
  98. }
  99. }
  100. }
  101. }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement