The brick, "LightExplosion" is a ball part that is fired with a laser and then rapidly expands to its size. The issue is when it resizes it goes around blocks instead of cframing into them and it only happens with the onTouch function. When the function is removed it works fine. How would I fix the function to where it doesn't force the ball to go over the designated part and instead half into it? Here's the code causing the problem:
-- Adds a repulsive force to anything this object touches
local Debris = game:GetService('Debris')
local CharacterToIgnore = script:WaitForChild('CharacterToIgnore').Value
local MAGNITUDE = 3E4
local TIME_OF_FORCE = 0.2
local Part = script.Parent
Part.Touched:connect(function(other)
Part.CanCollide= false
Part.Anchored = true
--Variable goes here!
if other.Parent == CharacterToIgnore or (other.Parent and other.Parent.Parent == CharacterToIgnore) then return end
if not other.Anchored then
-- local punchSound = script:FindFirstChild('PunchSound')
--if punchSound then punchSound:Play() end
local direction = (other.Position - Part.Position).unit
local bodyForce = Instance.new('BodyForce')
bodyForce.force = MAGNITUDE * direction-- Adds a repulsive force to anything this object touches
local Debris = game:GetService('Debris')
local CharacterToIgnore = script:WaitForChild('CharacterToIgnore').Value
local MAGNITUDE = 3E4
local TIME_OF_FORCE = 0.2
local Part = script.Parent
Part.Touched:connect(function(other)
Part.CanCollide= false
Part.Anchored = true
--Variable goes here!
if other.Parent == CharacterToIgnore or (other.Parent and other.Parent.Parent == CharacterToIgnore) then return end
if not other.Anchored then
-- local punchSound = script:FindFirstChild('PunchSound')
--if punchSound then punchSound:Play() end
local direction = (other.Position - Part.Position).unit
local bodyForce = Instance.new('BodyForce')
bodyForce.force = MAGNITUDE * direction
bodyForce.Parent = other
Debris:AddItem(bodyForce, TIME_OF_FORCE)
end
end)
bodyForce.Parent = other
Debris:AddItem(bodyForce, TIME_OF_FORCE)
end
end)
Here's the code where the ball is actually created:
local tool = script.Parent
local player = game:GetService("Players").LocalPlayer
local beam = Instance.new("Part", workspace)
tool.Equipped:connect(function(mouse)
print("Tool equipped!")
--wait(1)
mouse.Button1Down:connect(function()
script.Disabled = true
script.Parent.Sound:Play()
print("READY A")
print("Mouse pressed!")
local ray = Ray.new(tool.Handle.CFrame.p, (mouse.Hit.p - tool.Handle.CFrame.p).unit * 300)
local part, position = workspace:FindPartOnRay(ray, player.Character, false, true)
beam.BrickColor = BrickColor.Yellow()
beam.FormFactor = "Custom"
beam.Material = "Neon"
beam.Transparency = 0.25
beam.Anchored = true
beam.Locked = true
beam.CanCollide = false
beam.Shape = "Ball"
beam.Name = "LightExplosion"
beam.Anchored = true
local distance = (tool.Handle.CFrame.p - position).magnitude
beam.Size = Vector3.new(1, 1, 1)
beam.CFrame = CFrame.new(tool.Handle.CFrame.p, position) * CFrame.new(0, 0, -distance / 1)
beam.Size = Vector3.new(2, 2, 2)
local scriptCopy = game.ReplicatedStorage.RepelScript:Clone()
scriptCopy.Parent = game.Workspace.LightExplosion
beam.BrickColor = BrickColor.new("Orange")
wait(.05)
beam.Size = Vector3.new(3, 3, 3)
beam.BrickColor = BrickColor.new("Orange")
wait(.05)
beam.Size = Vector3.new(4, 4, 4)
beam.BrickColor = BrickColor.new("Orange")
wait(.05)
beam.Size = Vector3.new(5, 5, 5)
beam.BrickColor = BrickColor.Yellow()
wait(.05)
beam.Size = Vector3.new(6, 6, 6)
beam.BrickColor = BrickColor.new("Orange")
wait(.05)--
beam.Size = Vector3.new(7, 7, 7)
beam.BrickColor = BrickColor.Yellow()
wait(.05)
beam.Size = Vector3.new(8, 8, 8)
beam.BrickColor = BrickColor.new("Orange")
wait(.05)
beam.Size = Vector3.new(9, 9, 9)
beam.BrickColor = BrickColor.Yellow()
wait(.05)
beam.Size = Vector3.new(10, 10, 10)
beam.BrickColor = BrickColor.new("Orange")
wait(.05)
beam.Size = Vector3.new(11, 11, 11)
beam.BrickColor = BrickColor.Yellow()
wait(.05)
beam.Size = Vector3.new(12, 12, 12)
beam.BrickColor = BrickColor.new("Orange")
wait(.05)
beam.Size = Vector3.new(13, 13, 13)
beam.BrickColor = BrickColor.Yellow()
wait(.05)
beam.Size = Vector3.new(14, 14, 14)
beam.BrickColor = BrickColor.new("Orange")
wait(.05)
beam.Size = Vector3.new(15, 15, 15)
beam.BrickColor = BrickColor.Yellow()
game:GetService("Debris"):AddItem(beam, 1)
if part then
local humanoid = part.Parent:FindFirstChild("Humanoid")
if not humanoid then
humanoid = part.Parent.Parent:FindFirstChild("Humanoid")
end
if humanoid then
humanoid:TakeDamage(30)
end
script.Parent.Reload.Disabled = false
end
end)
end)
--script.Parent.Reload.Disabled = false
--script.Disabled = true
