protected override BMSByte SerializeDirtyFields() { if (firstFrame) { BMSByte bmsByte = new BMSByte(); bmsByte = WritePayload(bmsByte); PTK.ArenaObservable.PlayerData _playerData = new PTK.ArenaObservable.PlayerData(); _playerData.BMSData = Convert.ToBase64String(bmsByte.CompressBytes()); _playerData.UID = PTK.Ansuz.Instance.UID; _playerData.RequestID = (int)PTK.AnsuzRequestID.CreatePlayer; PTK.ArenaObservable.PlayerData[] objs = { _playerData }; string json = _playerData.ToJson <PTK.ArenaObservable.PlayerData>(objs, false); PTK.Ansuz.Instance.PublishToTopic("arena/playerData/all", json, 0); firstFrame = false; } dirtyFieldsData.Clear(); dirtyFieldsData.Append(_dirtyFields); if ((0x1 & _dirtyFields[0]) != 0) { UnityObjectMapper.Instance.MapBytes(dirtyFieldsData, _position); } if ((0x2 & _dirtyFields[0]) != 0) { UnityObjectMapper.Instance.MapBytes(dirtyFieldsData, _rotation); } if ((0x4 & _dirtyFields[0]) != 0) { UnityObjectMapper.Instance.MapBytes(dirtyFieldsData, _spineRotation); } if ((0x8 & _dirtyFields[0]) != 0) { UnityObjectMapper.Instance.MapBytes(dirtyFieldsData, _vertical); } if ((0x10 & _dirtyFields[0]) != 0) { UnityObjectMapper.Instance.MapBytes(dirtyFieldsData, _horizontal); } if ((0x20 & _dirtyFields[0]) != 0) { UnityObjectMapper.Instance.MapBytes(dirtyFieldsData, _isMoving); } // Reset all the dirty fields for (int i = 0; i < _dirtyFields.Length; i++) { _dirtyFields[i] = 0; } return(dirtyFieldsData); }
public void SetupUID(int uid, bool isRemote = false) { UID = uid; frameSender.UID = uid; playerFrameTopic = "arena/frameData/" + uid; IsRemote = isRemote; if (IsRemote) { PTK.ArenaObservable.PlayerData frameReceiver = new PTK.ArenaObservable.PlayerData(); PTK.Ansuz.Instance.RegisterReceiver(playerFrameTopic, 0, frameReceiver); frameReceiver.MessageReceived += frameDataReceived; } }
void initAnszuClient() { if (!PTK.Ansuz.Ansuzinitialized) { ansuzClient = gameObject.AddComponent <PTK.Ansuz>(); PTK.ArenaObservable.PlayerData playerData = new PTK.ArenaObservable.PlayerData(); ansuzClient.RegisterReceiver("arena/playerData/all", 0, playerData); playerData.MessageReceived += playerDataReceived; _frameData.UID = PTK.Ansuz.Instance.UID; _frameData.RequestID = (int)PTK.AnsuzRequestID.SendFrameData; ansuzClient.RegisterTopic("arena/frameData/#", 0); ansuzClient.OnConnected += arenaConnected; ansuzClient.OnDisconnected += arenaDisonnected; ansuzClient.StartConnect(); } }
private void playerDataReceived(string msg) { PTK.ArenaObservable.PlayerData playerData = new PTK.ArenaObservable.PlayerData(); PTK.ArenaObservable.PlayerData[] objs = playerData.FromJson <PTK.ArenaObservable.PlayerData>(msg); BMSByte bmsByte = new BMSByte(); foreach (var data in objs) { bmsByte = bmsByte.Clone(System.Convert.FromBase64String(data.BMSData), 0); Binary frame = new Binary(Networker.Time.Timestep, false, bmsByte, Receivers.Target, 0, true); if (data.UID != ansuzClient.UID) { Debug.Log("other playerDataReceived :" + data.BMSData); switch (data.RequestID) { case (int)PTK.AnsuzRequestID.CreatePlayer: NetworkObject.Factory.NetworkCreateObject(Networker, 3, (uint)data.UID, frame, CreateObjects); /// and create current frame to new one MainThreadManager.Run(() => { if (OwnPlayer != null && OwnPlayer.networkObject != null) { OwnPlayer.networkObject.firstFrame = true; } }); break; default: Debug.Log("not definition request" + data.RequestID); break; } } frame = null; } bmsByte = null; playerData = null; }