Volleyball 4.2 BALL PREDICTION SPOT - OPEN SOURCE

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 1

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)

You might also like