[Tomroblox54321's Advanced Planetary Orbit Module Is Out]Tomroblox54321's Planetary Orbit Module

Thank you soo much! I’m studying physics in university so this will be really helpful for me!

1 Like

i messed around and got somewhat close enough Eccentricity

local RunService = game:GetService("RunService")

local CosineMath = math.cos
local SineMath = math.sin
local Atan2Math = math.atan2

local PIMath = math.pi
local TAU = 2*PIMath

return function(PlanetOrbiting : PVInstance, PlanetGettingOrbited : PVInstance, TimeToOrbit : number, Eccentricity : number)
	assert(PlanetOrbiting ~= PlanetGettingOrbited, "Cannot orbit itself, PlanetOrbiting and PlanetGettingOrbited should be different")

	local DifferenceVector = PlanetOrbiting:GetPivot().Position-PlanetGettingOrbited:GetPivot().Position --Differnce
	local Radius = DifferenceVector.Magnitude

	local Angle = Atan2Math(DifferenceVector.Y, DifferenceVector.X)--Angle

	local HeartbeatConnection
	HeartbeatConnection = RunService.Heartbeat:Connect(function(DeltaTime)
		-- Disconnect the event if one of the planets got destroyed
		if not (PlanetOrbiting or PlanetGettingOrbited) then
			HeartbeatConnection:Disconnect()
			HeartbeatConnection = nil
		end

		-- Polar coordinates 2D
		local x = (Radius+Eccentricity/2)*CosineMath(Angle)
		local y = Radius*SineMath(Angle)
		local z = 0
		local offset = CFrame.new(Eccentricity,0,0)
		PlanetOrbiting:PivotTo((PlanetGettingOrbited.CFrame*offset)*CFrame.new(x, y, z))
		Angle += DeltaTime*TAU/TimeToOrbit
	end)

	-- Return the heartbeat connection, so we can disconnect it if we no longer wants the part to orbit
	return HeartbeatConnection
end

example code

local Orbit = require(script.OrbitModule)
Orbit(workspace.Part,workspace.Part2,5,15)
1 Like

I’m so glad and happy people are enjoying the module. It’s also really good for customizing!

1 Like

Thanks for teaching me a couple more new things for this module. Like how in when you are returning the function you put :PVInstance or :number. I’m a generally new coder so it’s always great to learn. Also thanks @Creeperman16487 for teaching me about eccentricity!

1 Like

Tomroblox54321’s Planetary Orbit Module V2

In this new update for the module I upgraded the module to be able to disconnect and not use variables when calling the module to run. Codes Otaku or aka @IlyasTawawe improved the module for me so all credit to him!

Hope you enjoy the small improvement!

1 Like

Hey there! I’m the guy who did the Orbital Mechanics in Roblox devlogs.

Did you know that OrbitLib as seen in that post is now OPEN SOURCE?

I released it quietly and didn’t make an announcement for it because school got in the way. But it should do everything you need it to do. It supports elliptical and hyperbolic orbits (basically 100% of all orbits) and is fairly optimized at what it does.

If you want a demo for what it can accomplish, you can find a version ported to TypeScript and WebGL here:

Just a heads up, the ECI (Earth-centered Inertial) coordinate system uses a different handedness than Roblox’s coordinate system. You’ll have to transform between them for the orbits to display properly.

Otherwise, enjoy!

4 Likes

Ooh. That’s really cool thanks for the cool system and thanks for contribution to the post.

@daftcube This is such an amazing module. It’s clear that you put so much effort into this amazing project. Since I’m a new Coder would you please show me how to use this module for parts.
Thanks!

How would I implement this in-studio because there isn’t really a guide to setup

Really interesting, am surely gonna look into it!

Features in my Advanced Tomroblox54321’s Planetary Orbit Module will be elliptical orbits and eccentric orbits

Tomroblox54321’s Advanced Planetary Orbit Module Is Out!
This is a very advanced module with circular orbits, eccentric orbits , elliptical orbits and more!

Get it here now! : https://www.roblox.com/library/9058460048/Tomroblox54321s-Advanced-Planetary-Orbit-Module

Could you make a video tutorial or at the very least publish an open source example place? I’m kinda stumped. EDIT: nvm got it working