Example #1
0
        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();
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }