Exemplo n.º 1
0
    protected override void InternalDraw(GRAPHICS spriteBatch, Entry e)
    {
        base.InternalDraw(spriteBatch, e);

        spriteBatch.Draw(TEXTURE.Pixel, new RECT(0, offset.M32, 800, 1), COLOR.Lime, 0, 0, 0.5f, EFlip.None);
        spriteBatch.Draw(TEXTURE.Pixel, new RECT(offset.M31, 0, 1, 800), COLOR.Lime, 0, 0.5f, 0, EFlip.None);

        spriteBatch.Begin(offset);

        if (animation != null)
        {
            VECTOR2 pivotPoint = UIElement.CalcPivotPoint(VECTOR2.One, pivots[pivot]);
            spriteBatch.Draw(animation, VECTOR2.Zero, 0, pivotPoint.X, pivotPoint.Y);
        }

        for (int i = 0; i < rects.Count; i++)
        {
            spriteBatch.Draw(area, rects[i]);
        }
        if (Creating)
        {
            spriteBatch.Draw(area, RECT.CreateRectangle(start, GetCurrentPosition()));
        }

        spriteBatch.End();

        {
            VECTOR2 pivotPoint = UIElement.CalcPivotPoint(new VECTOR2(200, 200), pivots[pivot]);
            spriteBatch.Draw(TEXTURE.Pixel, new VECTOR2(offset.M31 + pivotPoint.X - 100, offset.M32 + pivotPoint.Y - 100), COLOR.Red, 0, 0.5f, 0.5f, 5, 5);
        }
    }
Exemplo n.º 2
0
    protected override void InternalEvent(Entry e)
    {
        base.InternalEvent(e);
        // 切换锚点
        if (e.INPUT.Keyboard.IsClick(PCKeys.Enter))
        {
            pivot++;
            if (pivot == pivots.Length)
            {
                pivot = 0;
            }
        }
        // 空格重置视口
        if (e.INPUT.Keyboard.IsClick(PCKeys.Space))
        {
            ResetViewport();
        }
        // 保存数据到剪切板
        if (e.INPUT.Keyboard.Ctrl && e.INPUT.Keyboard.IsClick(PCKeys.S))
        {
            Copy();
        }
        // 创建或选中时上下左右微调
        if (dragIndex != -1)
        {
            if (e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.A) || e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.Left))
            {
                dragOffset.X--;
            }
            if (e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.D) || e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.Right))
            {
                dragOffset.X++;
            }
            if (e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.S) || e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.Down))
            {
                dragOffset.Y++;
            }
            if (e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.W) || e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.Up))
            {
                dragOffset.Y--;
            }
        }
        //else if (Creating)
        //{
        //    if (e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.A) || e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.Left))
        //        start.X--;
        //    if (e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.D) || e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.Right))
        //        start.X++;
        //    if (e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.S) || e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.Down))
        //        start.Y++;
        //    if (e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.W) || e.INPUT.Keyboard.IsInputKeyPressed(PCKeys.Up))
        //        start.Y--;
        //}
        // 左键拖拽/生成矩形
        if (TBCanvas.IsHover && e.INPUT.Pointer.IsClick(0))
        {
            VECTOR2 position;
            int     index = ClickIndex(out position);
            if (index == -1)
            {
                // 创建新矩形
                start = position;
            }
            else
            {
                // 拖拽旧矩形
                dragIndex  = index;
                dragOffset = rects[dragIndex].Location;
            }
        }

        if (dragIndex != -1 && e.INPUT.Pointer.IsPressed(0))
        {
            // 拖拽
            rects[dragIndex] = new RECT(e.INPUT.Pointer.Position - e.INPUT.Pointer.ClickPosition + dragOffset, rects[dragIndex].Size);
        }

        if (e.INPUT.Pointer.IsRelease(0))
        {
            if (dragIndex != -1)
            {
                // 确认拖拽
                dragIndex = -1;
            }
            else if (Creating)
            {
                // 确认创建
                var add = RECT.CreateRectangle(start, GetCurrentPosition());
                if (add.Width >= 1 && add.Height >= 1)
                {
                    rects.Add(add);
                }
                start.X = float.NaN;
            }
        }

        if (e.INPUT.Pointer.IsClick(1))
        {
            if (dragIndex != -1)
            {
                // 取消拖拽
                rects[dragIndex] = new RECT(e.INPUT.Pointer.ClickPosition - dragOffset, rects[dragIndex].Size);
                dragIndex        = -1;
            }
            else if (Creating)
            {
                // 取消创建新矩形
                start.X = float.NaN;
            }
            else
            {
                // 删除矩形
                int index = ClickIndex();
                if (index != -1)
                {
                    rects.RemoveAt(index);
                }
            }
        }

        if (e.INPUT.Pointer.IsPressed(1))
        {
            // 拖拽地图
            var delta = e.INPUT.Pointer.DeltaPosition;
            offset.M31 += delta.X;
            offset.M32 += delta.Y;
            MATRIX2x3.Invert(ref offset, out offsetInvert);
        }
    }