public void SetStarSystem(StarSystemController controller, PlayerController playerController) { this.controller = controller; this.currentPlayer = playerController; this.maxOffset = (controller.Planets.Count() + 1) * OrbitStep + OrbitOffset; var bestColony = controller.Planets. Select(x => controller.PlanetsColony(x)). Aggregate( (ColonyInfo)null, (prev, next) => next == null || (prev != null && prev.Population >= next.Population) ? prev : next ); this.originOffset = bestColony != null ? bestColony.Location.Position * OrbitStep + OrbitOffset : 0.5f; this.lastMousePosition = null; this.starSelector.ForgroundImageColor = controller.HostStar.Color; this.starSelector.Select(); foreach (var anchor in this.planetAnchors) { this.RemoveAnchor(anchor); } this.planetAnchors.Clear(); foreach (var element in this.planetSelectors.Values.Concat(this.colonizationMarkers.Values).Concat(this.otherPlanetElements)) { this.RemoveElement(element); } this.planetSelectors.Clear(); this.colonizationMarkers.Clear(); this.otherPlanetElements.Clear(); var traitGridBuilder = new GridPositionBuilder(2, 20, 20, 3); foreach (var trait in controller.HostStar.Traits) { var traitImage = new GuiImage { Below = this.starSelector, Image = GalaxyTextures.Get.Sprite(trait.ImagePath), Tooltip = new SimpleTooltip("Traits", trait.LangCode) }; traitImage.Position.FixedSize(20, 20).RelativeTo(this.starSelector, 0.8f, -0.8f, -1, 1).WithMargins(3, 0); traitGridBuilder.Add(traitImage.Position); this.addPlanetElement(traitImage); } foreach (var planet in this.controller.Planets) { var anchor = new GuiAnchor(planet.Position * OrbitStep + OrbitOffset, 0); this.AddAnchor(anchor); this.planetAnchors.Add(anchor); var planetSelector = new SelectableImage <int>(planet.Position) { ForgroundImage = GalaxyTextures.Get.PlanetSprite(planet.Type), SelectorImage = GalaxyTextures.Get.SelectedStar, SelectCallback = select, Padding = 16, }; planetSelector.Position.FixedSize(100, 100).RelativeTo(anchor); planetSelector.GroupWith(starSelector); this.planetSelectors[planet.Position] = planetSelector; this.AddElement(planetSelector); var popInfo = new GuiText { TextHeight = 20 }; popInfo.Position.WrapContent().Then.RelativeTo(planetSelector, 0, -1, 0, 1).WithMargins(0, 20); var formatter = new ThousandsFormatter(); var colony = this.controller.PlanetsColony(planet); if (colony != null) { popInfo.Text = formatter.Format(colony.Population) + " / " + formatter.Format(colony.PopulationMax); popInfo.TextColor = colony.Owner.Color; } else { popInfo.Text = formatter.Format(planet.PopulationMax); popInfo.TextColor = Color.Gray; } this.addPlanetElement(popInfo); traitGridBuilder = new GridPositionBuilder(4, 20, 20, 3); foreach (var trait in planet.Traits) { var traitImage = new GuiImage { Image = GalaxyTextures.Get.Sprite(trait.ImagePath), Tooltip = new SimpleTooltip("Traits", trait.LangCode) }; traitImage.Position.FixedSize(20, 20).RelativeTo(popInfo, 0, -1, 0, 1).WithMargins(0, 10).Offset(-40, 0); traitGridBuilder.Add(traitImage.Position); this.addPlanetElement(traitImage); } } this.setupColonizationMarkers(); }
public void SetStarSystem(StarSystemController controller, PlayerController playerController) { this.setupSystem(controller.Planets.ToList(), controller.PlanetsColony); this.controller = controller; this.currentPlayer = playerController; var colonies = controller.Planets.Select(x => controller.PlanetsColony(x)).Where(x => x != null); if (colonies.Any()) { this.panTo(Methods.FindBest(colonies, x => x.Population).Location); } else { this.panToStar(); } this.starSelector.ForgroundImageColor = controller.HostStar.Color; this.starSelector.Select(); foreach (var element in this.planetSelectors.Values.Concat(this.colonizationMarkers.Values).Concat(this.otherPlanetElements)) { this.RemoveElement(element); } this.planetSelectors.Clear(); this.colonizationMarkers.Clear(); this.otherPlanetElements.Clear(); var traitGridBuilder = new GridPositionBuilder(2, 20, 20, 3); foreach (var trait in controller.HostStar.Traits) { var traitImage = new GuiImage { Below = this.starSelector, Margins = new Vector2(3, 0), Image = GalaxyTextures.Get.Sprite(trait.ImagePath), Tooltip = new SimpleTooltip("Traits", trait.LangCode) }; traitImage.Position.FixedSize(20, 20).RelativeTo(this.starSelector, 0.8f, -0.8f, -1, 1).UseMargins(); traitGridBuilder.Add(traitImage.Position); this.addPlanetElement(traitImage); } foreach (var planet in this.controller.Planets) { var planetSelector = new SelectableImage <int>(planet.Position) { ForgroundImage = GalaxyTextures.Get.PlanetSprite(planet.Type), SelectorImage = GalaxyTextures.Get.SelectedStar, SelectCallback = select, Padding = 16, }; planetSelector.Position.FixedSize(100, 100).RelativeTo(this.planetAnchor(planet)); planetSelector.GroupWith(starSelector); this.planetSelectors[planet.Position] = planetSelector; this.AddElement(planetSelector); var popInfo = new GuiText { Margins = new Vector2(0, 20), TextHeight = 20 }; popInfo.Position.WrapContent().Then.RelativeTo(planetSelector, 0, -1, 0, 1).UseMargins(); var formatter = new ThousandsFormatter(); var colony = this.controller.PlanetsColony(planet); if (colony != null) { popInfo.Text = formatter.Format(colony.Population) + " / " + formatter.Format(colony.PopulationMax); popInfo.TextColor = colony.Owner.Color; } else { popInfo.Text = formatter.Format(planet.PopulationMax); popInfo.TextColor = Color.Gray; } this.addPlanetElement(popInfo); traitGridBuilder = new GridPositionBuilder(4, 20, 20, 3); foreach (var trait in planet.Traits) { var traitImage = new GuiImage { Margins = new Vector2(0, 10), Image = GalaxyTextures.Get.Sprite(trait.ImagePath), Tooltip = new SimpleTooltip("Traits", trait.LangCode) }; traitImage.Position.FixedSize(20, 20).RelativeTo(popInfo, 0, -1, 0, 1).UseMargins().Offset(-40, 0); traitGridBuilder.Add(traitImage.Position); this.addPlanetElement(traitImage); } } this.setupColonizationMarkers(); }