public EditorActorBrush(EditorViewportControllerWidget editorWidget, ActorInfo actor, PlayerReference owner, WorldRenderer wr) { this.editorWidget = editorWidget; worldRenderer = wr; world = wr.World; editorLayer = world.WorldActor.Trait<EditorActorLayer>(); Actor = actor; this.owner = owner; preview = editorWidget.Get<ActorPreviewWidget>("DRAG_ACTOR_PREVIEW"); preview.GetScale = () => worldRenderer.Viewport.Zoom; preview.IsVisible = () => editorWidget.CurrentBrush == this; var buildingInfo = actor.Traits.GetOrDefault<BuildingInfo>(); if (buildingInfo != null) { locationOffset = -FootprintUtils.AdjustForBuildingSize(buildingInfo); previewOffset = FootprintUtils.CenterOffset(world, buildingInfo); } var td = new TypeDictionary(); td.Add(new FacingInit(facing)); td.Add(new TurretFacingInit(facing)); td.Add(new OwnerInit(owner.Name)); td.Add(new RaceInit(owner.Race)); preview.SetPreview(actor, td); // The preview widget may be rendered by the higher-level code before it is ticked. // Force a manual tick to ensure the bounds are set correctly for this first draw. Tick(); }
public EditorCursorLayer(Actor self, EditorCursorLayerInfo info) { this.info = info; world = self.World; editorLayer = self.Trait <EditorActorLayer>(); Type = EditorCursorType.None; }
public EditorCopyPasteBrush(EditorViewportControllerWidget editorWidget, WorldRenderer wr) { this.editorWidget = editorWidget; worldRenderer = wr; selectionLayer = wr.World.WorldActor.Trait<EditorSelectionLayer>(); editorLayer = wr.World.WorldActor.Trait<EditorActorLayer>(); }
public EditorDefaultBrush(EditorViewportControllerWidget editorWidget, WorldRenderer wr) { this.editorWidget = editorWidget; worldRenderer = wr; world = wr.World; editorLayer = world.WorldActor.Trait<EditorActorLayer>(); resources = world.WorldActor.TraitsImplementing<ResourceType>() .ToDictionary(r => r.Info.ResourceType, r => r); }
public SaveMapLogic(Widget widget, Action onExit, Map map, EditorActorLayer editorActorLayer) { var title = widget.Get<TextFieldWidget>("TITLE"); title.Text = map.Title; var author = widget.Get<TextFieldWidget>("AUTHOR"); author.Text = map.Author; // TODO: This should use a multi-line textfield once they exist var description = widget.Get<TextFieldWidget>("DESCRIPTION"); description.Text = map.Description; // TODO: This should use a multi-selection dropdown once they exist var visibilityDropdown = widget.Get<DropDownButtonWidget>("VISIBILITY_DROPDOWN"); { var mapVisibility = new List<string>(Enum.GetNames(typeof(MapVisibility))); Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) => { var item = ScrollItemWidget.Setup(template, () => visibilityDropdown.Text == option, () => { visibilityDropdown.Text = option; }); item.Get<LabelWidget>("LABEL").GetText = () => option; return item; }; visibilityDropdown.Text = Enum.GetName(typeof(MapVisibility), map.Visibility); visibilityDropdown.OnClick = () => visibilityDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, mapVisibility, setupItem); } var directoryDropdown = widget.Get<DropDownButtonWidget>("DIRECTORY_DROPDOWN"); { var mapDirectories = Game.ModData.Manifest.MapFolders.Keys.Select(ff => { var f = Platform.UnresolvePath(ff); if (f.StartsWith("~")) f = f.Substring(1); return f; }).ToList(); Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) => { var item = ScrollItemWidget.Setup(template, () => directoryDropdown.Text == option, () => directoryDropdown.Text = option); item.Get<LabelWidget>("LABEL").GetText = () => option; return item; }; var mapDirectory = Platform.UnresolvePath(Path.GetDirectoryName(map.Path)); var initialDirectory = mapDirectories.FirstOrDefault(f => f == mapDirectory); if (initialDirectory == null) initialDirectory = mapDirectories.First(); directoryDropdown.Text = initialDirectory; directoryDropdown.OnClick = () => directoryDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, mapDirectories, setupItem); } var filename = widget.Get<TextFieldWidget>("FILENAME"); filename.Text = Path.GetFileNameWithoutExtension(map.Path); var fileTypes = new Dictionary<string, string>() { { ".oramap", ".oramap" }, { "(unpacked)", "" } }; var typeDropdown = widget.Get<DropDownButtonWidget>("TYPE_DROPDOWN"); { Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) => { var item = ScrollItemWidget.Setup(template, () => typeDropdown.Text == option, () => typeDropdown.Text = option); item.Get<LabelWidget>("LABEL").GetText = () => option; return item; }; typeDropdown.Text = Path.GetExtension(map.Path); if (string.IsNullOrEmpty(typeDropdown.Text)) typeDropdown.Text = fileTypes.First(t => t.Value == "").Key; typeDropdown.OnClick = () => typeDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, fileTypes.Keys, setupItem); } var close = widget.Get<ButtonWidget>("BACK_BUTTON"); close.OnClick = () => { Ui.CloseWindow(); onExit(); }; var save = widget.Get<ButtonWidget>("SAVE_BUTTON"); save.OnClick = () => { if (string.IsNullOrEmpty(filename.Text)) return; map.Title = title.Text; map.Description = description.Text; map.Author = author.Text; map.Visibility = (MapVisibility)Enum.Parse(typeof(MapVisibility), visibilityDropdown.Text); map.ActorDefinitions = editorActorLayer.Save(); map.PlayerDefinitions = editorActorLayer.Players.ToMiniYaml(); map.RequiresMod = Game.ModData.Manifest.Mod.Id; var combinedPath = Platform.ResolvePath(Path.Combine(directoryDropdown.Text, filename.Text + fileTypes[typeDropdown.Text])); map.Save(combinedPath); // Update the map cache so it can be loaded without restarting the game Game.ModData.MapCache[map.Uid].UpdateFromMap(map, MapClassification.User); Console.WriteLine("Saved current map at {0}", combinedPath); Ui.CloseWindow(); onExit(); }; }