Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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());
 }
Ejemplo n.º 7
0
        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;
        }
Ejemplo n.º 8
0
        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;
                });
            }
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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;
                });
            }
        }
Ejemplo n.º 11
0
        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);
            }
        }
Ejemplo n.º 12
0
    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);                             //自身を破壊
            }
        }
    }
Ejemplo n.º 13
0
        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);
        }