public override void OnReadyNewPlayer()
        {
            Debug.Log("OnReadyNewPlayer");

            var prefab = (GameObject)Resources.Load("Cube");
            foreach (var p in OpenRelayClient.PlayerList.OrderBy(p => p.ID))
            {
                // プレハブからインスタンスを生成
                var transform = GetCradle(p.ID);
                var c = UnityEngine.Object.Instantiate(prefab, transform.position, Quaternion.identity);
                var cube = c.GetComponent<Cube>();
                cubeList.TryAdd(p.ID.ToString(), c);
                if (p.ID == OpenRelayClient.Player.ID)
                {
                    currentObjectId = OpenRelayClient.AllocateObjectId();
                    cube.Initialize(true, (UInt16)p.ID, autoRolling);
                    cube.SwitchVoice(useVoice);
                    var micorophoneIndex = 0;
                    if (useVoice) c.GetComponent<VoiceRecorder>().StartRecorder((UInt16)p.ID, 2, micorophoneIndex);
                }
                else
                {
                    cube.Initialize(false, (UInt16)p.ID, false);
                    cube.SwitchVoice(useVoice);
                    if (useVoice) c.GetComponent<VoicePlayer>().StartPlayer((UInt16)p.ID, 2);
                }
                c.SetActive(true);
            }

            OpenRelayClient.IsMessageQueueRunning = true;
            StartCoroutine(CallSyncHeartbeat());
        }
Пример #2
0
 void Start()
 {
     cubeList = new ConcurrentDictionary <string, GameObject>();
     OpenRelayClient.Connect();
     OpenRelayClient.OnSyncCall += OnRaiseEvent;
     StartCoroutine(LobbySequence());
 }
Пример #3
0
        public override void OnReadyNewPlayer()
        {
            Debug.Log("OnReadyNewPlayer");

            var prefab = (GameObject)Resources.Load("Cube");

            foreach (var p in OpenRelayClient.PlayerList)
            {
                // プレハブからインスタンスを生成
                var c = UnityEngine.Object.Instantiate(prefab, new Vector3(-7f + p.ID, 0f, 1f + p.ID), Quaternion.identity);
                if (p.ID == OpenRelayClient.Player.ID)
                {
                    currentObjectId = OpenRelayClient.AllocateObjectId();
                    c.GetComponent <VoiceRecorder>().StartRecorder((UInt16)p.ID, 1);
                }
                else
                {
                    c.GetComponent <VoicePlayer>().StartPlayer((UInt16)p.ID, 1);
                }
                cubeList.TryAdd(p.ID.ToString(), c);
                c.SetActive(true);
            }

            OpenRelayClient.IsMessageQueueRunning = true;
            StartCoroutine(CallRaiseEvent());
        }
 IEnumerator CallSyncHeartbeat()
 {
     while (true)
     {
         if (OpenRelayClient.inRoom)
         {
             OpenRelayClient.Sync((byte)EventType.Heatbeat, BitConverter.GetBytes(0), currentObjectId, OpenRelayClient.BroadcastFilter.Default);
         }
         yield return new WaitForSeconds(2f);
     }
 }
Пример #5
0
 IEnumerator CallRaiseEvent()
 {
     while (true)
     {
         if (OpenRelayClient.inRoom)
         {
             OpenRelayClient.Sync(0, System.Text.Encoding.ASCII.GetBytes("2"), currentObjectId, OpenRelayClient.BroadcastFilter.Default);
         }
         yield return(new WaitForSeconds(0.05f));
     }
 }
Пример #6
0
        IEnumerator LobbySequence()
        {
            OpenRelayClient.JoinEntry();
            while (true)
            {
                if (lobbyJoined)
                {
                    break;
                }
                yield return(new WaitForSeconds(0.5f));
            }
            var option = new OpenRelay.RoomOptions();

            OpenRelayClient.CreateOrJoinRoom("CycleCube", option, (byte)5);
            while (true)
            {
                if (roomCreated)
                {
                    break;
                }
                yield return(new WaitForSeconds(0.5f));
            }
            yield return(null);
        }
Пример #7
0
        public void SyncTransform()
        {
            if (!owner)
            {
                return;
            }

            var delta = Delta.None;

            if (beforePosition != transform.position)
            {
                delta |= Delta.Position;
            }
            //Debug.Log(beforePosition + ":" + transform.position);
            if (beforeRotation != transform.rotation)
            {
                delta |= Delta.Rotation;
            }
            //Debug.Log(beforeRotation + ":" + transform.rotation);
            if (beforeScale != transform.localScale)
            {
                delta |= Delta.Scale;
            }
            //Debug.Log(beforeScale + ":" + transform.localScale);

            if (delta == Delta.None)
            {
                return;
            }

            Debug.Log("called");

            //var messageBytes = new byte[sizeof(float) * 3 + sizeof(float) * 4];
            var stream  = new MemoryStream(transformBytes);
            var message = new EndiannessBinaryWriter(stream);

            try
            {
                // 1byte
                message.Write((byte)delta);
                // alignment
                message.Write(alignment3);

                if (delta.HasFlag(Delta.Position))
                {
                    // 12byte
                    message.Write(transform.position.x);
                    message.Write(transform.position.y);
                    message.Write(transform.position.z);
                }

                if (delta.HasFlag(Delta.Rotation))
                {
                    // 16byte
                    message.Write(transform.rotation.x);
                    message.Write(transform.rotation.y);
                    message.Write(transform.rotation.z);
                    message.Write(transform.rotation.w);
                }

                if (delta.HasFlag(Delta.Scale))
                {
                    // 12byte
                    message.Write(transform.position.x);
                    message.Write(transform.position.y);
                    message.Write(transform.position.z);
                }

                OpenRelayClient.Sync((byte)EventType.TransformContent, transformBytes, (UInt16)playerId, OpenRelayClient.BroadcastFilter.Default);

                if (delta.HasFlag(Delta.Position))
                {
                    beforePosition = transform.position;
                }
                if (delta.HasFlag(Delta.Rotation))
                {
                    beforeRotation = transform.rotation;
                }
                if (delta.HasFlag(Delta.Scale))
                {
                    beforeScale = transform.localScale;
                }
            }
            catch (Exception e)
            {
                Debug.LogError("error: " + e.Message);
                Debug.LogError("stacktrace: " + e.StackTrace);
            }
            message.Close();
            stream.Close();
        }
Пример #8
0
 protected virtual void OnDestroy()
 {
     OpenRelayClient.UnRegistCallbacks(this);
 }
Пример #9
0
 protected virtual void Awake()
 {
     OpenRelayClient.RegistCallbacks(this);
 }
        //JoinComplete

        private void Leave()
        {
            OpenRelayClient.LeaveRoom();
        }
 //DisconnectComplete
 
 private void Join(string name)
 {
     var option = new OpenRelay.RoomOptions();
     OpenRelayClient.CreateOrJoinRoom(name, option, (byte)5);
 }
        //EntryComplete

        private void Disconnect()
        {
            OpenRelayClient.Disconnect();
        }
        //ConnectComplete

        private void Entry()
        {
            OpenRelayClient.JoinEntry();
        }
 private void Connect(string version, string serverAddress, string entryPort)
 {
     OpenRelayClient.Connect(version, serverAddress, entryPort);
     OpenRelayClient.OnSyncCall += OnSync;
 }