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()); }
void Start() { cubeList = new ConcurrentDictionary <string, GameObject>(); OpenRelayClient.Connect(); OpenRelayClient.OnSyncCall += OnRaiseEvent; StartCoroutine(LobbySequence()); }
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); } }
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)); } }
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); }
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(); }
protected virtual void OnDestroy() { OpenRelayClient.UnRegistCallbacks(this); }
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; }