コード例 #1
0
        protected override void OnAdd(GUnit unit)
        {
            _syncData = unit.GetData <ObjectSyncServerData>();
            var systemData = unit.GetData <SystemData>();
            var unitData   = unit.GetData <UnitData>();

            IDisposable preparedDispose = null;
            IDisposable updateDispose   = null;

            _syncData.enable.Subscribe(_ =>
            {
                if (_)
                {
                    updateDispose = GameSystem.ObserveEveryUpdate().Subscribe(time =>
                    {
                        var currentInternalFrame = _syncData.internalFrame + 1;
                        if (currentInternalFrame >= _syncData.internalFrameSize)
                        {
                            currentInternalFrame       = 0;
                            _syncData.currentKeyFrame += _syncData.currentKeyFrame > _syncData.serverKeyFrame ? 0 : 1;
                        }

                        var currentFrame = _syncData.currentKeyFrame * _syncData.internalFrameSize + currentInternalFrame;
                        if (currentFrame > systemData.serverFrame)
                        {
                            systemData.serverFrame = currentFrame;
                            _syncData.syncSubject.OnNext(ValueTuple.Create(_syncData.currentKeyFrame, currentInternalFrame));

                            _syncData.internalFrame = currentInternalFrame;
                        }
                    });

                    preparedDispose = _syncData.preparedSyncInfoList.ObserveAdd().Subscribe(stateInfo =>
                    {
                        SyncObjectState();
                    });
                }
                else
                {
                    updateDispose?.Dispose();
                    updateDispose = null;

                    preparedDispose?.Dispose();
                    preparedDispose = null;
                }
            }).AddTo(unitData.disposable);
        }
コード例 #2
0
        protected override void OnAdd(GUnit unit)
        {
            var unitData = unit.GetData <UnitData>();

            _syncData = unit.GetData <ObjectSyncServerData>();
            IDisposable updateServerKeyFrameDispose = null;

            _syncData.enable.Subscribe(_ =>
            {
                if (_)
                {
                    updateServerKeyFrameDispose = Observable.Interval(TimeSpan.FromMilliseconds(100)).Subscribe(time =>
                    {
                        _syncData.serverKeyFrame++;
                    });
                }
                else
                {
                    updateServerKeyFrameDispose?.Dispose();
                    updateServerKeyFrameDispose = null;
                }
            }).AddTo(unitData.disposable);
        }
コード例 #3
0
 protected override void OnRemove(GUnit unit)
 {
     _syncData.enable.Value = false;
     _syncData = null;
 }