From e71b77df126539bdbc4aa86071a138605e4344a2 Mon Sep 17 00:00:00 2001 From: Gizeta <0w0@gizeta.tk> Date: Mon, 29 Dec 2014 19:53:44 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E7=B4=A2=E6=95=8C=E5=80=BC=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=A2=9E=E5=8A=A0=E5=B0=8F=E6=95=B0=E9=83=A8=E5=88=86?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KCV.ViewRangeCalc/CalcExtension.cs | 52 +++++++++++++++---- .../FleetToViewRangeConverter.cs | 33 ++++++++++++ KCV.ViewRangeCalc/KCV.ViewRangeCalc.csproj | 1 + KCV.ViewRangeCalc/KanColleWrapperHelper.cs | 20 ++++++- .../ViewRangeSelectorViewModel.cs | 19 +++---- 5 files changed, 105 insertions(+), 20 deletions(-) create mode 100644 KCV.ViewRangeCalc/FleetToViewRangeConverter.cs diff --git a/KCV.ViewRangeCalc/CalcExtension.cs b/KCV.ViewRangeCalc/CalcExtension.cs index 9ae2cd5..fab1dd1 100644 --- a/KCV.ViewRangeCalc/CalcExtension.cs +++ b/KCV.ViewRangeCalc/CalcExtension.cs @@ -1,5 +1,7 @@ using Grabacr07.KanColleViewer.ViewModels; using Grabacr07.KanColleViewer.ViewModels.Contents; +using Grabacr07.KanColleViewer.ViewModels.Contents.Fleets; +using Grabacr07.KanColleViewer.Views; using Grabacr07.KanColleViewer.Views.Settings; using Grabacr07.KanColleWrapper; using System; @@ -7,6 +9,7 @@ using System.Linq; using System.Windows; using System.Windows.Controls; +using System.Windows.Data; using System.Windows.Input; using KCVApp = Grabacr07.KanColleViewer.App; @@ -19,6 +22,7 @@ public class CalcExtension private ContentPresenter contentView; private ScrollViewer startSettingsView; private ContentControl mainSettingsView; + private ContentPresenter statusBarView; private CalcExtension() { @@ -46,16 +50,16 @@ private void CurrentKanColleClient_PropertyChanged(object sender, PropertyChange if(e.PropertyName=="IsStarted") { var proxy = KanColleClient.Current.Proxy; - proxy.api_port.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcTotalViewRange()); - proxy.api_get_member_ship.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcTotalViewRange()); - proxy.api_get_member_ship2.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcTotalViewRange()); - proxy.api_get_member_ship3.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcTotalViewRange()); - proxy.api_get_member_deck.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcTotalViewRange()); - proxy.api_get_member_deck_port.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcTotalViewRange()); - proxy.api_req_hensei_change.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcTotalViewRange()); - proxy.api_req_hokyu_charge.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcTotalViewRange()); - - ViewRangeSelectorViewModel.Instance.CalcTotalViewRange(); + proxy.api_port.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcAllTotalViewRange()); + proxy.api_get_member_ship.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcAllTotalViewRange()); + proxy.api_get_member_ship2.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcAllTotalViewRange()); + proxy.api_get_member_ship3.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcAllTotalViewRange()); + proxy.api_get_member_deck.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcAllTotalViewRange()); + proxy.api_get_member_deck_port.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcAllTotalViewRange()); + proxy.api_req_hensei_change.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcAllTotalViewRange()); + proxy.api_req_hokyu_charge.Subscribe(x => ViewRangeSelectorViewModel.Instance.CalcAllTotalViewRange()); + + ViewRangeSelectorViewModel.Instance.CalcAllTotalViewRange(); } } @@ -67,6 +71,34 @@ private void KCVWindow_ContentRendered(object sender, EventArgs e) KCVUIHelper.KCVContent.FindVisualChildren().Where(x => x.Name == "SettingsTab").First().Checked += StartSettingsTab_Checked; KCVUIHelper.KCVContent.FindVisualChildren().Where(x => x.DataContext is StartContentViewModel || x.DataContext is MainContentViewModel).First().DataContextChanged += ContentView_DataContextChanged; + + KCVUIHelper.KCVWindow.FindVisualChildren().First().FindVisualChildren().Last().DataContextChanged += StatusBar_DataContextChanged; + } + + private void StatusBar_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) + { + var bar = sender as ContentPresenter; + if (bar.Content is FleetsViewModel) + { + statusBarView = bar; + bar.LayoutUpdated += StatusBar_LayoutUpdated; + } + } + + private void StatusBar_LayoutUpdated(object sender, EventArgs e) + { + statusBarView.LayoutUpdated -= StatusBar_LayoutUpdated; + + var textBlock = statusBarView.FindVisualChildren() + .Where(x => x.GetBindingExpression(TextBlock.TextProperty) == null ? false : x.GetBindingExpression(TextBlock.TextProperty).ParentBinding.Path.Path == "TotalViewRange") + .First(); + + var losBinding = new Binding(); + losBinding.Path = new PropertyPath("TotalViewRange"); + losBinding.Converter = new FleetToViewRangeConverter(); + textBlock.SetBinding(TextBlock.TextProperty, losBinding); + + statusBarView = null; } private void ContentView_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) diff --git a/KCV.ViewRangeCalc/FleetToViewRangeConverter.cs b/KCV.ViewRangeCalc/FleetToViewRangeConverter.cs new file mode 100644 index 0000000..f01de13 --- /dev/null +++ b/KCV.ViewRangeCalc/FleetToViewRangeConverter.cs @@ -0,0 +1,33 @@ +using Grabacr07.KanColleViewer.ViewModels; +using System; +using System.Windows.Data; +using KCVApp = Grabacr07.KanColleViewer.App; + +namespace Gizeta.KCV.ViewRangeCalc +{ + public class FleetToViewRangeConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + var fleet = (KCVApp.ViewModelRoot.Content as MainContentViewModel).Fleets.SelectedFleet; + if (fleet != null) + { + var calcEx = ViewRangeSelectorViewModel.Instance; + if (calcEx.ViewRangeType1 || calcEx.ViewRangeType2) + { + return string.Format("{0}", fleet.GetViewRange()); + } + if (calcEx.ViewRangeType3 || calcEx.ViewRangeType4) + { + return string.Format("{0:0.##}", fleet.GetExactViewRange()); + } + } + return "0"; + } + + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/KCV.ViewRangeCalc/KCV.ViewRangeCalc.csproj b/KCV.ViewRangeCalc/KCV.ViewRangeCalc.csproj index 3f11b12..df7f989 100644 --- a/KCV.ViewRangeCalc/KCV.ViewRangeCalc.csproj +++ b/KCV.ViewRangeCalc/KCV.ViewRangeCalc.csproj @@ -74,6 +74,7 @@ + diff --git a/KCV.ViewRangeCalc/KanColleWrapperHelper.cs b/KCV.ViewRangeCalc/KanColleWrapperHelper.cs index 818c24c..485bf2c 100644 --- a/KCV.ViewRangeCalc/KanColleWrapperHelper.cs +++ b/KCV.ViewRangeCalc/KanColleWrapperHelper.cs @@ -1,4 +1,5 @@ -using Grabacr07.KanColleWrapper.Models; +using Grabacr07.KanColleViewer.ViewModels.Contents.Fleets; +using Grabacr07.KanColleWrapper.Models; using System; using System.Reflection; @@ -21,4 +22,21 @@ public static void SetTotalViewRange(this Fleet fleet, int value) type.GetProperty("TotalViewRange", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).SetValue(fleet, value); } } + + public static class FleetViewModelHelper + { + public static int GetViewRange(this FleetViewModel fleetViewModel) + { + Type type = typeof(FleetViewModel); + var fleet = type.GetField("source", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).GetValue(fleetViewModel) as Fleet; + return fleet.TotalViewRange; + } + + public static double GetExactViewRange(this FleetViewModel fleetViewModel) + { + Type type = typeof(FleetViewModel); + var fleet = type.GetField("source", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).GetValue(fleetViewModel) as Fleet; + return ViewRangeSelectorViewModel.Instance.CalcTotalViewRange(fleet); + } + } } diff --git a/KCV.ViewRangeCalc/ViewRangeSelectorViewModel.cs b/KCV.ViewRangeCalc/ViewRangeSelectorViewModel.cs index bbf233b..b749194 100644 --- a/KCV.ViewRangeCalc/ViewRangeSelectorViewModel.cs +++ b/KCV.ViewRangeCalc/ViewRangeSelectorViewModel.cs @@ -32,7 +32,7 @@ public bool ViewRangeType1 this.RaisePropertyChanged(); if (!value) - this.CalcTotalViewRange(); + this.CalcAllTotalViewRange(); } } } @@ -50,7 +50,7 @@ public bool ViewRangeType2 this.RaisePropertyChanged(); if (!value) - this.CalcTotalViewRange(); + this.CalcAllTotalViewRange(); } } } @@ -68,7 +68,7 @@ public bool ViewRangeType3 this.RaisePropertyChanged(); if (!value) - this.CalcTotalViewRange(); + this.CalcAllTotalViewRange(); } } } @@ -86,20 +86,21 @@ public bool ViewRangeType4 this.RaisePropertyChanged(); if (!value) - this.CalcTotalViewRange(); + this.CalcAllTotalViewRange(); } } } - public void CalcTotalViewRange() + public void CalcAllTotalViewRange() { foreach (var fleet in KanColleClient.Current.Homeport.Organization.Fleets) { - fleet.Value.SetTotalViewRange(calc(fleet.Value)); + var los = this.CalcTotalViewRange(fleet.Value); + fleet.Value.SetTotalViewRange((int)los); } } - private int calc(Fleet fleet) + public double CalcTotalViewRange(Fleet fleet) { if (fleet == null || fleet.Ships.Length == 0) return 0; @@ -213,7 +214,7 @@ private int calc(Fleet fleet) return Math.Sqrt(f.ViewRange - spotter - radar); }) * 1.69 - Math.Ceiling(KanColleClient.Current.Homeport.Admiral.Level / 5.0) * 5.0 * 0.61; - return (int)result; + return result; } if (ViewRangeType4) @@ -303,7 +304,7 @@ private int calc(Fleet fleet) return Math.Sqrt(f.ViewRange - spotter - radar); }) - KanColleClient.Current.Homeport.Admiral.Level * 0.4; - return (int)result; + return result; } return 0; From b58979fed1e8f050b3e1cd0b21518229d4327f8d Mon Sep 17 00:00:00 2001 From: Gizeta <0w0@gizeta.tk> Date: Mon, 29 Dec 2014 19:59:59 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E8=87=B3v1.1.0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +++ KCV.ViewRangeCalc/PluginLoader.cs | 2 +- KCV.ViewRangeCalc/Properties/AssemblyInfo.cs | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b6c0b7..bbdc2f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1 +1,4 @@ # 更新日志 + +## 1.1.0 -2014-12-29 +- [change] 索敌值显示增加小数部分 diff --git a/KCV.ViewRangeCalc/PluginLoader.cs b/KCV.ViewRangeCalc/PluginLoader.cs index 7eed07b..fe36063 100644 --- a/KCV.ViewRangeCalc/PluginLoader.cs +++ b/KCV.ViewRangeCalc/PluginLoader.cs @@ -6,7 +6,7 @@ namespace Gizeta.KCV.ViewRangeCalc [Export(typeof(IToolPlugin))] [ExportMetadata("Title", "KCV.ViewRangeCalc")] [ExportMetadata("Description", "KanColleViewer索敌值计算插件。")] - [ExportMetadata("Version", "1.0.0")] + [ExportMetadata("Version", "1.1.0")] [ExportMetadata("Author", "@Gizeta")] public class PluginLoader : IToolPlugin { diff --git a/KCV.ViewRangeCalc/Properties/AssemblyInfo.cs b/KCV.ViewRangeCalc/Properties/AssemblyInfo.cs index ba6f412..03f19bb 100644 --- a/KCV.ViewRangeCalc/Properties/AssemblyInfo.cs +++ b/KCV.ViewRangeCalc/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, // 方法是按如下所示使用“*”: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.1.0.1")] +[assembly: AssemblyFileVersion("1.1.0.1")]