- repeat wait() until workspace:FindFirstChild("Ball")
-
- -- Constants
- local UserInputService = game:GetService("UserInputService")
- local RunService = game:GetService("RunService")
-
- -- Marker
- local Marker = Instance.new("Part")
- Marker.Name = "Marker"
- Marker.Size = Vector3.new(2, 2, 2)
- Marker.Shape = Enum.PartType.Ball
- Marker.BrickColor = BrickColor.new("Bright violet")
- Marker.CanCollide = false
- Marker.Anchored = true
- Marker.Parent = workspace
- Marker.Transparency = 1
- Marker.Material = Enum.Material.Neon
-
- -- Physics
- local function PHYSICS_STUFF(velocity, position)
- local acceleration = -workspace.Gravity
- local timeToLand = (-velocity.y - math.sqrt(velocity.y * velocity.y - 4 * 0.5 * acceleration * position.y)) / (2 * 0.5 * acceleration)
- local horizontalVelocity = Vector3.new(velocity.x, 0, velocity.z)
- local landingPosition = position + horizontalVelocity * timeToLand + Vector3.new(0, -position.y, 0)
- return landingPosition
- end
-
- -- Construct
- RunService:BindToRenderStep("VisualizeLandingPosition", Enum.RenderPriority.Camera.Value, function()
- Marker.Transparency = 0.5
- for _, ballModel in ipairs(workspace:GetChildren()) do
- if ballModel:IsA("Model") and ballModel.Name == "Ball" then
- local ball = ballModel:FindFirstChild("BallPart")
- if ball then
- local initialVelocity = ballModel.Velocity
- local landingPosition = PHYSICS_STUFF(initialVelocity.Value, ball.Position)
- Marker.CFrame = CFrame.new(landingPosition)
- end
- end
- end
- end)