public async Task SetUpAsync()
        {
            _bookUseNotificator = new BookUseNotificator(BookUseNotifySoundFilePath)
            {
                IsEnabled = IsNotifyBookUses.Value
            };
            _enchantSpellUseNotificator = new EnchantSpellUseNotificator(EnchantSpellUseNotifySoundFilePath)
            {
                NotifyTimeSpan         = EnchantSpellNotifyTimeSpan.Value ?? TimeSpan.Zero,
                IsEnchantNotifyEnabled = IsNotifyEnchantUses.Value,
                IsSpellNotifyEnabled   = IsNotifySpellUses.Value
            };

            if (EnchantSpellNotifyTimeSpan.Value == TimeSpan.Zero)
            {
                EnchantSpellNotifyTimeSpan.Value = TimeSpan.FromSeconds(10);
            }

            _skillUseService                     = new SkillCountService();
            _skillUseService.WarStarted         += _skillUseService_WarStarted;
            _skillUseService.WarCanceled        += _skillUseService_WarCanceled;
            _skillUseService.WarFinished        += _skillUseService_WarFinished;
            _skillUseService.SkillUsed          += _skillUseService_SkillCountIncremented;
            _skillUseService.SkillsUpdated      += _skillUseService_SkillsUpdated;
            _skillUseService.PowDebuffsUpdated  += _skillUseService_PowDebuffsUpdated;
            _skillUseService.PowUpdated         += _skillUseService_PowUpdated;
            _skillUseService.HpUpdated          += _skillUseService_HpUpdated;
            _skillUseService.ProcessTimeUpdated += _skillUseService_FpsUpdated;
            _skillUseService.KeepDamageUpdated  += _skillUseService_KeepDamageUpdated;
            _skillUseService.BookUsesUpdated    += _skillUseService_BookUsesUpdated;

            SkillCountHistories.AddRangeOnScheduler(_skillCountRepository.GetSkillCounts());

            _skillCountFileRepository = await SkillCountFileRepository.CreateAsync(TxtFilePath, XmlFilePath);
        }
        private async Task SaveSkillCountAsync()
        {
            if (!CurrentSkillCollection.Any())
            {
                return;
            }

            var entity = new SkillCountEntity()
            {
                RecordDate       = DateTime.Now,
                MapName          = MapName.Value,
                WorkName         = WorkName.Value,
                Details          = CurrentSkillCollection.ToList(),
                SkillUseHitories = SkillUseCollection.ToList()
            };

            await _skillCountRepository.SaveAsync(entity);

            // 履歴に追加
            SkillCountHistories.AddOnScheduler(entity);

            // スキル使用履歴を
            SkillUseCollection.Clear();
        }
예제 #3
0
        public MainWindowViewModel()
        {
            _skillCountUseCase = new SkillCountUseCase();

            IsLoaded = new ReactivePropertySlim <bool>(false);
            MapName  = _skillCountUseCase.MapName
                       .Select(x => string.IsNullOrEmpty(x) ? "" : x)
                       .ToReadOnlyReactivePropertySlim();
            WorkName = _skillCountUseCase.WorkName
                       .Select(x => string.IsNullOrEmpty(x) ? "" : x)
                       .ToReadOnlyReactivePropertySlim();
            WarStatus         = _skillCountUseCase.WarStatus.ToReadOnlyReactivePropertySlim();
            AverageFps        = _skillCountUseCase.AverageFps.ToReadOnlyReactivePropertySlim();
            AttackKeepDamage  = _skillCountUseCase.AttackKeepDamage.ToReadOnlyReactivePropertySlim();
            DefenceKeepDamage = _skillCountUseCase.DefenceKeepDamage.ToReadOnlyReactivePropertySlim();
            IsBookUsing       = _skillCountUseCase.IsBookUsing.ToReadOnlyReactivePropertySlim();
            Pow        = _skillCountUseCase.Pow.ToReadOnlyReactivePropertySlim();
            Hp         = _skillCountUseCase.Hp.ToReadOnlyReactivePropertySlim();
            PowDebuffs = _skillCountUseCase.PowDebuffs
                         .Select(x => string.IsNullOrEmpty(x) ? "" : x)
                         .ToReadOnlyReactivePropertySlim();

            IsSkillCountFileSave = _skillCountUseCase.IsSkillCountFileSave.ToReactiveProperty();
            IsSkillCountFileSave.Subscribe(x =>
            {
                _skillCountUseCase.IsSkillCountFileSave.Value = x;
            });
            IsNotifyBookUses = _skillCountUseCase.IsNotifyBookUses.ToReactiveProperty();
            IsNotifyBookUses.Subscribe(x =>
            {
                _skillCountUseCase.IsNotifyBookUses.Value = x;
            });
            IsNotifyEnchantUses = _skillCountUseCase.IsNotifyEnchantUses.ToReactiveProperty();
            IsNotifyEnchantUses.Subscribe(x =>
            {
                _skillCountUseCase.IsNotifyEnchantUses.Value = x;
            });
            IsNotifySpellUses = _skillCountUseCase.IsNotifySpellUses.ToReactiveProperty();
            IsNotifySpellUses.Subscribe(x =>
            {
                _skillCountUseCase.IsNotifySpellUses.Value = x;
            });
            EnchantSpellNotifySecond = _skillCountUseCase.EnchantSpellNotifyTimeSpan
                                       .Select(x => (int)(x ?? TimeSpan.Zero).TotalSeconds)
                                       .ToReactiveProperty();
            EnchantSpellNotifySecond.Subscribe(x =>
            {
                _skillCountUseCase.EnchantSpellNotifyTimeSpan.Value = TimeSpan.FromSeconds(x);
            });
            IsAllwaysOnTop = _skillCountUseCase.IsAllwaysOnTop.ToReactiveProperty();
            IsAllwaysOnTop.Subscribe(x =>
            {
                _skillCountUseCase.IsAllwaysOnTop.Value = x;
            });
            IsDebugModeEnabled = _skillCountUseCase.IsDebugModeEnabled.ToReactiveProperty();
            IsDebugModeEnabled.Subscribe(x =>
            {
                _skillCountUseCase.IsDebugModeEnabled.Value = x;
            });

            IsWarriorFilter  = new ReactiveProperty <bool>(true);
            IsSorcererFilter = new ReactiveProperty <bool>(true);
            IsScoutFilter    = new ReactiveProperty <bool>(true);
            IsCestusFilter   = new ReactiveProperty <bool>(true);
            IsFencerFilter   = new ReactiveProperty <bool>(true);
            void doFilter(bool _)
            {
                var filterWorks = new List <string>();

                if (IsWarriorFilter.Value)
                {
                    filterWorks.Add("ウォーリアー");
                }
                if (IsSorcererFilter.Value)
                {
                    filterWorks.Add("ソーサラー");
                }
                if (IsScoutFilter.Value)
                {
                    filterWorks.Add("スカウト");
                }
                if (IsCestusFilter.Value)
                {
                    filterWorks.Add("セスタス");
                }
                if (IsFencerFilter.Value)
                {
                    filterWorks.Add("フェンサー");
                }

                SkillCountHistories?.Refresh(entity => filterWorks.Contains(entity.WorkName));
            }

            IsWarriorFilter.Subscribe(doFilter);
            IsSorcererFilter.Subscribe(doFilter);
            IsScoutFilter.Subscribe(doFilter);
            IsCestusFilter.Subscribe(doFilter);
            IsFencerFilter.Subscribe(doFilter);
            CurrentSkillCollection = _skillCountUseCase.CurrentSkillCollection.ToReadOnlyReactiveCollection();
            SkillCountHistories    = _skillCountUseCase.SkillCountHistories.ToFilteredReadOnlyObservableCollection(x =>
            {
                var filterWorks = new List <string>();
                if (IsWarriorFilter.Value)
                {
                    filterWorks.Add("ウォーリアー");
                }
                if (IsSorcererFilter.Value)
                {
                    filterWorks.Add("ソーサラー");
                }
                if (IsScoutFilter.Value)
                {
                    filterWorks.Add("スカウト");
                }
                if (IsCestusFilter.Value)
                {
                    filterWorks.Add("セスタス");
                }
                if (IsFencerFilter.Value)
                {
                    filterWorks.Add("フェンサー");
                }

                return(filterWorks.Contains(x.WorkName));
            });
            SelectedSkillCountHistory = new ReactiveProperty <SkillCountEntity>();
            SelectedSkillCountDatails = SelectedSkillCountHistory
                                        .Select(x => x != null ? x.Details : new List <SkillCountDetailEntity>())
                                        .ToReadOnlyReactivePropertySlim();

            LoadedCommand = new ReactiveCommand();
            LoadedCommand.Subscribe(async() =>
            {
                await _skillCountUseCase.SetUpAsync();
                _skillCountUseCase.StartSkillCounter();

                IsLoaded.Value = true;
            });

            ResetCommand = new ReactiveCommand();
            ResetCommand.Subscribe(async() =>
            {
                await _skillCountUseCase.ResetSkillCountAsync();
            });

            CopySkillCountsCommand = SelectedSkillCountHistory
                                     .Select(x => x != null)
                                     .ToReactiveCommand();
            CopySkillCountsCommand.Subscribe(o =>
            {
                var entities = ((System.Collections.IList)o).Cast <SkillCountEntity>();
                _skillCountUseCase.CopySkillCountToClipboard(entities);

                MessageQueue.Enqueue("クリップボードにコピーしました");
            });
        }