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