Copy salient and essential scripts and models from Plane Building Roblox
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
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
|
||||
Reference in New Issue
Block a user