コード例 #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>();
            var controlStateData   = unit.GetData <ObjectControlStateData>();
            var controlProcessData = unit.GetData <ObjectKeyboardControlProcessData>();
            var stateProcessData   = unit.GetData <ObjectStateProcessData>();

            controlStateData.stateType.Subscribe(controlStateType =>
            {
                if (controlStateType == ObjectControlStateType.Start)
                {
                    controlProcessData.checkDispose = GameSystem.ObserveEveryUpdate().Subscribe(_ =>
                    {
                        foreach (var controlData in controlProcessData.controlDataList)
                        {
                            if (Input.GetKeyDown(controlData.key))
                            {
                                ObjectControlStateTypeDict.Set(unit, controlData.controlType, KeyStateType.Down);
                                ObjectControlState.CheckAllControl(unit, controlData.controlType, controlStateData,
                                                                   stateProcessData);
                            }
                            else if (Input.GetKeyUp(controlData.key))
                            {
                                ObjectControlStateTypeDict.Set(unit, controlData.controlType, KeyStateType.Up);
                                ObjectControlState.CheckAllControl(unit, controlData.controlType, controlStateData,
                                                                   stateProcessData);
                                ObjectControlStateTypeDict.Set(unit, controlData.controlType, KeyStateType.None);
                            }
                        }
                    });
                }
                else if (controlStateType == ObjectControlStateType.Finish)
                {
                    controlProcessData.checkDispose?.Dispose();
                }
            }).AddTo(unitData.disposable);
        }