Files
PlaneBuilding/scripts/server/Terrain6Old
T

90 lines
2.3 KiB
Plaintext

local CHUNK_SIZE = 256
local RADIUS = 3
local LEEWAY = 20
local POOL_SIZE = 64
local BASE_RADIUS = 1
script:WaitForChild("GenerateChunk").Disabled = true
local pool = 0
local chunks = {}
local schunks = {}
local function chunk(x,z)
if not schunks[x] then schunks[x] = {} end
local i = {x=x,z=z}
local first,second
local c = {delete=function()
if first then
game.Workspace.Terrain:FillRegion(Region3.new(first.Value,second.Value),4,Enum.Material.Air)
end
end,viable = true}
chunks[i]=c
schunks[x][z]=c
task.defer(function()
repeat wait() until pool < POOL_SIZE
if not c.viable and not c.permanent then return end
local actor = Instance.new("Actor")
actor.Parent = game.Workspace
local new_script = script.GenerateChunk:Clone()
local location = new_script.Location
location.Value = Vector3.new(x,CHUNK_SIZE,z)
first = new_script.First
second = new_script.Second
new_script.Parent = actor
new_script.Disabled = false
pool = pool + 1
new_script.Destroying:Connect(function()
pool = pool - 1
end)
end)
return c
end
for x = -BASE_RADIUS,BASE_RADIUS do
for z = -BASE_RADIUS,BASE_RADIUS do
if Vector2.new(x,z).Magnitude < BASE_RADIUS then
chunk(x,z).permanent = true
end
end
end
while wait(0.5) do
for index,chunk in pairs(chunks) do
chunk.viable = false
end
local perPlayer = function(p)
for index,chunk in pairs(chunks) do
if Vector2.new(p.x-index.x*CHUNK_SIZE,p.z-index.z*CHUNK_SIZE).Magnitude < CHUNK_SIZE*(RADIUS+LEEWAY) then
chunk.viable = true
end
end
for x=math.ceil(p.x/CHUNK_SIZE)-RADIUS,math.ceil(p.x/CHUNK_SIZE)+RADIUS do
for z=math.ceil(p.z/CHUNK_SIZE)-RADIUS,math.ceil(p.z/CHUNK_SIZE)+RADIUS do
if not schunks[x] then schunks[x] = {} end
if not schunks[x][z] then
chunk(x,z)
end
end
end
end
for _,player in pairs(game.Players:GetPlayers()) do
if player.Character then
if player.Character.PrimaryPart then
perPlayer(player.Character.PrimaryPart.Position)
end
end
end
perPlayer(game.Workspace.CurrentCamera.CFrame.Position)
for index,chunk in pairs(chunks) do
if not chunk.viable and not chunk.permanent then
schunks[index.x][index.z] = nil
--if #schunks[index.x] == 0 then schunks[index.x] = nil end
chunk.delete()
chunks[index] = nil
end
end
end