Exemple #1
0
 public void AddDropTarget(AbstractBlock dropTarget)
 {
     if (_lDropTarget == null)
         return;
     if (_lDropTarget.IndexOf(dropTarget) != -1)
         return;
     _lDropTarget.Add(dropTarget);
 }
Exemple #2
0
 public override bool IsAllowBlockType(AbstractBlock target)
 {
     if (target == null)	return false;
     return (target as BlockOctagon == null ) ? true : false;
 }
Exemple #3
0
 public bool IsInTarget(AbstractBlock target)
 {
     if (target == null) return false;
     if (this.Left <= target.Right && target.Left <= this.Right
      && this.Top <= target.Bottom && target.Top <= this.Bottom)
         return true;
     return false;
 }
Exemple #4
0
        public override bool IsAllowBlockType(AbstractBlock target)
        {
            if (target == null)
                return false;

            BlockConnect blockConnect = target as BlockConnect;
            BlockOctagon blockOctagon = target as BlockOctagon;
            if (blockConnect != null || blockOctagon != null)
                return true;
            return false;
        }
Exemple #5
0
        public void OnPreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (_TopWindow == null)
                return;

            if (!_bMouseCaptured && e.LeftButton == MouseButtonState.Pressed)
            {
                _bDragging = true;

                if (_bDragCreate) // 블록 생성
                {
                    _MoveBlock = (sender as AbstractBlock).CreateUserInstance();
                    _MoveBlock.DataContext = (sender as AbstractBlock).CreateUserInstance();
                }
                else									  // 블록 이동
                {
                    _MoveBlock = sender as AbstractBlock;
                    if (_MoveBlock == null)
                    {
                        System.Diagnostics.Debug.WriteLine("drag control is null");
                        System.Diagnostics.Debug.Assert(_MoveBlock != null);
                        return;
                    }

                    // 부모 컨트롤 지우고 _DragCanvas 영역에서 드래깅 하기 위해 부모 컨트롤을 옮겨주자
                    _MoveBlock.RemoveParent();
                }

                //_MoveBlock.Width = (_DraggedData as Control).Width;
                //_MoveBlock.Height = (_DraggedData as Control).Height;
                //_DragControlBowl.canvas.Width = (_DraggedData as Control).Width;
                //_DragControlBowl.canvas.Height = (_DraggedData as Control).Height;

                _DragCanvas.Visibility = Visibility.Visible;
                _DragCanvas.Children.Add(_MoveBlock); // IntoDragCanvas(_MoveBlock);

                _bMouseCaptured = Mouse.Capture(_MoveBlock);

                Canvas.SetLeft(_MoveBlock, _DownPointInTopWindow.X - _DownPointGapOfBlock.X);
                Canvas.SetTop(_MoveBlock, _DownPointInTopWindow.Y - _DownPointGapOfBlock.Y);

                _DragCanvas.PreviewMouseMove += new MouseEventHandler(_BlockBoard_OnMouseMove);
                _DragCanvas.PreviewMouseUp += new MouseButtonEventHandler(_BlockBoard_OnMouseUp);
            }
        }
Exemple #6
0
        private IDropTarget findDropTarget(AbstractBlock draggedData)
        {
            if (draggedData == null)
                return null;

            foreach (AbstractBlock target in _lDropTarget)
            {
                if (draggedData == target)
                    continue;
                if (!target.IsAllowBlockType(draggedData))
                    continue;

                Rect bigBlockRect;
                AbstractBlock smallBlock = null;
                if (target.Width < draggedData.Width)
                {
                    bigBlockRect = draggedData.GetRect();
                    smallBlock = target;
                }
                else
                {
                    bigBlockRect = target.GetRect();
                    smallBlock = draggedData;
                }

                if (bigBlockRect.Contains(smallBlock.GetLeftTop())
                    || bigBlockRect.Contains(smallBlock.GetRightTop())
                    || bigBlockRect.Contains(smallBlock.GetLeftBottom())
                    || bigBlockRect.Contains(smallBlock.GetRightBottom()))
                {
                    return target as IDropTarget;
                }
            }
            return null;
        }
Exemple #7
0
 private void setEventNewBlock(AbstractBlock newBlock)
 {
     newBlock.MouseDoubleClick += new MouseButtonEventHandler(OnMouseDoubleClick);
     //newBlock.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(OnPreviewMouseLeftButtonDown);
     newBlock.MouseLeftButtonDown += new MouseButtonEventHandler(OnPreviewMouseLeftButtonDown);
     newBlock.PreviewMouseMove += new MouseEventHandler(OnPreviewMouseMove);
     newBlock.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(OnPreviewMouseUp);
 }
Exemple #8
0
        public void _BlockBoard_OnMouseUp(object sender, MouseEventArgs e)
        {
            if (!_bDragging)
                return;

            _MoveBlock.DataContext = null;
            _DragCanvas.Children.Remove(_MoveBlock);

            drop(e);

            _bDragging = false;
            _DraggedData = null;
            _DragCanvas.PreviewMouseMove -= new MouseEventHandler(_BlockBoard_OnMouseMove);
            _DragCanvas.PreviewMouseUp -= new MouseButtonEventHandler(_BlockBoard_OnMouseUp);

            if (_MoveBlock != null)
                _MoveBlock.ReleaseMouseCapture();
            _MoveBlock = null;
            _bMouseCaptured = false;
        }
Exemple #9
0
 public override bool IsAllowBlockType(AbstractBlock target)
 {
     if (target == null) return false;
     if (target.GetType() == typeof(BlockConnect)) return true;
     return true;
 }
 public BlockTypeMismatchException(Type ExpectedType, Type ActualType, AbstractBlock OffendingBlock)
 {
     this.ExpectedType   = ExpectedType;
     this.ActualType     = ActualType;
     this.OffendingBlock = OffendingBlock;
 }
Exemple #11
0
 void SetBlockAt(int x, int y, int z, AbstractBlock block)
 {
     WorldManager.Instance.SetBlock(x, y, z, block);
 }
Exemple #12
0
        /// <summary>
        /// sets an abstract block type at the desired world coordinates.
        /// </summary>
        public void SetBlock(int WorldXCoordinate, int WorldYCoordinate, int WorldZCoordinate, AbstractBlock toSet)
        {
            if
            (
                WorldXCoordinate < 0 ||
                WorldYCoordinate < 0 ||
                WorldZCoordinate < 0 ||
                WorldXCoordinate > Blocks.GetLength(0) ||
                WorldYCoordinate > Blocks.GetLength(1) ||
                WorldZCoordinate > Blocks.GetLength(2)
            )
            {
                Debug.Log("Attempted to set a block which didn't exist");
                return;
            }

            Blocks[WorldXCoordinate, WorldYCoordinate, WorldZCoordinate] = toSet;

            SetChunkContainingBlockToUpdate
            (
                WorldXCoordinate,
                WorldYCoordinate,
                WorldZCoordinate
            );
        }