Пример #1
0
        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));
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
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)
     {
     }
 }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
 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);
     }
 }
Пример #7
0
        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);
        }
Пример #8
0
        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";
            }
        }
Пример #9
0
 public static Vector2 GetOrigin(PlanetaryObject planet)
 {
     return(planet.Position + new Vector2(planet.Radius, planet.Radius));
 }