Advertisement
yamanohera155233

Terrain

Jul 3rd, 2016
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. local chunks = {}
  2. local player = game.Players.LocalPlayer
  3. local char = player.Character
  4. local torso = char:WaitForChild("Torso")
  5.  
  6. local baseHeight = 10 -- The main height factor for the terrain.
  7. local chunkScale = 3 -- The grid scale for terrain generation. Should be kept relatively low if used in real-time.
  8. local renderDist = 120 -- The length/width of chunks in voxels that should be around the player at all times
  9. local xScale = 90 -- How much we should strech the X scale of the generation noise
  10. local zScale = 90 -- How much we should strech the Z scale of the generation noise
  11.  
  12. local generationSeed = math.random() -- Seed for determining the main height map of the terrain.
  13. local mountainSeed = math.random() -- Seed for determining if we should make mountains.
  14.  
  15. function chunkExists(chunkX,chunkZ)
  16. if not chunks[chunkX] then
  17. chunks[chunkX] = {}
  18. end
  19. return chunks[chunkX][chunkZ]
  20. end
  21.  
  22. function mountLayer(x,heightY,z,material)
  23. local x = math.floor(x/4)
  24. local z = math.floor(z/4)
  25. for y = -baseHeight,heightY do
  26. workspace.Terrain:SetCell(x,y,z,material,0,0)
  27. end
  28. end
  29.  
  30. function makeChunk(chunkX,chunkZ)
  31. local rootPos = Vector3.new(chunkX*chunkScale,0,chunkZ*chunkScale)
  32. chunks[chunkX][chunkZ] = true -- Acknowledge the chunk's existance.
  33. for x = 0,chunkScale-1 do
  34. for z = 0,chunkScale-1 do
  35. local cx = (chunkX*chunkScale) + x
  36. local cz = (chunkZ*chunkScale) + z
  37. local noise = math.noise(generationSeed,cx/xScale,cz/zScale)
  38. local material = noise < 0 and 1 or 4
  39. local cy = noise*baseHeight*material
  40. mountLayer(cx,cy,cz,material)
  41. end
  42. end
  43. end
  44.  
  45. while true do
  46. local chunkX,chunkZ = math.floor(torso.Position.X/chunkScale),math.floor(torso.Position.Z/chunkScale)
  47. local range = math.max(1,renderDist/chunkScale)
  48. for x = -range,range do
  49. for z = -range,range do
  50. if not (x == 0 and z == 0) then
  51. local cx,cz = chunkX + x,chunkZ + z
  52. if not chunkExists(cx,cz) then
  53. makeChunk(cx,cz)
  54. end
  55. end
  56. end
  57. end
  58. wait()
  59. end
  60. --------------------------------------------------
  61. local region = Region3.new(Vector3.new(-1250,0,-1250), Vector3.new(1250,18,1250))
  62. region = region:ExpandToGrid(4)
  63. game.Workspace.Terrain:FillRegion(region, 4, Enum.Material.Water)
  64. --------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement