So I'm working on a puzzle game that uses Portal-style "put the cube on the button" mechanics.
For the buttons, I'm using this script:
script.Parent.Touched:connect(function(activator) if activator.Name == "Activator" then script.Parent.BrickColor = BrickColor.new("Sea green") script.Parent.SurfaceLight.Color = Color3.new(0,170/255,127/255) script.Parent.Parent.Particles.ParticleEmitter.Color = ColorSequence.new(Color3.new(0,170/255,127/255),Color3.new(0,170/255,127/255)) end end) script.Parent.TouchEnded:connect(function() local shouldBeActive = getTouchingParts() if shouldBeActive == false then script.Parent.BrickColor = BrickColor.new("Plum") script.Parent.SurfaceLight.Color = Color3.new(1,0,1) script.Parent.Parent.Particles.ParticleEmitter.Color = ColorSequence.new(Color3.new(1,0,1),Color3.new(1,0,1)) end end) function getTouchingParts() local num = 0 for i,v in pairs(script.Parent:GetTouchingParts()) do if v.Name == "Activator" then num = num + 1 end end if num == 0 then return false else return true end end
It works, but it's buggy. My main problem is that it occasionally fails to register the touch happening or ending.
I dunno what to do; making it a while loop simply returns a script timeout.