public AutoConnectEditorAction(Map map) { this.map = map; terrainInfo = (ITemplatedTerrainInfo)map.Rules.TerrainInfo; Text = "Auto connect tile transitions."; }
public CustomTileSelectorLogic(Widget widget, World world, WorldRenderer worldRenderer) : base(widget, world, worldRenderer, "TILETEMPLATE_LIST", "TILEPREVIEW_TEMPLATE") { terrainInfo = world.Map.Rules.TerrainInfo as ITemplatedTerrainInfo; if (terrainInfo == null) { throw new InvalidDataException("CustomTileSelectorLogic requires a template-based tileset."); } terrainRenderer = world.WorldActor.TraitOrDefault <ITiledTerrainRenderer>(); if (terrainRenderer == null) { throw new InvalidDataException("TileSelectorLogic requires a tile-based terrain renderer."); } allTemplates = terrainInfo.Templates.Values.Select(t => new TileSelectorTemplate(t)).ToArray(); editorCursor = world.WorldActor.Trait <EditorCursorLayer>(); allCategories = allTemplates.SelectMany(t => t.Categories) .Distinct() .OrderBy(CategoryOrder) .ToArray(); foreach (var c in allCategories) { SelectedCategories.Add(c); FilteredCategories.Add(c); } SearchTextField.OnTextEdited = () => { searchFilter = SearchTextField.Text.Trim(); FilteredCategories.Clear(); if (!string.IsNullOrEmpty(searchFilter)) { FilteredCategories.AddRange( allTemplates.Where(t => t.SearchTerms.Any( s => s.IndexOf(searchFilter, StringComparison.OrdinalIgnoreCase) >= 0)) .SelectMany(t => t.Categories) .Distinct() .OrderBy(CategoryOrder)); } else { FilteredCategories.AddRange(allCategories); } InitializePreviews(); }; InitializePreviews(); }
public EditorTileBrush(EditorViewportControllerWidget editorWidget, ushort id, WorldRenderer wr) { this.editorWidget = editorWidget; worldRenderer = wr; world = wr.World; terrainInfo = world.Map.Rules.TerrainInfo as ITemplatedTerrainInfo; if (terrainInfo == null) { throw new InvalidDataException("EditorTileBrush can only be used with template-based tilesets"); } editorActionManager = world.WorldActor.Trait <EditorActionManager>(); editorCursor = world.WorldActor.Trait <EditorCursorLayer>(); Template = id; worldRenderer = wr; world = wr.World; var template = terrainInfo.Templates.First(t => t.Value.Id == id).Value; cursorToken = editorCursor.SetTerrainTemplate(wr, template); }
bool ITiledTerrainRendererInfo.ValidateTileSprites(ITemplatedTerrainInfo terrainInfo, Action <string> onError) { var missingImages = new HashSet <string>(); var failed = false; Action <uint, string> onMissingImage = (id, f) => { onError("\tTemplate `{0}` references sprite `{1}` that does not exist.".F(id, f)); missingImages.Add(f); failed = true; }; var tileCache = new DefaultTileCache((DefaultTerrain)terrainInfo, onMissingImage); foreach (var t in terrainInfo.Templates) { var templateInfo = (DefaultTerrainTemplateInfo)t.Value; for (var v = 0; v < templateInfo.Images.Length; v++) { if (!missingImages.Contains(templateInfo.Images[v])) { for (var i = 0; i < t.Value.TilesCount; i++) { if (t.Value[i] == null || tileCache.HasTileSprite(new TerrainTile(t.Key, (byte)i), v)) { continue; } onError("\tTemplate `{0}` references frame {1} that does not exist in sprite `{2}`.".F(t.Key, i, templateInfo.Images[v])); failed = true; } } } } return(failed); }