public override void Initialize(NetworkObject obj) { // We have already initialized this object if (networkObject != null && networkObject.AttachedBehavior != null) { return; } networkObject = (LobbyPlayerNetworkObject)obj; networkObject.AttachedBehavior = this; base.SetupHelperRpcs(networkObject); networkObject.RegisterRpc("SetPosition", SetPosition, typeof(int)); networkObject.RegisterRpc("SetName", SetName, typeof(string)); networkObject.RegisterRpc("SetReady", SetReady, typeof(bool)); networkObject.RegisterRpc("SignalDisconnected", SignalDisconnected); networkObject.RegisterRpc("Disconnect", Disconnect); networkObject.onDestroy += DestroyGameObject; if (!obj.IsOwner) { if (!skipAttachIds.ContainsKey(obj.NetworkId)) { uint newId = obj.NetworkId + 1; ProcessOthers(gameObject.transform, ref newId); } else { skipAttachIds.Remove(obj.NetworkId); } } if (obj.Metadata != null) { byte transformFlags = obj.Metadata[0]; if (transformFlags != 0) { BMSByte metadataTransform = new BMSByte(); metadataTransform.Clone(obj.Metadata); metadataTransform.MoveStartIndex(1); bool changePos = (transformFlags & 0x01) != 0; bool changeRotation = (transformFlags & 0x02) != 0; if (changePos || changeRotation) { MainThreadManager.Run(() => { if (changePos) { transform.position = ObjectMapper.Instance.Map <Vector3>(metadataTransform); } if (changeRotation) { transform.rotation = ObjectMapper.Instance.Map <Quaternion>(metadataTransform); } }); } } } MainThreadManager.Run(() => { gameObject.SetActive(true); NetworkStart(); networkObject.Networker.FlushCreateActions(networkObject); }); }
public override void Initialize(NetworkObject obj) { // We have already initialized this object if (networkObject != null && networkObject.AttachedBehavior != null) { return; } networkObject = (LobbyPlayerNetworkObject)obj; networkObject.AttachedBehavior = this; base.SetupHelperRpcs(networkObject); networkObject.RegisterRpc("Draw", Draw, typeof(int), typeof(Vector2)); networkObject.RegisterRpc("PlayerReady", PlayerReady, typeof(int), typeof(int)); networkObject.onDestroy += DestroyGameObject; if (!obj.IsOwner) { if (!skipAttachIds.ContainsKey(obj.NetworkId)) { uint newId = obj.NetworkId + 1; ProcessOthers(gameObject.transform, ref newId); } else { skipAttachIds.Remove(obj.NetworkId); } } if (obj.Metadata != null) { byte transformFlags = obj.Metadata[0]; if (transformFlags != 0) { BMSByte metadataTransform = new BMSByte(); metadataTransform.Clone(obj.Metadata); metadataTransform.MoveStartIndex(1); if ((transformFlags & 0x01) != 0 && (transformFlags & 0x02) != 0) { MainThreadManager.Run(() => { transform.position = ObjectMapper.Instance.Map <Vector3>(metadataTransform); transform.rotation = ObjectMapper.Instance.Map <Quaternion>(metadataTransform); }); } else if ((transformFlags & 0x01) != 0) { MainThreadManager.Run(() => { transform.position = ObjectMapper.Instance.Map <Vector3>(metadataTransform); }); } else if ((transformFlags & 0x02) != 0) { MainThreadManager.Run(() => { transform.rotation = ObjectMapper.Instance.Map <Quaternion>(metadataTransform); }); } } } MainThreadManager.Run(() => { NetworkStart(); networkObject.Networker.FlushCreateActions(networkObject); }); }