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(); }
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("クリップボードにコピーしました"); }); }