Esempio n. 1
0
        /// <summary>
        /// 주기적인 동기화를 위한 직렬화
        /// </summary>
        /// <param name="dataWriter">직렬화 데이터</param>
        /// <param name="syncType">주기적 동기화 타입</param>
        /// <returns>다른 유저에게 동기화될지 여부</returns>
        public bool OnViewPeriodicSyncSerialize(NetDataWriter dataWriter, PeriodicSyncType syncType)
        {
            var  firstPos = dataWriter.Length;
            bool isExist  = false;

            for (int i = 0; i < _viewPeriodicSyncs.Length; ++i)
            {
                var sync    = _viewPeriodicSyncs[i];
                var prevPos = dataWriter.Length;
                dataWriter.Write(true);

                var result = sync.OnViewPeriodicSyncSerialize(dataWriter);

                int hash = 0;

                if (syncType == PeriodicSyncType.Changed)
                {
                    hash = dataWriter.GetHashCode(prevPos, dataWriter.Length - prevPos);
                }

                if (result == true &&
                    (syncType == PeriodicSyncType.Always || (syncType == PeriodicSyncType.Changed && _viewPeriodicSyncHashs[i] != hash)))
                {
                    _viewPeriodicSyncHashs[i] = hash;
                    isExist = true;
                }
                else
                {
                    dataWriter.Length = prevPos;
                    dataWriter.Write(false);
                }
            }

            if (isExist == false)
            {
                dataWriter.Length = firstPos;
            }

            return(isExist);
        }