public void AddDropTarget(AbstractBlock dropTarget) { if (_lDropTarget == null) return; if (_lDropTarget.IndexOf(dropTarget) != -1) return; _lDropTarget.Add(dropTarget); }
public override bool IsAllowBlockType(AbstractBlock target) { if (target == null) return false; return (target as BlockOctagon == null ) ? true : false; }
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; }
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; }
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); } }
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; }
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); }
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; }
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; }
void SetBlockAt(int x, int y, int z, AbstractBlock block) { WorldManager.Instance.SetBlock(x, y, z, block); }
/// <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 ); }