Example #1
0
        public TileSelectorLogic(Widget widget, WorldRenderer worldRenderer, Ruleset modRules)
        {
            var tileset = modRules.TileSets[worldRenderer.World.Map.Tileset];

            editor       = widget.Parent.Get <EditorViewportControllerWidget>("MAP_EDITOR");
            panel        = widget.Get <ScrollPanelWidget>("TILETEMPLATE_LIST");
            itemTemplate = panel.Get <ScrollItemWidget>("TILEPREVIEW_TEMPLATE");
            panel.Layout = new GridLayout(panel);

            var tileCategorySelector = widget.Get <DropDownButtonWidget>("TILE_CATEGORY");
            var categories           = tileset.EditorTemplateOrder;
            Func <string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
            {
                var item = ScrollItemWidget.Setup(template,
                                                  () => tileCategorySelector.Text == option,
                                                  () => { tileCategorySelector.Text = option; IntializeTilePreview(widget, worldRenderer, tileset, option); });

                item.Get <LabelWidget>("LABEL").GetText = () => option;
                return(item);
            };

            tileCategorySelector.OnClick = () =>
                                           tileCategorySelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, categories, setupItem);

            tileCategorySelector.Text = categories.First();
            IntializeTilePreview(widget, worldRenderer, tileset, categories.First());
        }
Example #2
0
		public TileSelectorLogic(Widget widget, WorldRenderer worldRenderer, Ruleset modRules)
		{
			var tileset = modRules.TileSets[worldRenderer.World.Map.Tileset];

			editor = widget.Parent.Get<EditorViewportControllerWidget>("MAP_EDITOR");
			panel = widget.Get<ScrollPanelWidget>("TILETEMPLATE_LIST");
			itemTemplate = panel.Get<ScrollItemWidget>("TILEPREVIEW_TEMPLATE");
			panel.Layout = new GridLayout(panel);

			var tileCategorySelector = widget.Get<DropDownButtonWidget>("TILE_CATEGORY");
			var categories = tileset.EditorTemplateOrder;
			Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
			{
				var item = ScrollItemWidget.Setup(template,
					() => tileCategorySelector.Text == option,
					() => { tileCategorySelector.Text = option; IntializeTilePreview(widget, worldRenderer, tileset, option); });

				item.Get<LabelWidget>("LABEL").GetText = () => option;
				return item;
			};

			tileCategorySelector.OnClick = () =>
				tileCategorySelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, categories, setupItem);

			tileCategorySelector.Text = categories.First();
			IntializeTilePreview(widget, worldRenderer, tileset, categories.First());
		}
        public CommonSelectorLogic(Widget widget, World world, WorldRenderer worldRenderer, string templateListId, string previewTemplateId)
        {
            this.Widget        = widget;
            this.World         = world;
            this.WorldRenderer = worldRenderer;
            Editor             = widget.Parent.Get <EditorViewportControllerWidget>("MAP_EDITOR");
            Panel        = widget.Get <ScrollPanelWidget>(templateListId);
            ItemTemplate = Panel.Get <ScrollItemWidget>(previewTemplateId);
            Panel.Layout = new GridLayout(Panel);

            SearchTextField          = widget.Get <TextFieldWidget>("SEARCH_TEXTFIELD");
            SearchTextField.OnEscKey = () =>
            {
                SearchTextField.Text = "";
                SearchTextField.YieldKeyboardFocus();
                return(true);
            };

            var categorySelector = widget.Get <DropDownButtonWidget>("CATEGORIES_DROPDOWN");

            categorySelector.GetText = () =>
            {
                if (SelectedCategories.Count == 0)
                {
                    return("None");
                }

                if (!string.IsNullOrEmpty(searchFilter))
                {
                    return("Search Results");
                }

                if (SelectedCategories.Count == 1)
                {
                    return(SelectedCategories.First());
                }

                if (SelectedCategories.Count == allCategories.Length)
                {
                    return("All");
                }

                return("Multiple");
            };

            categorySelector.OnMouseDown = _ =>
            {
                if (SearchTextField != null)
                {
                    SearchTextField.YieldKeyboardFocus();
                }

                categorySelector.RemovePanel();
                categorySelector.AttachPanel(CreateCategoriesPanel(Panel));
            };
        }
Example #4
0
        public LayerSelectorLogic(Widget widget, WorldRenderer worldRenderer)
        {
            this.worldRenderer = worldRenderer;
            editor             = widget.Parent.Get <EditorViewportControllerWidget>("MAP_EDITOR");

            layerTemplateList        = widget.Get <ScrollPanelWidget>("LAYERTEMPLATE_LIST");
            layerTemplateList.Layout = new GridLayout(layerTemplateList);
            layerPreviewTemplate     = layerTemplateList.Get <ScrollItemWidget>("LAYERPREVIEW_TEMPLATE");

            IntializeLayerPreview(widget);
        }
Example #5
0
        public LayerSelectorLogic(Widget widget, WorldRenderer worldRenderer)
        {
            this.worldRenderer = worldRenderer;
            editor = widget.Parent.Get<EditorViewportControllerWidget>("MAP_EDITOR");

            layerTemplateList = widget.Get<ScrollPanelWidget>("LAYERTEMPLATE_LIST");
            layerTemplateList.Layout = new GridLayout(layerTemplateList);
            layerPreviewTemplate = layerTemplateList.Get<ScrollItemWidget>("LAYERPREVIEW_TEMPLATE");

            IntializeLayerPreview(widget);
        }
        public StackedEditorResourceBrush(EditorViewportControllerWidget editorWidget, ResourceTypeInfo resource, WorldRenderer wr)
        {
            this.editorWidget   = editorWidget;
            ResourceType        = resource;
            worldRenderer       = wr;
            world               = wr.World;
            editorActionManager = world.WorldActor.Trait <EditorActionManager>();
            editorCursor        = world.WorldActor.Trait <EditorCursorLayer>();
            action              = new AddResourcesEditorAction(world.Map, ResourceType);

            cursorToken = editorCursor.SetResource(wr, resource);
        }
Example #7
0
        public ActorSelectorLogic(Widget widget, World world, WorldRenderer worldRenderer, Ruleset modRules)
        {
            this.modRules      = modRules;
            this.world         = world;
            this.worldRenderer = worldRenderer;

            editor         = widget.Parent.Get <EditorViewportControllerWidget>("MAP_EDITOR");
            ownersDropDown = widget.Get <DropDownButtonWidget>("OWNERS_DROPDOWN");

            panel        = widget.Get <ScrollPanelWidget>("ACTORTEMPLATE_LIST");
            itemTemplate = panel.Get <ScrollItemWidget>("ACTORPREVIEW_TEMPLATE");
            panel.Layout = new GridLayout(panel);

            var editorLayer = world.WorldActor.Trait <EditorActorLayer>();

            selectedOwner = editorLayer.Players.Players.Values.First();
            Func <PlayerReference, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
            {
                var item = ScrollItemWidget.Setup(template, () => selectedOwner == option, () =>
                {
                    selectedOwner = option;

                    ownersDropDown.Text      = selectedOwner.Name;
                    ownersDropDown.TextColor = selectedOwner.Color.RGB;

                    IntializeActorPreviews();
                });

                item.Get <LabelWidget>("LABEL").GetText = () => option.Name;
                item.GetColor = () => option.Color.RGB;

                return(item);
            };

            ownersDropDown.OnClick = () =>
            {
                var owners = editorLayer.Players.Players.Values.OrderBy(p => p.Name);
                ownersDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, owners, setupItem);
            };

            ownersDropDown.Text      = selectedOwner.Name;
            ownersDropDown.TextColor = selectedOwner.Color.RGB;

            IntializeActorPreviews();
        }
Example #8
0
        public ActorSelectorLogic(Widget widget, World world, WorldRenderer worldRenderer)
        {
            mapRules = world.Map.Rules;
            this.world = world;
            this.worldRenderer = worldRenderer;

            editor = widget.Parent.Get<EditorViewportControllerWidget>("MAP_EDITOR");
            ownersDropDown = widget.Get<DropDownButtonWidget>("OWNERS_DROPDOWN");

            panel = widget.Get<ScrollPanelWidget>("ACTORTEMPLATE_LIST");
            itemTemplate = panel.Get<ScrollItemWidget>("ACTORPREVIEW_TEMPLATE");
            panel.Layout = new GridLayout(panel);

            var editorLayer = world.WorldActor.Trait<EditorActorLayer>();

            selectedOwner = editorLayer.Players.Players.Values.First();
            Func<PlayerReference, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
            {
                var item = ScrollItemWidget.Setup(template, () => selectedOwner == option, () =>
                {
                    selectedOwner = option;

                    ownersDropDown.Text = selectedOwner.Name;
                    ownersDropDown.TextColor = selectedOwner.Color.RGB;

                    IntializeActorPreviews();
                });

                item.Get<LabelWidget>("LABEL").GetText = () => option.Name;
                item.GetColor = () => option.Color.RGB;

                return item;
            };

            ownersDropDown.OnClick = () =>
            {
                var owners = editorLayer.Players.Players.Values.OrderBy(p => p.Name);
                ownersDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, owners, setupItem);
            };

            ownersDropDown.Text = selectedOwner.Name;
            ownersDropDown.TextColor = selectedOwner.Color.RGB;

            IntializeActorPreviews();
        }
Example #9
0
        public CustomEditorTileBrush(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("CustomEditorTileBrush 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 #10
0
        public ActorSelectorLogic(Widget widget, World world, WorldRenderer worldRenderer)
        {
            mapRules           = world.Map.Rules;
            this.world         = world;
            this.worldRenderer = worldRenderer;

            editor         = widget.Parent.Get <EditorViewportControllerWidget>("MAP_EDITOR");
            ownersDropDown = widget.Get <DropDownButtonWidget>("OWNERS_DROPDOWN");

            panel        = widget.Get <ScrollPanelWidget>("ACTORTEMPLATE_LIST");
            itemTemplate = panel.Get <ScrollItemWidget>("ACTORPREVIEW_TEMPLATE");
            panel.Layout = new GridLayout(panel);

            var editorLayer = world.WorldActor.Trait <EditorActorLayer>();

            selectedOwner = editorLayer.Players.Players.Values.First();
            Func <PlayerReference, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
            {
                var item = ScrollItemWidget.Setup(template, () => selectedOwner == option, () =>
                {
                    selectedOwner = option;

                    ownersDropDown.Text      = selectedOwner.Name;
                    ownersDropDown.TextColor = selectedOwner.Color.RGB;

                    InitializeActorPreviews();
                });

                item.Get <LabelWidget>("LABEL").GetText = () => option.Name;
                item.GetColor = () => option.Color.RGB;

                return(item);
            };

            ownersDropDown.OnClick = () =>
            {
                var owners = editorLayer.Players.Players.Values.OrderBy(p => p.Name);
                ownersDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, owners, setupItem);
            };

            ownersDropDown.Text      = selectedOwner.Name;
            ownersDropDown.TextColor = selectedOwner.Color.RGB;

            var tileSetId     = world.Map.Rules.TileSet.Id;
            var allActorsTemp = new List <ActorSelectorActor>();

            foreach (var a in mapRules.Actors.Values)
            {
                // Partial templates are not allowed
                if (a.Name.Contains('^'))
                {
                    continue;
                }

                // Actor must have a preview associated with it
                if (!a.HasTraitInfo <IRenderActorPreviewInfo>())
                {
                    continue;
                }

                var editorData = a.TraitInfoOrDefault <EditorTilesetFilterInfo>();

                // Actor must be included in at least one category
                if (editorData == null || editorData.Categories == null)
                {
                    continue;
                }

                // Excluded by tileset
                if (editorData.ExcludeTilesets != null && editorData.ExcludeTilesets.Contains(tileSetId))
                {
                    continue;
                }

                if (editorData.RequireTilesets != null && !editorData.RequireTilesets.Contains(tileSetId))
                {
                    continue;
                }

                var tooltip = a.TraitInfos <EditorOnlyTooltipInfo>().FirstOrDefault(ti => ti.EnabledByDefault) as TooltipInfoBase
                              ?? a.TraitInfos <TooltipInfo>().FirstOrDefault(ti => ti.EnabledByDefault);

                var searchTerms = new List <string>()
                {
                    a.Name
                };
                if (tooltip != null)
                {
                    searchTerms.Add(tooltip.Name);
                }

                var tooltipText = (tooltip == null ? "Type: " : tooltip.Name + "\nType: ") + a.Name;
                allActorsTemp.Add(new ActorSelectorActor(a, editorData.Categories, searchTerms.ToArray(), tooltipText));
            }

            allActors = allActorsTemp.ToArray();

            allCategories = allActors.SelectMany(ac => ac.Categories)
                            .Distinct()
                            .OrderBy(x => x)
                            .ToArray();

            foreach (var c in allCategories)
            {
                selectedCategories.Add(c);
                filteredCategories.Add(c);
            }

            var searchTextField = widget.Get <TextFieldWidget>("SEARCH_TEXTFIELD");

            searchTextField.OnTextEdited = () =>
            {
                searchFilter = searchTextField.Text.Trim();
                filteredCategories.Clear();

                if (!string.IsNullOrEmpty(searchFilter))
                {
                    filteredCategories.AddRange(
                        allActors.Where(t => t.SearchTerms.Any(
                                            s => s.IndexOf(searchFilter, StringComparison.OrdinalIgnoreCase) >= 0))
                        .SelectMany(t => t.Categories)
                        .Distinct()
                        .OrderBy(x => x));
                }
                else
                {
                    filteredCategories.AddRange(allCategories);
                }

                InitializeActorPreviews();
            };

            searchTextField.OnEscKey = () =>
            {
                searchTextField.Text = "";
                searchTextField.YieldKeyboardFocus();
                return(true);
            };

            var actorCategorySelector = widget.Get <DropDownButtonWidget>("CATEGORIES_DROPDOWN");

            actorCategorySelector.GetText = () =>
            {
                if (selectedCategories.Count == 0)
                {
                    return("None");
                }

                if (!string.IsNullOrEmpty(searchFilter))
                {
                    return("Search Results");
                }

                if (selectedCategories.Count == 1)
                {
                    return(selectedCategories.First());
                }

                if (selectedCategories.Count == allCategories.Length)
                {
                    return("All");
                }

                return("Multiple");
            };

            actorCategorySelector.OnMouseDown = _ =>
            {
                if (searchTextField != null)
                {
                    searchTextField.YieldKeyboardFocus();
                }

                actorCategorySelector.RemovePanel();
                actorCategorySelector.AttachPanel(CreateCategoriesPanel());
            };

            InitializeActorPreviews();
        }
Example #11
0
        public ActorEditLogic(Widget widget, World world, WorldRenderer worldRenderer, Dictionary <string, MiniYaml> logicArgs)
        {
            this.worldRenderer  = worldRenderer;
            editorActorLayer    = world.WorldActor.Trait <EditorActorLayer>();
            editorActionManager = world.WorldActor.Trait <EditorActionManager>();

            editor         = widget.Parent.Get <EditorViewportControllerWidget>("MAP_EDITOR");
            actorEditPanel = editor.Get <BackgroundWidget>("ACTOR_EDIT_PANEL");

            typeLabel    = actorEditPanel.Get <LabelWidget>("ACTOR_TYPE_LABEL");
            actorIDField = actorEditPanel.Get <TextFieldWidget>("ACTOR_ID");

            initContainer   = actorEditPanel.Get("ACTOR_INIT_CONTAINER");
            buttonContainer = actorEditPanel.Get("BUTTON_CONTAINER");

            checkboxOptionTemplate = initContainer.Get("CHECKBOX_OPTION_TEMPLATE");
            sliderOptionTemplate   = initContainer.Get("SLIDER_OPTION_TEMPLATE");
            dropdownOptionTemplate = initContainer.Get("DROPDOWN_OPTION_TEMPLATE");
            initContainer.RemoveChildren();

            var deleteButton = actorEditPanel.Get <ButtonWidget>("DELETE_BUTTON");
            var cancelButton = actorEditPanel.Get <ButtonWidget>("CANCEL_BUTTON");
            var okButton     = actorEditPanel.Get <ButtonWidget>("OK_BUTTON");

            actorIDErrorLabel           = actorEditPanel.Get <LabelWidget>("ACTOR_ID_ERROR_LABEL");
            actorIDErrorLabel.IsVisible = () => actorIDStatus != ActorIDStatus.Normal;
            actorIDErrorLabel.GetText   = () => actorIDStatus == ActorIDStatus.Duplicate ?
                                          "Duplicate Actor ID" : "Enter an Actor ID";

            MiniYaml yaml;

            if (logicArgs.TryGetValue("EditPanelPadding", out yaml))
            {
                editPanelPadding = FieldLoader.GetValue <int>("EditPanelPadding", yaml.Value);
            }

            okButton.IsDisabled      = () => !IsValid() || !editActorPreview.IsDirty;
            okButton.OnClick         = Save;
            cancelButton.OnClick     = Cancel;
            deleteButton.OnClick     = Delete;
            actorEditPanel.IsVisible = () => CurrentActor != null &&
                                       editor.CurrentBrush == editor.DefaultBrush &&
                                       Game.RunTime > lastScrollTime + scrollVisibleTimeout;

            actorIDField.OnEscKey = () =>
            {
                actorIDField.YieldKeyboardFocus();
                return(true);
            };

            actorIDField.OnTextEdited = () =>
            {
                var actorId = actorIDField.Text.Trim();
                if (string.IsNullOrWhiteSpace(actorId))
                {
                    nextActorIDStatus = ActorIDStatus.Empty;
                    return;
                }

                // Check for duplicate actor ID
                if (CurrentActor.ID.Equals(actorId, StringComparison.OrdinalIgnoreCase))
                {
                    if (editorActorLayer[actorId] != null)
                    {
                        nextActorIDStatus = ActorIDStatus.Duplicate;
                        return;
                    }
                }

                SetActorID(actorId);
                nextActorIDStatus = ActorIDStatus.Normal;
            };

            actorIDField.OnLoseFocus = () =>
            {
                // Reset invalid IDs back to their starting value
                if (actorIDStatus != ActorIDStatus.Normal)
                {
                    SetActorID(initialActorID);
                }
            };
        }
Example #12
0
        public TileSelectorLogic(Widget widget, WorldRenderer worldRenderer)
        {
            tileset            = worldRenderer.World.Map.Rules.TileSet;
            this.worldRenderer = worldRenderer;

            editor       = widget.Parent.Get <EditorViewportControllerWidget>("MAP_EDITOR");
            panel        = widget.Get <ScrollPanelWidget>("TILETEMPLATE_LIST");
            itemTemplate = panel.Get <ScrollItemWidget>("TILEPREVIEW_TEMPLATE");
            panel.Layout = new GridLayout(panel);

            allTemplates = tileset.Templates.Values.Select(t => new TileSelectorTemplate(t)).ToArray();

            var orderedCategories = allTemplates.SelectMany(t => t.Categories)
                                    .Distinct()
                                    .OrderBy(CategoryOrder)
                                    .ToArray();

            var searchTextField = widget.Get <TextFieldWidget>("SEARCH_TEXTFIELD");

            searchTextField.OnTextEdited = () =>
            {
                searchFilter     = searchTextField.Text.Trim();
                selectedCategory = string.IsNullOrEmpty(searchFilter) ? userSelectedCategory : null;

                InitializeTilePreview();
            };

            searchTextField.OnEscKey = () =>
            {
                searchTextField.Text = "";
                searchTextField.YieldKeyboardFocus();
                return(true);
            };

            Func <string, string> categoryTitle = s => s != null ? s : "Search Results";
            Func <string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
            {
                var item = ScrollItemWidget.Setup(template, () => selectedCategory == option, () =>
                {
                    selectedCategory = option;
                    if (option != null)
                    {
                        userSelectedCategory = option;
                    }

                    InitializeTilePreview();
                });

                var title = categoryTitle(option);
                item.Get <LabelWidget>("LABEL").GetText = () => title;
                return(item);
            };

            var tileCategorySelector = widget.Get <DropDownButtonWidget>("CATEGORIES_DROPDOWN");

            tileCategorySelector.OnClick = () =>
            {
                if (searchTextField != null)
                {
                    searchTextField.YieldKeyboardFocus();
                }

                var categories = orderedCategories.AsEnumerable();
                if (!string.IsNullOrEmpty(searchFilter))
                {
                    var filteredCategories = allTemplates.Where(t => t.SearchTerms.Any(
                                                                    s => s.IndexOf(searchFilter, StringComparison.OrdinalIgnoreCase) >= 0))
                                             .SelectMany(t => t.Categories)
                                             .Distinct()
                                             .OrderBy(CategoryOrder);
                    categories = new string[] { null }.Concat(filteredCategories);
                }

                tileCategorySelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, categories, setupItem);
            };

            var actorCategorySelector = widget.Get <DropDownButtonWidget>("CATEGORIES_DROPDOWN");

            actorCategorySelector.GetText = () => categoryTitle(selectedCategory);

            selectedCategory = userSelectedCategory = orderedCategories.First();
            InitializeTilePreview();
        }