Beispiel #1
0
        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);
        }
Beispiel #2
0
 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;
        }