public SelectTile ( Point point ) : |
||
point | Point | |
return |
public void Load(MainViewModel viewModel) { viewModel.CurrentTile = null; viewModel.Tiles.Clear(); viewModel.Tiles.Add(new TileViewModel() { Presenter = PresenterViewModel.Unused }); var spaceData = GetSpaceData(); foreach(var tile in spaceData.Tiles) { var tileVm = new TileViewModel(); tileVm.Position = new System.Windows.Point(tile.X, tile.Y); tileVm.Main = viewModel; if(tile.ForcedName != null) { tileVm.Description = tile.ForcedName; } tileVm.SelectedGestureTemplate = viewModel.GestureTemplates .FirstOrDefault(g => g.Name.Equals(tile.GestureTemplate, StringComparison.InvariantCultureIgnoreCase)); tileVm.SelectedPresenterTemplate = viewModel.PresenterTemplates .FirstOrDefault(g => g.Description.Equals(tile.PresenterTemplate, StringComparison.InvariantCultureIgnoreCase)); tileVm.FastContext = tile.Program; foreach(var evt in tile.Events) { var evtVm = tileVm.Events .FirstOrDefault(e => e.Name.Equals(evt.Name, StringComparison.InvariantCultureIgnoreCase)); if(evtVm != null) evtVm.Command.Script = evt.Command; } viewModel.Tiles.Add(tileVm); } viewModel.SelectTile(new System.Windows.Point(spaceData.LastX, spaceData.LastY)); }
void MainWindow_Loaded(object sender, RoutedEventArgs e) { Dispatcher.BeginInvoke(new Action(() => { listener = new ReactiveListener(); var spaceListener = new ReactiveSpace(listener); controller = new Controller(listener); ViewModel = new MainViewModel(spaceListener); var ui = SynchronizationContext.Current; //listener // .FingersMoves // .SelectMany(f => f.ToList().Select(l => // new // { // Key = f.Key, // Fingers = l // })) // .Subscribe(f => // { // Console.WriteLine("finger"); // try // { // //var max = f.Fingers.Select(ff => GetAngle(ff)).Where(a => a != null).Select(a => a.Value).Max(); // var av = f.Fingers.Select(ff => GetAngle(ff)).Where(a => a != null).Select(a => a.Value).Average(); // Console.WriteLine("av : " + ((int)av)); // } // catch // { // Console.WriteLine("Ex"); // } // }); var centers = listener .FingersMoves() .SelectMany(f => f) .Buffer(TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(100)) .Where(b => b.Count > 0) .Select(b => KeepPopularFinger(b)) .Select(v => new { Finger = v.First().Id, Position = new Leap.Vector(v.Average(m => m.StabilizedTipPosition.x), v.Average(m => m.StabilizedTipPosition.y), 0.0f), }); var moveCenter = listener .FingersMoves() .SelectMany(f => f) .CombineLatest(centers, ViewModel.SpaceListener.IsLocked(), (p, center, locked) => new { Center = center, Position = p.StabilizedTipPosition.To2D(), Move = p.StabilizedTipPosition.To2D() - center.Position, Locked = locked, Finger = p }) .Where(p => p.Center.Finger == p.Finger.Id) .Where(p => !p.Locked); moveCenter .ObserveOn(ui) .Subscribe(o => { ViewModel.SelectionPosition = new Point(o.Move.x, o.Move.y); }); moveCenter .Where(o => o.Move.Magnitude >= 50.0) .Sample(TimeSpan.FromMilliseconds(1000)) .ObserveOn(ui) .Subscribe(o => { if(ViewModel.Debug.FingerCount <= 2 && ViewModel.State == MainViewState.Navigating) { var angle = Helper.RadianToDegree(Math.Atan2(o.Move.y, o.Move.x)); if(!ViewModel.ShowConfig) ViewModel.SelectTile(angle); } }); Dispatcher.BeginInvoke(new Action(() => { Center(); })); })); }