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); }