private Rectangle GetPlanetRingBox(PlanetaryObject planet, Vector2 Origin, Vector2 SunOrigin) { Vector2 Position = Camera.WorldToScreen(SunOrigin); int Radius = (int)Vector2.Distance(Origin, SunOrigin); return(new Rectangle((int)Position.X - Radius, (int)Position.Y - Radius, Radius * 2, Radius * 2)); }
public void DrawPlanet(SpriteBatch spriteBatch, PlanetaryObject planet) { Rectangle box = GetPlanetBox(planet); //Add room for text box.Y -= 72; box.Height += 72; if (game.Window.ClientBounds.Intersects(box)) { if (planet.Type == PlanetaryType.Planet) { Vector2 Origin = GetOrigin(planet); Vector2 SunOrigin = GetOrigin(planet.Parent.Children[0]); //Draw planet spriteBatch.Draw(PlanetTexture, planet.Position + new Vector2(planet.Radius, planet.Radius), null, planet.Color, (float)Math.Atan2(planet.Parent.Children[0].Position.Y - (planet.Position.Y), planet.Parent.Children[0].Position.X - (planet.Position.X)) + MathHelper.PiOver2, new Vector2(planet.Radius / (planet.Diameter / (float)PlanetTexture.Width), planet.Radius / (planet.Diameter / (float)PlanetTexture.Width)), planet.Diameter / (float)PlanetTexture.Width, SpriteEffects.None, 0); if (nameAlpha > 0) { Vector2 TextPosition = new Vector2((((planet.Position.X) + (PlanetTexture.Width * (planet.Diameter / (float)PlanetTexture.Width)) / 2)) - (game.Manager.Skin.Fonts["Default32"].Resource.MeasureString(planet.Name).X / 2), planet.Position.Y - 72); spriteBatch.DrawString(game.Manager.Skin.Fonts["Default32"].Resource, planet.Name, TextPosition, (Color.White * nameAlpha)); } if (descAlpha > 0) { Vector2 TextPosition = new Vector2((((planet.Position.X) + (PlanetTexture.Width * (planet.Diameter / (float)PlanetTexture.Width)) / 2)) - (game.Manager.Skin.Fonts["Default12"].Resource.MeasureString(planet.Description).X / 2), planet.Position.Y - 26); spriteBatch.DrawString(game.Manager.Skin.Fonts["Default12"].Resource, planet.Description, TextPosition, (Color.LightGray * descAlpha)); } } else if (planet.Type == PlanetaryType.Sun) { spriteBatch.Draw(SunTexture, planet.Position, null, planet.Color, 0, Vector2.Zero, planet.Diameter / (float)SunTexture.Width, SpriteEffects.None, 0); } } }
public void DrawPlanetRing(SpriteBatch spriteBatch, PlanetaryObject planet) { if (planet.Type == PlanetaryType.Planet) { Vector2 Origin = GetOrigin(planet); Vector2 SunOrigin = GetOrigin(planet.Parent.Children[0]); if (game.Window.ClientBounds.Intersects(GetPlanetRingBox(planet, Origin, SunOrigin))) { spriteBatch.DrawCircle(SunOrigin, Vector2.Distance(Origin, SunOrigin), (int)Vector2.Distance(Origin, SunOrigin) / (Camera.Zoom > .5f ? 11 : Camera.Zoom > .25f ? 17 : Camera.Zoom > .075f ? 21 : 55), new Color(20, 20, 20, 20), 5); } } else if (planet.Type == PlanetaryType.Sun) { } }
public Vector2 FindSystemPosition(Galaxy g, int i) { Vector2 Position = PlanetaryObject.Rotate(MathHelper.ToRadians(Game.random.Next(0, 360)), g.Children[i - 1].Children[g.Children[i - 1].Children.Count - 1].OuterRadius * 3, g.Children[i - 1].Position); foreach (SolarSystem s in g.Children) { if (Vector2.Distance(s.Position, Position) < s.Radius) { FindSystemPosition(g, i); } else { return(Position); } } return(Vector2.Zero); }
private Rectangle GetPlanetBox(PlanetaryObject planet) { Vector2 Position = Camera.WorldToScreen(planet.Position); switch (planet.Type) { case PlanetaryType.Planet: { return(new Rectangle((int)Position.X, (int)Position.Y, (int)(((PlanetTexture.Width * (planet.Diameter / (float)PlanetTexture.Width))) * Camera.Zoom), (int)(((PlanetTexture.Height * (planet.Diameter / (float)PlanetTexture.Height)) * Camera.Zoom)))); } case PlanetaryType.Sun: { return(new Rectangle((int)Position.X, (int)Position.Y, (int)(((SunTexture.Width * (planet.Diameter / (float)SunTexture.Width))) * Camera.Zoom), (int)(((SunTexture.Height * (planet.Diameter / (float)SunTexture.Height)) * Camera.Zoom)))); } } return(Rectangle.Empty); }
public void Land(PlanetaryObject planet) { Log.Add(planet.Name + " - " + DateTime.Now.ToString()); if (IO.PlanetExists(planet)) { //TODO: Loading backAlpha = 1; State = TransitionState.Loading; MainWindow.lblLoading.Text = "Loading Planet..."; game.LoadLevel(planet); } else { backAlpha = 1; State = TransitionState.Generating; MainWindow.lblLoading.Text = "Generating Planet..."; game.GenerateLevel(planet); } }
private Circle GetPlanetCircle(PlanetaryObject planet) { Vector2 Position = Camera.WorldToScreen(planet.Position); switch (planet.Type) { case PlanetaryType.Planet: { float Radius = ((PlanetTexture.Width * (planet.Diameter / (float)PlanetTexture.Width)) * Camera.Zoom) / 2f; return(new Circle(Position + new Vector2(Radius, Radius), Radius)); } case PlanetaryType.Sun: { float Radius = ((SunTexture.Width * (planet.Diameter / (float)SunTexture.Width)) * Camera.Zoom) / 2f; return(new Circle(Position + new Vector2(Radius, Radius), Radius)); } } return(Circle.Empty); }
private void ClickPlanet(PlanetaryObject planet) { MainWindow wnd = game.GetWnd(); wnd.PlanetName.Text = planet.Name; SelectedPlanet = planet; //Zoom to sun if clicked if (planet.Type == PlanetaryType.Sun && Camera.Zoom < .2f) { newZoom = .25f; CameraPointTo = SelectedPlanet.Position - new Vector2(((Game.MainWindow.ClientWidth) / 2) - SelectedPlanet.Radius * Camera.Zoom, ((Game.MainWindow.ClientHeight) / 2) - SelectedPlanet.Radius * Camera.Zoom); } if (planet.Type == PlanetaryType.Planet && Camera.Zoom < .28f) { newZoom = .6f; CameraPointTo = SelectedPlanet.Position - new Vector2(((Game.MainWindow.ClientWidth) / 2) - SelectedPlanet.Radius * Camera.Zoom, ((Game.MainWindow.ClientHeight) / 2) - SelectedPlanet.Radius * Camera.Zoom); } MainWindow.btnUniverse[5].Enabled = Bookmarks.Contains(SelectedPlanet); MainWindow.btnUniverse[5].Glyph.Color = MainWindow.btnUniverse[5].Enabled ? Color.White : Color.Gray; MainWindow.btnUniverse[2].Enabled = !Bookmarks.Contains(SelectedPlanet); MainWindow.btnUniverse[2].Glyph.Color = MainWindow.btnUniverse[2].Enabled ? Color.White : Color.Gray; for (int i = 0; i < MainWindow.universeStatLabels.Count(); i++) { MainWindow.universeStatLabels[i].Text = string.Empty; MainWindow.universeStatLabels[i].TextColor = Color.White; } if (planet.Type == PlanetaryType.Sun) { MainWindow.btnLand.Enabled = MainWindow.btnUniverse[4].Enabled = false; wnd.PlanetName.Text = planet.Name; wnd.PlanetDesc.Text = planet.Description; MainWindow.universeStatLabels[0].Text = "Coordinates: " + Math.Round(planet.Position.X) + " " + Math.Round(planet.Position.Y); MainWindow.universeStatLabels[1].Text = "Objects:"; for (int i = 1; i < MathHelper.Clamp(planet.Parent.Children.Count(), 0, MainWindow.universeStatLabels.Count() - 1); i++) { MainWindow.universeStatLabels[i + 1].Text = " -" + planet.Parent.Children[i].Name; MainWindow.universeStatLabels[i + 1].TextColor = planet.Parent.Children[i].Color; PlanetaryObject p = planet.Parent.Children[i]; } } else if (planet.Type == PlanetaryType.Planet) { MainWindow.btnLand.Enabled = MainWindow.btnUniverse[4].Enabled = true; wnd.PlanetName.Text = planet.Name; wnd.PlanetDesc.Text = planet.Description; MainWindow.universeStatLabels[0].Text = "Size: " + Game.GetPlanetWidth(planet) + " feet wide by " + Game.GetPlanetHeight(planet) + " feet thick"; MainWindow.universeStatLabels[1].Text = "Coordinates: " + Math.Round(planet.Position.X) + " " + Math.Round(planet.Position.Y); MainWindow.universeStatLabels[2].Text = "Seed: " + planet.Seed; MainWindow.universeStatLabels[3].Text = "Gravity: " + Math.Round(planet.Gravity, 1); } if (planet == HomePlanet) { wnd.PlanetDesc.Text += " - Home"; } }
public static Vector2 GetOrigin(PlanetaryObject planet) { return(planet.Position + new Vector2(planet.Radius, planet.Radius)); }