using IWshRuntimeLibrary; using LinePutScript.Localization.WPF; using Panuon.WPF; using Panuon.WPF.UI; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using VPet_Simulator.Core; using VPet_Simulator.Windows.Interface; using static VPet_Simulator.Core.GraphCore; using static VPet_Simulator.Core.IGraph; namespace VPet_Simulator.Windows { /// /// winBetterBuy.xaml 的交互逻辑 /// public partial class winBetterBuy : WindowX { private TextBox _searchTextBox; MainWindow mw; private bool AllowChange = false; private Switch _puswitch; public winBetterBuy(MainWindow mw) { InitializeComponent(); this.mw = mw; LsbSortRule.SelectedIndex = mw.Set["betterbuy"].GetInt("lastorder"); LsbSortAsc.SelectedIndex = mw.Set["betterbuy"].GetBool("lastasc") ? 0 : 1; AllowChange = true; } public void Show(Food.FoodType type) { mw.Topmost = false; if (_searchTextBox != null) _searchTextBox.Text = ""; if (LsbCategory.SelectedIndex == (int)type) OrderItemSource(type, LsbSortRule.SelectedIndex, LsbSortAsc.SelectedIndex == 0); else LsbCategory.SelectedIndex = (int)type; Show(); } public void OrderItemSource(Food.FoodType type, int sortrule, bool sortasc, string searchtext = null) { Task.Run(() => { List foods; switch (type) { case Food.FoodType.Food: foods = mw.Foods; break; case Food.FoodType.Star: //List lf = new List(); //foreach (var sub in mw.Set["betterbuy"].FindAll("star")) //{ // var str = sub.Info; // var food = mw.Foods.FirstOrDefault(x => x.Name == str); // if (food != null) // lf.Add(food); //} //foods = lf; foods = mw.Foods.FindAll(x => x.Star); break; default: foods = mw.Foods.FindAll(x => x.Type == type); break; } if (!string.IsNullOrEmpty(searchtext)) { foods = foods.FindAll(x => x.TranslateName.Contains(searchtext)); } IOrderedEnumerable ordered; switch (sortrule) { case 0: if (sortasc) ordered = foods.OrderBy(x => x.TranslateName); else ordered = foods.OrderByDescending(x => x.TranslateName); break; case 1: if (sortasc) ordered = foods.OrderBy(x => x.Price); else ordered = foods.OrderByDescending(x => x.Price); break; case 2: if (sortasc) ordered = foods.OrderBy(x => x.StrengthFood); else ordered = foods.OrderByDescending(x => x.StrengthFood); break; case 3: if (sortasc) ordered = foods.OrderBy(x => x.StrengthDrink); else ordered = foods.OrderByDescending(x => x.StrengthDrink); break; case 4: if (sortasc) ordered = foods.OrderBy(x => x.Strength); else ordered = foods.OrderByDescending(x => x.Strength); break; case 5: if (sortasc) ordered = foods.OrderBy(x => x.Feeling); else ordered = foods.OrderByDescending(x => x.Feeling); break; default: if (sortasc) ordered = foods.OrderBy(x => x.Health); else ordered = foods.OrderByDescending(x => x.Health); break; } Dispatcher.Invoke(() => { IcCommodity.ItemsSource = ordered; }); }); } //private void RbtnIncrease_Click(object sender, RoutedEventArgs e) //{ // var repeatButton = sender as RepeatButton; // var item = repeatButton.DataContext as BetterBuyItem; // item.Quantity = Math.Max(1, item.Quantity + 1); //} //private void RbtnDecrease_Click(object sender, RoutedEventArgs e) //{ // var repeatButton = sender as RepeatButton; // var item = repeatButton.DataContext as BetterBuyItem; // item.Quantity = Math.Max(1, item.Quantity - 1); //} private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e) { var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta); eventArg.RoutedEvent = UIElement.MouseWheelEvent; eventArg.Source = sender; PageDetail.RaiseEvent(eventArg); } private void BtnBuy_Click(object sender, RoutedEventArgs e) { var Button = sender as Button; var item = Button.DataContext as Food; //看是什么模式 if (mw.Set.EnableFunction) { if (item.Price >= mw.Core.Save.Money) {//买不起 MessageBoxX.Show("您没有足够金钱来购买 {0}\n您需要 {1:f2} 金钱来购买\n您当前 {2:f2} 拥有金钱" .Translate(item.TranslateName, item.Price, mw.Core.Save.Money) , "金钱不足".Translate()); return; } //开始加点 mw.Core.Save.EatFood(item); mw.Core.Save.Money -= item.Price; } if (!_puswitch.IsChecked.Value) TryClose(); var ig = mw.Core.Graph.FindGraph(item.Type == Food.FoodType.Drink ? GraphType.Drink : GraphType.Eat, mw.Core.Save.Mode); if (ig is IRunImage iri) { var b = mw.Main.FindDisplayBorder(iri); iri.Run(b, item.ImageSource, mw.Main.DisplayToNomal); } else { mw.Main.Display(ig, mw.Main.DisplayToNomal); } } private void BtnSearch_Click(object sender, RoutedEventArgs e) { Search(); } private void BtnTitle_Click(object sender, RoutedEventArgs e) { _searchTextBox.Text = ""; Search(); } private void Search() { OrderItemSource((Food.FoodType)LsbCategory.SelectedIndex, LsbSortRule.SelectedIndex, LsbSortAsc.SelectedIndex == 0, _searchTextBox.Text); } private void TbTitleSearch_Loaded(object sender, RoutedEventArgs e) { _searchTextBox = sender as TextBox; } private void LsbSortRule_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!AllowChange) return; int order = LsbSortRule.SelectedIndex; bool asc = LsbSortAsc.SelectedIndex == 0; mw.Set["betterbuy"].SetInt("lastorder", order); mw.Set["betterbuy"].SetBool("lastasc", asc); OrderItemSource((Food.FoodType)LsbCategory.SelectedIndex, order, asc, _searchTextBox?.Text); } public void TryClose() { IcCommodity.ItemsSource = null; mw.Topmost = mw.Set.TopMost; Hide(); } private void WindowX_Closing(object sender, System.ComponentModel.CancelEventArgs e) { TryClose(); e.Cancel = true; } private void Switch_Loaded(object sender, RoutedEventArgs e) { _puswitch = sender as Switch; _puswitch.IsChecked = mw.Set["betterbuy"].GetBool("noautoclose"); } private void Switch_Checked(object sender, RoutedEventArgs e) { mw.Set["betterbuy"].SetBool("noautoclose", _puswitch.IsChecked.Value); } } }