PATTERN 1
unknown
lua
9 months ago
2.5 kB
3
Indexable
local Workspace = game:GetService("Workspace")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SpawnRegion: Part = Workspace.ObjectSpawner.SpawnRegion
local ObjectClone: Folder = Workspace.ObjectSpawner.ObjectClone
local ObjectsFolder: Folder = ReplicatedStorage:WaitForChild("ObjectSpawner")
local SPAWN_INTERVAL: number = 0.3
local MAX_OBJECTS: number = 200
local MOVE_DIRECTION: Vector3 = Vector3.new(-1, 0, 0)
local MOVE_SPEED: number = 15
local Local = {}
local Shared = {}
function Shared.OnStart()
-- Loop para spawnar objetos periodicamente
task.spawn(function()
while true do
Local.SpawnObject()
task.wait(SPAWN_INTERVAL)
end
end)
end
--- Verifica se o objeto esta dentro da regiao de spawn
function Local.IsWithinSpawnRegion(objectPosition: Vector3): boolean
local minX = SpawnRegion.Position.X - SpawnRegion.Size.X / 2
local maxX = SpawnRegion.Position.X + SpawnRegion.Size.X / 2
local minZ = SpawnRegion.Position.Z - SpawnRegion.Size.Z / 2
local maxZ = SpawnRegion.Position.Z + SpawnRegion.Size.Z / 2
return objectPosition.X >= minX and objectPosition.X <= maxX and
objectPosition.Z >= minZ and objectPosition.Z <= maxZ
end
function Local.SpawnObject(): nil
if #ObjectClone:GetChildren() >= MAX_OBJECTS then
return
end
local objects: Model = ObjectsFolder:GetChildren()[math.random(1, #ObjectsFolder:GetChildren())]
local newObject: Model = objects:Clone()
-- Posição inicial ajustada
local spawnPosition = Vector3.new(
math.random(SpawnRegion.Position.X - SpawnRegion.Size.X/2, SpawnRegion.Position.X + SpawnRegion.Size.X/2),
SpawnRegion.Position.Y + 5,
math.random(SpawnRegion.Position.Z - SpawnRegion.Size.Z/2, SpawnRegion.Position.Z + SpawnRegion.Size.Z/2)
)
newObject:PivotTo(CFrame.new(spawnPosition))
newObject.Anchored = false
newObject.Parent = ObjectClone
-- Lógica de movimento
task.spawn(function()
while newObject.Parent == ObjectClone do
local delta: Vector3 = MOVE_DIRECTION * MOVE_SPEED * task.wait() -- Multiplica pela espera do `task.wait()`
newObject:PivotTo(newObject.CFrame * CFrame.new(delta))
-- Se o objeto sair da área de spawn, destrua-o
if not Local.IsWithinSpawnRegion(newObject.Position) then
newObject:Destroy()
end
end
end)
end
return Shared
Editor is loading...
Leave a Comment