Povstalec/StellarView

[SUGGESTION] More/Better Planets

Noobly-Walker opened this issue · 8 comments

While I haven't seen any planets in the skies yet (I've been looking from time to time), I do know Venus, Mars, and Jupiter at the very least exist as textures in the assets. My suggestions are as follows:

  • All eight planets are implemented, and move around the sky realistically.
  • Planets closer to the Sun than the overworld have phases.
  • Jupiter has a layer over it that contains up to four pixels, representing the Galilean moons.
  • Saturn and Uranus has a phase texture that changes throughout their orbits, as the rings are viewed from different angles.
  • Mercury and Venus would be the first objects to appear in the evening, and the last to disappear in the morning. They may remain visible during the day if they are in transit in front of the sun.

I do have the textures, though I have not yet used them anywhere, since am missing the mechanics.

I know it would be easier to either have the planets orbit around the Overworld or stay in the same place relative to the sky, but I really want to make some simple to use system which players can use to define solar systems with individual planets and then simply select which planet of the system the dimension corresponds to and have the sky be based on that.

That way I could easily add different planets that would show up in the sky, which would be subject to apparent retrograde motion.

Your idea with Jupiter is quite nice and I may use it if I don't find a way to make the moons orbit around Jupiter in a believable way by having them move.

As for the idea with Uranus and Saturn, that's absolutely an awesome way to showcase the rings!

Mercury and Venus being the first to appear in the morning is also a cool idea. I was already pondering if I should have multiple star layers that would be visible at different times, so this would be a nice addition to that.

What you'd about have to do is make a simple, hidden simulation of the solar system, then draw lines from the object representing the Overworld to all other objects, and then use the angles and what not to draw the various planets/stars/etc in the skybox, using the sun's location as the skybox's main point of reference as it would be too complicated to move it. With this accomplished, you can customize the orbital radius, eccentricity, inclination, etc of each planet individually, and it should show up correctly no matter what.

Yes that sounds good. The biggest problem is figuring out how to make that into something players could edit inside the assets folder and then parsing it to the game.

You could take inspiration from Galacticraft or Universe Sandbox for that. Have a GUI that draws the hidden simulation of the solar system on screen, as well as the orbits of planets/moons. Then, click on an object, and you get sliders to change the orbit. But that might be a bit too involved and un-Minecrafty for what you're after.

You could take inspiration from Galacticraft or Universe Sandbox for that. Have a GUI that draws the hidden simulation of the solar system on screen, as well as the orbits of planets/moons. Then, click on an object, and you get sliders to change the orbit. But that might be a bit too involved and un-Minecrafty for what you're after.

What you described is just a GUI, I do like that idea, but that's not what I was talking about. Galacticraft had the planets pre-made and unchangable. I could make a GUI like that fairly simply (although given my texturing skills, it would take me a long time just to make it not look bad).

The problem is getting it to work in the first place, as I know next to nothing about how json (which are used for physically storing the information) files are accessed from the assets folder.

I know how to parse them from data folder when the game starts, but that's quite different as I have access to the server, whereas with Client-side mods (which Stellar View is supposed to be), access to server is required to be very limited (for example, doing things like spawning mobs, changing the actual light level and placing blocks is impossible), otherwise it would need to be installed on servers as well, which I do not want

The GUI would merely exist to make tweaking settings more visual and therefore easier, and shouldn't need to involve the server. The alternative is to have something similar to the setting menu to adjust the galaxy's position in the sky, where it's a load of sliders and buttons.

The concern is, since there would be way more things to control for, it would be hard to make custom systems look good.

Yup, pretty much.

Hypothetically there might be a way to create a list of settings with unique naming, but that's thinking way too far ahead.

JSON, right?
I have some experience with that. I can make a skeleton.

{
  "mercury": {
    "orbitRadius": 0.39,
    "parent": "sun"
  },
  "venus": {
    "orbitRadius": 0.72,
    "parent": "sun"
  },
  "overworld": {
    "orbitRadius": 1.0,
    "parent": "sun"
  },
  "moon": {
    "orbitRadius": 0.0025,
    "parent": "overworld"
  },
  "mars": {
    "orbitRadius": 1.52,
    "parent": "sun"
  },
  "jupiter": {
    "orbitRadius": 5.2,
    "parent": "sun"
  },
  "saturn": {
    "orbitRadius": 9.58,
    "parent": "sun"
  },
  "uranus": {
    "orbitRadius": 19.2,
    "parent": "sun"
  },
  "neptune": {
    "orbitRadius": 30.0,
    "parent": "sun"
  }
}

Using some circle math and this JSON, you can loop through all the planets, and have them orbit the parent body. Another variable you could store for each planet is apparent size, to control how large each of them appear in the sky, so they don't have to be hardcoded. And you could just add more things as needed.

If this isn't what you had in mind, I apologize.