Ejemplo n.º 1
0
        private void TilesetView_MouseDown(object sender, MouseEventArgs e)
        {
            Tileset tileset = this.SelectedTileset.Res;

            if (tileset == null)
            {
                return;
            }

            int tileIndex = this.TilesetView.HoveredTileIndex;

            if (tileIndex < 0 || tileIndex > tileset.TileCount)
            {
                return;
            }

            // Conditional toggle operation on left click
            if (e.Button == MouseButtons.Left)
            {
                TileInput          input     = tileset.TileInput.Count > tileIndex ? tileset.TileInput[tileIndex] : default(TileInput);
                TileCollisionShape collision = input.Collision[this.editLayerIndex];
                this.drawSimple = false;
                switch (this.hoveredArea)
                {
                case TileHotSpot.Left:
                    this.drawShape = TileCollisionShape.Left;
                    this.drawMode  = !collision.HasFlag(TileCollisionShape.Left) ? CollisionDrawMode.Add : CollisionDrawMode.Remove;
                    break;

                case TileHotSpot.Right:
                    this.drawShape = TileCollisionShape.Right;
                    this.drawMode  = !collision.HasFlag(TileCollisionShape.Right) ? CollisionDrawMode.Add : CollisionDrawMode.Remove;
                    break;

                case TileHotSpot.Top:
                    this.drawShape = TileCollisionShape.Top;
                    this.drawMode  = !collision.HasFlag(TileCollisionShape.Top) ? CollisionDrawMode.Add : CollisionDrawMode.Remove;
                    break;

                case TileHotSpot.Bottom:
                    this.drawShape = TileCollisionShape.Bottom;
                    this.drawMode  = !collision.HasFlag(TileCollisionShape.Bottom) ? CollisionDrawMode.Add : CollisionDrawMode.Remove;
                    break;

                default:
                    if (collision == TileCollisionShape.Free)
                    {
                        this.drawSimple = true;
                        this.drawMode   = CollisionDrawMode.Set;
                        this.drawShape  = TileCollisionShape.Solid;
                    }
                    else if (collision == TileCollisionShape.Solid)
                    {
                        this.drawMode  = CollisionDrawMode.Set;
                        this.drawShape = TileCollisionShape.DiagonalUp;
                    }
                    else if (collision.HasFlag(TileCollisionShape.DiagonalUp))
                    {
                        this.drawMode  = CollisionDrawMode.Set;
                        this.drawShape = TileCollisionShape.DiagonalDown;
                    }
                    else if (collision.HasFlag(TileCollisionShape.DiagonalDown))
                    {
                        this.drawMode  = CollisionDrawMode.Set;
                        this.drawShape = TileCollisionShape.Free;
                    }
                    else
                    {
                        this.drawMode  = CollisionDrawMode.Set;
                        this.drawShape = TileCollisionShape.Solid;
                    }
                    break;
                }
                this.isUserDrawing = true;
            }
            // Clear operation on right click
            else if (e.Button == MouseButtons.Right)
            {
                this.drawSimple    = true;
                this.drawShape     = TileCollisionShape.Free;
                this.drawMode      = CollisionDrawMode.Set;
                this.isUserDrawing = true;
            }

            // Perform the drawing operation
            this.PerformUserDrawAction();
            this.TilesetView.InvalidateTile(tileIndex, 0);
        }
        private void TilesetView_MouseDown(object sender, MouseEventArgs e)
        {
            Tileset tileset = this.SelectedTileset.Res;
            if (tileset == null) return;

            int tileIndex = this.TilesetView.HoveredTileIndex;
            if (tileIndex < 0 || tileIndex > tileset.TileCount) return;

            // Conditional toggle operation on left click
            if (e.Button == MouseButtons.Left)
            {
                TileInput input = tileset.TileInput.Count > tileIndex ? tileset.TileInput[tileIndex] : default(TileInput);
                TileCollisionShape collision = input.Collision[this.editLayerIndex];
                this.drawSimple = false;
                switch (this.hoveredArea)
                {
                    case TileHotSpot.Left:
                        this.drawShape = TileCollisionShape.Left;
                        this.drawMode = !collision.HasFlag(TileCollisionShape.Left) ? CollisionDrawMode.Add : CollisionDrawMode.Remove;
                        break;
                    case TileHotSpot.Right:
                        this.drawShape = TileCollisionShape.Right;
                        this.drawMode = !collision.HasFlag(TileCollisionShape.Right) ? CollisionDrawMode.Add : CollisionDrawMode.Remove;
                        break;
                    case TileHotSpot.Top:
                        this.drawShape = TileCollisionShape.Top;
                        this.drawMode = !collision.HasFlag(TileCollisionShape.Top) ? CollisionDrawMode.Add : CollisionDrawMode.Remove;
                        break;
                    case TileHotSpot.Bottom:
                        this.drawShape = TileCollisionShape.Bottom;
                        this.drawMode = !collision.HasFlag(TileCollisionShape.Bottom) ? CollisionDrawMode.Add : CollisionDrawMode.Remove;
                        break;
                    default:
                        if (collision == TileCollisionShape.Free)
                        {
                            this.drawSimple = true;
                            this.drawMode = CollisionDrawMode.Set;
                            this.drawShape = TileCollisionShape.Solid;
                        }
                        else if (collision == TileCollisionShape.Solid)
                        {
                            this.drawMode = CollisionDrawMode.Set;
                            this.drawShape = TileCollisionShape.DiagonalUp;
                        }
                        else if (collision.HasFlag(TileCollisionShape.DiagonalUp))
                        {
                            this.drawMode = CollisionDrawMode.Set;
                            this.drawShape = TileCollisionShape.DiagonalDown;
                        }
                        else if (collision.HasFlag(TileCollisionShape.DiagonalDown))
                        {
                            this.drawMode = CollisionDrawMode.Set;
                            this.drawShape = TileCollisionShape.Free;
                        }
                        else
                        {
                            this.drawMode = CollisionDrawMode.Set;
                            this.drawShape = TileCollisionShape.Solid;
                        }
                        break;
                }
                this.isUserDrawing = true;
            }
            // Clear operation on right click
            else if (e.Button == MouseButtons.Right)
            {
                this.drawSimple = true;
                this.drawShape = TileCollisionShape.Free;
                this.drawMode = CollisionDrawMode.Set;
                this.isUserDrawing = true;
            }

            // Perform the drawing operation
            this.PerformUserDrawAction();
            this.TilesetView.InvalidateTile(tileIndex, 0);
        }