private TItem GetOverlapItem(TContainer rootTreeView, Point draggingPoint) { //TODO X Offset var result = VisualTreeHelper.HitTest(rootTreeView, new Point(rootTreeView.ActualWidth - 30, draggingPoint.Y)); if (result == null) { return(null); } var overlapContainer = TreeUtil.FindVisualParent <TItem>(result.VisualHit); //overlapContainer 有可能是已经被折叠的子节点,故通过 IsVisible 来判断 if (overlapContainer == null || !overlapContainer.IsVisible) { return(null); } TItem overlapItem = null; if (JustOverlapGroup) { if (overlapContainer.HasItems || IsGroup != null && IsGroup(overlapContainer)) { overlapItem = overlapContainer; } else { overlapItem = ItemsControl.ItemsControlFromItemContainer(overlapContainer) as TItem; } } else { overlapItem = overlapContainer; } if (overlapItem != null) { var overlapItemPos = overlapItem.TranslatePoint(new Point(), rootTreeView); var checkHeight = DoubleUtil.IsNaN(OverlapAreaCheckHeight) ? overlapItem.ActualHeight : OverlapAreaCheckHeight; if (DoubleUtil.GreaterThan(draggingPoint.Y, overlapItemPos.Y) && DoubleUtil.LessThanOrClose(draggingPoint.Y, overlapItemPos.Y + checkHeight / 2)) { _overDragArea = OverlapArea.Inner; _overDragArea |= OverlapArea.Up; } if (DoubleUtil.GreaterThan(draggingPoint.Y, overlapItemPos.Y + checkHeight / 2) && DoubleUtil.LessThanOrClose(draggingPoint.Y, overlapItemPos.Y + checkHeight)) { _overDragArea = OverlapArea.Inner; _overDragArea |= OverlapArea.Down; } } else { _overDragArea = OverlapArea.Inner; } return(overlapItem); }
private void OnCompleted(OverlapArea overlapArea, TreeViewItem overlapItem, TreeViewItem draggingItem) { TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); if (overlapArea == OverlapArea.Out) { return; } var draggingModel = draggingItem.DataContext as TreeViewModel; var overlapFolderModel = overlapItem?.DataContext as TreeViewModel; /* * 1. 拖动项是目标目录的直接子节点时,包括目标目录是根目录的情况,不做移动 * 注:目标目录是根目录时,overlapItem 是 null * 2. 拖动项是目标目录时,不做移动 * 3. 拖动项是目标目录的直接或间接父节点时,不做移动 */ if (draggingModel.Parent == overlapFolderModel || draggingModel == overlapFolderModel || overlapFolderModel != null && draggingModel.Any <TreeViewModel>(m => m == overlapFolderModel)) { return; } //TODO Move }
private void OnCompleted(OverlapArea overlapArea, TreeViewItem overlapItem, TreeViewItem draggingItem) { TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); if (overlapArea == OverlapArea.Out) { return; } var draggingModel = draggingItem.DataContext as TreeViewModel; var overlapModel = overlapItem?.DataContext as TreeViewModel; /* * 1. 拖动项是目标目录时,不做移动 * 2. 拖动项是目标目录的直接或间接父节点时,不做移动 */ if (overlapModel != null && draggingModel.Any <TreeViewModel>(m => m == overlapModel, true)) { TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); return; } Move(draggingModel, overlapModel, false, (overlapArea & OverlapArea.Up) == OverlapArea.Up); }
private void Move() { if ((DoubleUtil.IsZero(_draggingContainer.ActualWidth) || DoubleUtil.IsZero(_draggingContainer.ActualHeight)) && _draggingContainer.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated) { return; } var screenPos = new Win32.POINT(); if (!Win32.GetCursorPos(ref screenPos)) { return; } var draggingPoint = _treeView.PointFromScreen(new Point(screenPos.X, screenPos.Y)); if (DoubleUtil.GreaterThan(draggingPoint.X, _treeView.ActualWidth) || DoubleUtil.LessThan(draggingPoint.X, 0) || DoubleUtil.LessThan(draggingPoint.Y, 0) || DoubleUtil.GreaterThan(draggingPoint.Y, _treeView.ActualHeight)) { _overDragArea = OverlapArea.Out; OnOverlapItem?.Invoke(_overDragArea, _overlapItem, _draggingContainer); return; } _overlapItem = GetOverlapItem(_treeView, draggingPoint); OnOverlapItem?.Invoke(_overDragArea, _overlapItem, _draggingContainer); }
private void Move() { if (DoubleUtil.IsZero(_draggingContainer.ActualWidth) || DoubleUtil.IsZero(_draggingContainer.ActualHeight)) { return; } var screenPos = new Win32.POINT(); if (!Win32.GetCursorPos(ref screenPos)) { return; } var draggingPoint = _itemsControl.PointFromScreen(new Point(screenPos.X, screenPos.Y)); if (DoubleUtil.GreaterThan(draggingPoint.X, _itemsControl.ActualWidth) || DoubleUtil.LessThan(draggingPoint.X, 0) || DoubleUtil.LessThan(draggingPoint.Y, 0) || DoubleUtil.GreaterThan(draggingPoint.Y, _itemsControl.ActualHeight)) { _overDragArea = OverlapArea.Out; OnOverlapItem?.Invoke(_overDragArea, _overlapItem, _draggingContainer); return; } _overlapItem = GetOverlapItem(_itemsControl, draggingPoint); OnOverlapItem?.Invoke(_overDragArea, _overlapItem, _draggingContainer); }
///<summary>ゲーム開始時</summary> private void Start() { //コリジョン接触検知 this.OnCollisionEnter2DAsObservable() //Unitychanが当たって来たとき .Where(_ => _.gameObject.tag == "Player") //破壊可能かどうか確認 .Where(_ => p_breakable) //当たり判定の確認 .Where(_ => OverlapArea.Check(transform.position.x, transform.position.y - transform.lossyScale.y, c_collision.size.x * 0.49f, 0.05f, cp_whatIsPlayer)) .Subscribe(_ => OnCollision()); }
private void End() { _treeView.PreviewMouseMove -= OnMouseMove; _adornerLayer.Remove(_panelAdorner); _panelAdorner = null; if (_draggingContainer != null) { OnCompleted?.Invoke(_overDragArea, _overlapItem, _draggingContainer); } _overDragArea = OverlapArea.Out; _overlapItem = null; _draggingContainer = null; }
private void OnOverlapItem(OverlapArea overlapArea, ListBoxItem overlapItem, ListBoxItem draggingItem) { var draggingModel = draggingItem.DataContext as TreeViewModel; draggingModel.IsDragSource = true; if (overlapArea == OverlapArea.Out) { TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); return; } var overlapModel = overlapItem?.DataContext as TreeViewModel; /* * 1. 拖动项是目标目录时,不做移动 */ if (overlapModel != null && overlapModel == draggingModel) { TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); return; } //根目录 if (overlapModel == null) { TreeBackground = ColorUtil.GetBrushFromString("#d6ebff"); TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); } else { TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => { m.IsDragOverUp = (overlapArea & OverlapArea.Up) == OverlapArea.Up; m.IsDragOverDown = (overlapArea & OverlapArea.Down) == OverlapArea.Down; m.IsDragOverLeft = (overlapArea & OverlapArea.Left) == OverlapArea.Left; m.IsDragOverRight = (overlapArea & OverlapArea.Right) == OverlapArea.Right; m.IsDragOver = m == overlapModel; }); } }
private TItem GetOverlapItem(TContainer rootTreeView, Point draggingPoint) { //TODO X Offset var result = VisualTreeHelper.HitTest(rootTreeView, draggingPoint); if (result == null) { return(null); } var overlapContainer = TreeUtil.FindVisualParent <TItem>(result.VisualHit); //overlapContainer 有可能是已经被折叠的子节点,故通过 IsVisible 来判断 if (overlapContainer == null || !overlapContainer.IsVisible) { return(null); } _overDragArea = OverlapArea.Inner; if (overlapContainer != null) { var overlapItemPos = overlapContainer.TranslatePoint(new Point(), rootTreeView); if (DoubleUtil.LessThanOrClose(draggingPoint.Y, overlapItemPos.Y + overlapContainer.ActualHeight / 2)) { _overDragArea |= OverlapArea.Up; } else { _overDragArea |= OverlapArea.Down; } if (DoubleUtil.LessThanOrClose(draggingPoint.X, overlapItemPos.X + overlapContainer.ActualWidth / 2)) { _overDragArea |= OverlapArea.Left; } else { _overDragArea |= OverlapArea.Right; } } return(overlapContainer); }
private void OnOverlapFolder(OverlapArea overlapArea, TreeViewItem overlapItem, TreeViewItem draggingItem) { if (overlapArea == OverlapArea.Out) { TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); return; } var overlapModel = overlapItem?.DataContext as TreeViewModel; var draggingModel = draggingItem.DataContext as TreeViewModel; /* * 1. 拖动项是目标目录时,不做移动 * 2. 拖动项是目标目录的直接或间接父节点时,不做移动 */ if (overlapModel != null && draggingModel.Any <TreeViewModel>(m => m == overlapModel, true)) { TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); return; } //根目录 if (overlapModel == null) { TreeBackground = ColorUtil.GetBrushFromString("#d6ebff"); TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); } else { TreeBackground = Brushes.Transparent; overlapModel.IsExpanded = true; TreeViewModelBase.Foreach(TreeCollection, m => { m.IsDragOverUp = (overlapArea & OverlapArea.Up) == OverlapArea.Up; m.IsDragOverDown = (overlapArea & OverlapArea.Down) == OverlapArea.Down; m.IsDragOver = m == overlapModel; }); } }
private void OnOverlapItem(OverlapArea overlapArea, TreeViewItem overlapItem, TreeViewItem draggingItem) { if (overlapArea == OverlapArea.Out) { TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); return; } var overlapFolderModel = overlapItem?.DataContext as TreeViewModel; var draggingModel = draggingItem.DataContext as TreeViewModel; /* * 1. 拖动项是目标目录的直接子节点时,包括目标目录是根目录的情况,不做移动 * 注:目标目录是根目录时,overlapItem 是 null * 2. 拖动项是目标目录时,不做移动 * 3. 拖动项是目标目录的直接或间接父节点时,不做移动 */ if (draggingModel.Parent == overlapFolderModel || draggingModel == overlapFolderModel || overlapFolderModel != null && draggingModel.Any <TreeViewModel>(m => m == overlapFolderModel)) { TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); return; } if (overlapFolderModel == null) { TreeBackground = ColorUtil.GetBrushFromString("#d6ebff"); TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); return; } else { overlapFolderModel.IsExpanded = true; TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = m == overlapFolderModel); } }
private void OnCollisionEnter2D(Collision2D collision2D) { if (collision2D.gameObject.tag == "Player") { //当たり判定の確認 bool col2D = OverlapArea.Check(transform.position.x, transform.position.y - transform.lossyScale.y, c_collision.size.x * 0.49f, 0.05f, whatIsPlayer); if (col2D && breakable) { this.m_level.GetComponent <Level_Header>().Block++; //Level_HeaderにBlockを破壊したことを伝える Spawn.Sameplace(brokenBlock, this.transform); //ブロックのスポーン if (UnityEngine.Random.Range(0f, 1f) <= coin_spawn) //乱数が出現率以下なら、 { Spawn.Sameplace(spawnCoin, this.transform); } //コインをスポーンさせる Destroy(gameObject); //自身を破壊 } } }
private void OnCompleted(OverlapArea overlapArea, ListBoxItem overlapItem, ListBoxItem draggingItem) { TreeBackground = Brushes.Transparent; TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = m.IsDragSource = false); if (overlapArea == OverlapArea.Out) { return; } var draggingModel = draggingItem.DataContext as TreeViewModel; var overlapModel = overlapItem?.DataContext as TreeViewModel; /* * 1. 拖动项是目标目录时,不做移动 */ if (overlapModel != null && overlapModel == draggingModel) { TreeViewModelBase.Foreach(TreeCollection, m => m.IsDragOver = false); return; } //Move(draggingModel, overlapModel, false, (overlapArea & OverlapArea.Up) == OverlapArea.Up); }