Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Bezier Curve is not plotting currectly?!

Asked by 7 years ago

What I am essentially trying to do is make a Bezier Curve from the player to a brick and instead of it plotting, it's just all spawning the bricks in the middle of the baseplate. Any help is greatly appreciated. This game has FilteringEnabled set to true.

ClientScript - LocalScript:

--// Variables
local Player = game.Players.LocalPlayer
local Camera = game.Workspace.CurrentCamera
local Mouse = Player:GetMouse()

--// Events and Modules
local GameStuff = game.ReplicatedStorage.GameStuff
local CreateShot = GameStuff.Events.CreateShot
local Shoot = GameStuff.Events.Shoot

--// Setup

Mouse.Button1Down:Connect(function()
    Shoot:FireServer(Player.Character.Torso, Mouse.Target)
end)

ServerScript - Script:

--// Events and Modules
local GameStuff = game.ReplicatedStorage.GameStuff
local CreateShot = GameStuff.Events.CreateShot
local Shoot = GameStuff.Events.Shoot

local ShotHandler = require(GameStuff.Modules.ShotHandler)

function createPoints(start, negative)
    local part1 = Instance.new("Part")
    if negative == false then
        part1.CFrame = start.CFrame * CFrame.new(3, 2, 0)
    else
        part1.CFrame = start.CFrame * CFrame.new(-3, -2, 0)
    end
    return part1
end

Shoot.OnServerEvent:Connect(function(player, startpoint, endpoint)
    print (startpoint.Name .. " " .. endpoint.Name)
    print (tostring(startpoint.CFrame) .. " -------------- " .. tostring(endpoint.CFrame))
    ShotHandler.Shoot(startpoint, createPoints(startpoint, false), createPoints(endpoint, true), endpoint)
end)

ShotHandler - ModuleScript:

function addSegment(positon)
    local seg = Instance.new("Part", game.Workspace.ShotHolder)
    seg.Size = Vector3.new(1,1,1)
    seg.BrickColor = BrickColor.new("Medium stone grey")
    seg.Anchored = true
    seg.CanCollide = false
end

function equation(t, a, b, c, d)
    return ( (((1 - t)^3)*a) + (3*((1 - t)^2)*t*b) + (3*(1 - t)*(t^2)*c) + ((t^3)*d) )
end

function drawBezier(a, b, c, d)
    local mag = 0
    local lastPos = equation(0, a, b, c, d)
    for t = 0, 1, .001 do
        local curPos = equation(t, a, b, c, d)
        mag = mag + (lastPos - curPos).magnitude
        if( mag > 1 )then
            mag = 0
            addSegment(curPos)
        end
        lastPos = curPos
    end
end

local shot = {}

function shot.Shoot(point1, point2, point3, point4)
    game.Workspace.ShotHolder:ClearAllChildren()
    wait(.1)
    drawBezier(point1.Position, point2.Position, point3.Position, point4.Position)
end

return shot

Answer this question