VPet/VPet-Simulator.Core/Display/Main.xaml.cs

145 lines
4.7 KiB
C#
Raw Normal View History

2022-12-13 07:10:18 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace VPet_Simulator.Core
{
/// <summary>
/// Main.xaml 的交互逻辑
/// </summary>
2023-01-12 22:11:55 +00:00
public partial class Main : UserControl, IDisposable
2022-12-13 07:10:18 +00:00
{
2023-01-08 16:57:10 +00:00
/// <summary>
/// 游戏核心
/// </summary>
2022-12-13 07:10:18 +00:00
public GameCore Core;
2023-01-08 16:57:10 +00:00
/// <summary>
/// 菜单栏
/// </summary>
2023-01-11 13:10:18 +00:00
public ToolBar ToolBar;
/// <summary>
/// 菜单栏
/// </summary>
public MessageBar MsgBar;
2023-01-08 16:57:10 +00:00
/// <summary>
/// 刷新时间时会调用该方法
/// </summary>
public event Action<Main> TimeHandle;
/// <summary>
/// 刷新时间时会调用该方法,在所有任务处理完之后
/// </summary>
public event Action<Main> TimeUIHandle;
2022-12-13 07:10:18 +00:00
public Main(GameCore core)
{
InitializeComponent();
Core = core;
2023-01-11 13:10:18 +00:00
ToolBar = new ToolBar(this);
ToolBar.Visibility = Visibility.Collapsed;
UIGrid.Children.Add(ToolBar);
MsgBar = new MessageBar();
MsgBar.Visibility = Visibility.Collapsed;
UIGrid.Children.Add(MsgBar);
2022-12-14 18:17:13 +00:00
//TODO:锚定设置
2022-12-13 07:10:18 +00:00
Core.TouchEvent.Add(new TouchArea(new Point(138, 12), new Size(224, 176), DisplayTouchHead));
Core.TouchEvent.Add(new TouchArea(new Point(0, 0), new Size(500, 180), DisplayRaised, true));
var ig = Core.Graph.FindGraph(GraphCore.GraphType.Default, Core.Save.Mode);
PetGrid.Child = ig.This;
ig.Run(DisplayNomal);
2022-12-13 07:10:18 +00:00
EventTimer.Elapsed += EventTimer_Elapsed;
2022-12-14 18:17:13 +00:00
MoveTimer.Elapsed += MoveTimer_Elapsed;
}
2023-01-11 13:10:18 +00:00
public void Say(string text)
{
MsgBar.Show(Core.Save.Name, text);
}
2022-12-14 18:17:13 +00:00
private void MoveTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Core.Controller.MoveWindows(MoveTimerPoint.X, MoveTimerPoint.Y);
2022-12-13 07:10:18 +00:00
}
2023-01-13 14:45:42 +00:00
public Action DefaultClickAction;
2022-12-13 07:10:18 +00:00
bool isPress = false;
private void MainGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
isPress = true;
2022-12-14 18:17:13 +00:00
if (!IsNomal)
{//不是nomal! 可能会卡timer,所有全部timer清空下
MoveTimer.Stop();
MainGrid.MouseMove -= MainGrid_MouseMove;
}
2022-12-13 07:10:18 +00:00
Task.Run(() =>
{
2023-01-08 16:57:10 +00:00
Thread.Sleep(Core.Controller.PressLength);
2022-12-13 07:10:18 +00:00
Point mp = default;
Dispatcher.BeginInvoke(new Action(() => mp = Mouse.GetPosition(MainGrid))).Wait();
if (isPress)
{//历遍长按事件
var act = Core.TouchEvent.FirstOrDefault(x => x.IsPress == true && x.Touch(mp));
if (act != null)
Dispatcher.BeginInvoke(act.DoAction);
}
else
{//历遍点击事件
var act = Core.TouchEvent.FirstOrDefault(x => x.IsPress == false && x.Touch(mp));
if (act != null)
Dispatcher.Invoke(act.DoAction);
else
2023-01-13 14:45:42 +00:00
DefaultClickAction?.Invoke();
2022-12-13 07:10:18 +00:00
}
});
}
private void MainGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
isPress = false;
2022-12-14 18:17:13 +00:00
if (rasetype != -1)
2022-12-13 07:10:18 +00:00
{
MainGrid.MouseMove -= MainGrid_MouseMove;
rasetype = -1;
DisplayRaising();
2022-12-13 07:10:18 +00:00
}
}
private void MainGrid_MouseMove(object sender, MouseEventArgs e)
{
var mp = e.GetPosition(MainGrid);
2022-12-14 18:17:13 +00:00
var x = mp.X - 290;//TODO:锚定设置
2022-12-13 07:10:18 +00:00
var y = mp.Y - 128;
Core.Controller.MoveWindows(x, y);
if (Math.Abs(x) + Math.Abs(y) > 10)
rasetype = 0;
}
2023-01-11 13:44:16 +00:00
private void MainGrid_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
ToolBar.Show();
}
2023-01-12 22:11:55 +00:00
public void Dispose()
{
EventTimer.Stop();
MoveTimer.Stop();
EventTimer.Dispose();
MoveTimer.Dispose();
if (PetGrid.Child is IGraph g)
g.Stop();
if (PetGrid2.Child is IGraph g2)
g2.Stop();
}
2022-12-13 07:10:18 +00:00
}
}