I'm currently trying to detect if a player has touched a brick in the last 5 seconds. I have tried a for loop and a repeat loop and both of them would not do the job I want. Instead of breaking the loop when the brick is touched, it just keeps going and starts another loop on top of the original one. I have a script that sets a BoolValue object to true while the brick is being moved and to false when it stops. Here is the for loop I tried:
local timesenselasttouch = 0
maxx = script.Parent.Position.X + 22
minx = script.Parent.Position.X - 5
maxz = script.Parent.Position.Z
minz = script.Parent.Position.Z - 110
script.Parent.BoolValue.Changed:connect(function(value)
repeat wait() until value == false
for i = 1, 5 do
timesenselasttouch = i
wait(1)
print(timesenselasttouch)
if timesenselasttouch >= 5 then
script.Parent.BodyPosition.position = Vector3.new(minx + 5, script.Parent.BodyPosition.position.Y, maxz)
break
end
if value == true then
timesenselasttouch = 0
break
end
end
end)
And here is the repeat loop:
local timesenselasttouch = 0
maxx = script.Parent.Position.X + 22
minx = script.Parent.Position.X - 5
maxz = script.Parent.Position.Z
minz = script.Parent.Position.Z - 110
script.Parent.BoolValue.Changed:connect(function(value)
repeat wait() until value == false
repeat
timesenselasttouch = timesenselasttouch + 1
wait(1)
print(timesenselasttouch)
if timesenselasttouch >= 5 then
script.Parent.BodyPosition.position = Vector3.new(minx + 5, script.Parent.BodyPosition.position.Y, maxz)
break
end
if value == true then
timesenselasttouch = 0
break
end
until timesenselasttouch >= 5 or value == true
end)
As previously stated, both loops don't reset and break when I touch the block a second time but rather starts another loop on top of the previous one. What can I do to detect if a player has touched the brick in the last 5 seconds?

1 comment
Ahh, thank you, this is much more efficient!