PATTERN 1
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
Leave a Comment