I am making an interacting system, and I created the basic Interact system, how do I make it more efficient?
-- Local Script
local main = require(game.ReplicatedStorage.Resources.Modules.Shared.MainFramework)
main:setupScript() -- this is just to make the Services table work for my game.
local userInputService = game:GetService("UserInputService")
local runService = Services.RunService
local players = Services.Players
local localPlayer = players.LocalPlayer
local KEYBIND_FOR_INTERACTION = Enum.KeyCode.E
local debounceforTween = false
local deb = false
local function tweeninandout()
end
local remoteEvent = Services.ReplicatedStorage.Resources.Events.OnInputDetected
local function onInputBegan(...)
for _, interactive in ipairs(workspace.Interactives:GetChildren()) do
if interactive:FindFirstChild("IsInteractive") then
local Character = localPlayer.Character
if Character then
local humanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
if humanoidRootPart then
if Character:FindFirstChildWhichIsA("Humanoid").Health <= 0 then
break
else
local magnitude = (interactive.Position - humanoidRootPart.Position).magnitude
if magnitude <= interactive.IsInteractive.Range.Value then
local b = tweeninandOut()
if b then
return
end
remoteEvent:FireServer(interactive)
end
end
end
end
end
end
end
userInputService.InputBegan:Connect(function(input, gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.Keyboard then
if input.KeyCode == KEYBIND_FOR_INTERACTION then
onInputBegan()
end
end
end)
local interactives = workspace.Interactives:GetChildren()
script.Parent.InteractiveFrame.KeyLabel.MouseButton1Click:Connect(onInputBegan)
runService.RenderStepped:Connect(function(rs)
if deb then return end
deb = true
script.Parent.InteractiveFrame.Visible = false
script.Parent.Overlay.Visible = false
for _, interactive in pairs(interactives) do
local character = localPlayer.Character
if character then
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
if humanoidRootPart then
local magnitude = (interactive.Position - humanoidRootPart.Position).magnitude
if magnitude <= interactive.IsInteractive.Range.Value then
script.Parent.InteractiveFrame.Visible = true
script.Parent.Overlay.Visible = true
script.Parent.InteractiveFrame.InteractText.Text = interactive.IsInteractive.TextToShow.Value
local Vector3toUDim2 = workspace.CurrentCamera:WorldToScreenPoint(interactive.Position)
script.Parent.InteractiveFrame.Position = UDim2.new(0, Vector3toUDim2.X, 0, Vector3toUDim2.Y);
script.Parent.Overlay.Position = UDim2.new(0, Vector3toUDim2.X, 0, Vector3toUDim2.Y);
end
end
end
end
deb = false
end)
