protected virtual void OnTilesetChanged() { Tileset tileset = this.tileset.Res; TilesetRenderInput mainInput = (tileset != null) ? tileset.RenderConfig.ElementAtOrDefault(this.displayedConfigIndex) : null; Pixmap sourceData = (mainInput != null) ? mainInput.SourceData.Res : null; // Dispose old local bitmaps if (this.tileBitmap != null) { this.tileBitmap.Dispose(); this.tileBitmap = null; } // Retrieve tileset data and create local tileset bitmap if (mainInput != null && sourceData != null) { this.tileBitmap = sourceData.MainLayer.ToBitmap(); Point2 sourceTileCount = mainInput.GetSourceTileCount(this.tileBitmap.Width, this.tileBitmap.Height); this.tileCount = new Point(sourceTileCount.X, sourceTileCount.Y); this.totalTileCount = this.tileCount.X * this.tileCount.Y; this.sourceTileSize = mainInput.SourceTileSize; } else { this.tileBitmap = null; this.tileCount = Point.Empty; this.totalTileCount = 0; this.sourceTileSize = Tileset.DefaultTileSize; } this.UpdateContentLayout(); this.GenerateBackgroundPattern(); this.Invalidate(); }
/// <inheritdoc /> public override void RemoveLayer() { base.RemoveLayer(); Tileset tileset = this.SelectedTileset.Res; TilesetRenderInput layer = this.SelectedVisualLayer; if (tileset == null) { return; } if (layer == null) { return; } UndoRedoManager.Do(new RemoveTilesetConfigLayerAction <TilesetRenderInput>( tileset, TilemapsReflectionInfo.Property_Tileset_RenderConfig, layer)); }
public override void Perform(Tileset tileset, PreviewImageQuery query) { int desiredWidth = query.DesiredWidth; int desiredHeight = query.DesiredHeight; TilesetRenderInput input = tileset.RenderConfig.FirstOrDefault(c => c.SourceData != null); Pixmap mainPixmap = (input != null) ? input.SourceData.Res : null; PixelData layer = (mainPixmap != null) ? mainPixmap.MainLayer : null; if (layer == null) { query.Result = new Bitmap(1, 1); return; } float widthRatio = (float)layer.Width / (float)layer.Height; layer = layer.CloneSubImage(0, 0, desiredWidth * 2, desiredHeight * 2); layer.Rescale(desiredWidth, desiredHeight); query.Result = layer.ToBitmap(); }
protected virtual void OnTilesetChanged() { Tileset tileset = this.tileset.Res; TilesetRenderInput mainInput = (tileset != null) ? tileset.RenderConfig.ElementAtOrDefault(this.displayedConfigIndex) : null; Pixmap sourceData = (mainInput != null) ? mainInput.SourceData.Res : null; // Dispose old local bitmaps if (this.tileBitmap != null) { this.tileBitmap.Dispose(); this.tileBitmap = null; } // Retrieve tileset data and create local tileset bitmap if (mainInput != null && sourceData != null) { Vector2 originalTileSize = tileset.TileSize; float minDisplayedSize = 30.0f; float maxDisplayedSize = 50.0f; // Find a suitable display size for the tileset Vector2 displayedTileSize = originalTileSize; while (displayedTileSize.X > maxDisplayedSize) { displayedTileSize /= 2.0f; } while (displayedTileSize.X < minDisplayedSize) { displayedTileSize *= 2.0f; } displayedTileSize = displayedTileSize * (MathF.Clamp( displayedTileSize.X, minDisplayedSize, maxDisplayedSize) / displayedTileSize.X); this.tileBitmap = sourceData.MainLayer.ToBitmap(); this.displayedTileSize = new Size( (int)displayedTileSize.X, (int)displayedTileSize.Y); Point2 sourceTileCount = mainInput.GetSourceTileCount(this.tileBitmap.Width, this.tileBitmap.Height); this.tileCount = new Point(sourceTileCount.X, sourceTileCount.Y); this.totalTileCount = this.tileCount.X * this.tileCount.Y; this.tilesetContentSize = new Size( this.displayedTileSize.Width * this.tileCount.X + this.spacing.Width * (this.tileCount.X - 1), this.displayedTileSize.Height * this.tileCount.Y + this.spacing.Height * (this.tileCount.Y - 1)); } else { this.tileBitmap = null; this.displayedTileSize = Size.Empty; this.tileCount = Point.Empty; this.totalTileCount = 0; this.tilesetContentSize = Size.Empty; } this.GenerateBackgroundPattern(); this.UpdateContentStats(); this.Invalidate(); }
public VisualLayerNode(TilesetRenderInput layer) : base() { this.layer = layer; this.Image = Properties.TilemapsResCache.IconTilesetSingleVisualLayer; }
/// <inheritdoc /> public override void AddLayer() { base.AddLayer(); Tileset tileset = this.SelectedTileset.Res; if (tileset == null) { return; } // Determine which texture IDs are already present, so we can // derive which one we'll pick as a default for creating a new one. bool hasMainTex = false; int highestCustomTex = -1; for (int i = 0; i < tileset.RenderConfig.Count; i++) { if (tileset.RenderConfig[i].Id == TilesetRenderInput.MainTexId) { hasMainTex = true; } else if (tileset.RenderConfig[i].Id.StartsWith(TilesetRenderInput.CustomTexId)) { string customTexIndexString = tileset.RenderConfig[i].Id.Substring( TilesetRenderInput.CustomTexId.Length, tileset.RenderConfig[i].Id.Length - TilesetRenderInput.CustomTexId.Length); int customTexIndex; if (!int.TryParse(customTexIndexString, out customTexIndex)) { customTexIndex = 0; } highestCustomTex = Math.Max(highestCustomTex, customTexIndex); } } // Decide upon an id for our new layer string layerId; string layerName; if (!hasMainTex) { layerId = TilesetRenderInput.MainTexId; layerName = TilesetRenderInput.MainTexName; } else { layerId = TilesetRenderInput.CustomTexId + (highestCustomTex + 1).ToString(); layerName = TilesetRenderInput.CustomTexName; } // Create a new layer using an UndoRedo action TilesetRenderInput newLayer = new TilesetRenderInput { Id = layerId, Name = layerName }; UndoRedoManager.Do(new AddTilesetConfigLayerAction <TilesetRenderInput>( tileset, TilemapsReflectionInfo.Property_Tileset_RenderConfig, newLayer)); // Select the newly created visual layer VisualLayerNode modelNode = this.treeModel .Nodes .OfType <VisualLayerNode>() .FirstOrDefault(n => n.VisualLayer == newLayer); this.SelectLayer(modelNode); }