roblox lua does collection service replicate code example
Example: roblox tagging objects
local CollectionService = game:GetService("CollectionService")
------------------------------------------------------------------------------
-- In this section of the script, we define a Door class. This could be placed in
-- its own independent ModuleScript.
-- For more information on this class pattern, check out
-- the object-oriented programming chapter in Programming in Lua:
-- https://www.lua.org/pil/16.html
local Door = {}
Door.__index = Door
Door.TAG_NAME = "Door"
Door.OPEN_TIME = 2
function Door.new(door)
-- Create a table which will act as our new door object.
local self = {}
-- Setting the metatable allows the table to access
-- the SetOpen, OnTouch and Cleanup methods even if we did not
-- add all of the functions ourself - this is because the
-- __index metamethod is set in the Door metatable.
setmetatable(self, Door)
-- Keep track of some door properties of our own
self.door = door
self.debounce = false
-- Initialize a Touched event to call a method of the door
self.touchConn = door.Touched:Connect(function (...)
self:OnTouch(...)
end)
-- Initialize the state of the door
self:SetOpen(false)
-- Print a message so we know when doors are initialized
print("Initialized door: " .. door:GetFullName())
return self
end
function Door:SetOpen(isOpen)
if isOpen then
self.door.Transparency = .75
self.door.CanCollide = false
else
self.door.Transparency = 0
self.door.CanCollide = true
end
end
function Door:OnTouch(part)
if self.debounce then return end
local human = part.Parent:FindFirstChild("Humanoid")
if not human then return end
self.debounce = true
self:SetOpen(true)
wait(Door.OPEN_TIME)
self:SetOpen(false)
self.debounce = false
end
function Door:Cleanup()
self.touchConn:disconnect()
self.touchConn = nil
end
------------------------------------------------------------------------------
-- In this section of the script, we want to listen for objects with the door
-- tag. When we find one, create a new Door and keep track of it. When the door
-- tag is removed, we'll find the Door we created and destroy it.
local doors = {}
local doorAddedSignal = CollectionService:GetInstanceAddedSignal(Door.TAG_NAME)
local doorRemovedSignal = CollectionService:GetInstanceRemovedSignal(Door.TAG_NAME)
local function onDoorAdded(door)
if door:IsA("BasePart") then
-- Create a new Door object and save it
-- The door class will take over from here!
doors[door] = Door.new(door)
end
end
local function onDoorRemoved(door)
if doors[door] then
-- Clean up an already-existing door
doors[door]:Cleanup()
doors[door] = nil
end
end
-- Listen for existing tags, tag additions and tag removals for the door tag
for _,inst in pairs(CollectionService:GetTagged(Door.TAG_NAME)) do
onDoorAdded(inst)
end
doorAddedSignal:Connect(onDoorAdded)
doorRemovedSignal:Connect(onDoorRemoved)
COPY CODE
LIGHT THEME
TREMOLOSOUNDEFFECT