ForeverDev

Untitled

Sep 29th, 2014
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.98 KB | None | 0 0
  1.  local conf = function(obj, ...)
  2.     for _, property in ipairs({...}) do
  3.         obj[property[1]] = property[2]
  4.     end
  5.     return obj
  6. end
  7.  
  8. local grid = 100;
  9. local size = 10;
  10. local ticks = 0;
  11.  
  12. local minHill, maxHill = 50, 150
  13.  
  14. local terrain = Instance.new("Model", Workspace);
  15.  
  16. local parts = {}
  17.  
  18. --create grid of parts
  19. for x = -0.5 * (grid * size), 0.5 * (grid * size), size do
  20.     for z = -0.5 * (grid * size), 0.5 * (grid * size), size do
  21.         ticks = ticks + 1
  22.         if ticks % 200 == 0 then
  23.             wait()
  24.         end
  25.         table.insert(parts, conf(
  26.             Instance.new("Part", terrain),
  27.             {"FormFactor", Enum.FormFactor.Custom},
  28.             {"Position", Vector3.new(x, 0, z)},
  29.             {"Size", Vector3.new(size, 10, size)},
  30.             {"Anchored", true},
  31.             {"TopSurface", Enum.SurfaceType.Smooth}
  32.         ))
  33.     end
  34. end
  35.  
  36. local ticks = 0
  37.        
  38. --create hills.  update:  hills now stack, creating mountains
  39. for i = 1, grid do
  40.     ticks = ticks + 1
  41.     if ticks % 2 == 0 then
  42.         wait()
  43.     end
  44.     local rand = parts[math.random(#parts)]
  45.     local radius = math.random(minHill, maxHill)
  46.     for _, part in ipairs(parts) do
  47.         if (rand.Position - part.Position).magnitude < radius then
  48.             part.Size = part.Size + Vector3.new(0, radius - (rand.Position - part.Position).magnitude, 0)
  49.         end
  50.     end
  51. end
  52.  
  53. --normalize
  54. local high, low = 0, 2^16
  55.  
  56. --find lowest and highest grid points (can't use unpack with math.max or math.min, table is too big)
  57. for _, part in ipairs(parts) do
  58.     if part.Size.Y < low then
  59.         low = part.Size.Y
  60.     elseif part.Size.Y > high then
  61.         high = part.Size.Y
  62.     end
  63. end
  64.  
  65. --normalize parts based on lowest and highest points
  66. for _, part in ipairs(parts) do
  67.     part.Size = Vector3.new(size, (grid * 2) * (part.Size.Y - low) / (high - low), size)
  68.     if part.Size.Y <= 0.3 then
  69.         part.BrickColor = BrickColor.new("Bright blue")
  70.     else
  71.         part.BrickColor = BrickColor.new("Camo")
  72.         part.Material = Enum.Material.Grass
  73.     end
  74. end
  75.  
  76. --make trees
  77. local m = Instance.new("Model", Workspace)
  78. m.Name = "Trees"
  79.  
  80. for i = 1, grid do
  81.     local plant;
  82.     local start = tick()
  83.     repeat
  84.         plant = parts[math.random(#parts)]
  85.         if (tick() - start > 2) then
  86.             finish = true
  87.             break
  88.         end
  89.     until plant.BrickColor == BrickColor.new("Camo")
  90.     if finish then
  91.         break
  92.     end
  93.     local trunk = Instance.new("Part", m)
  94.     local branch = Instance.new("Part", m)
  95.     local colors = {"Bright red", "Bright orange", "Bright yellow", "Bright green"}
  96.     conf(
  97.         trunk,
  98.         {"Size", Vector3.new(size/5, size, size/5)},
  99.         {"Position", plant.Position},
  100.         {"Anchored", true},
  101.         {"TopSurface", "Smooth"},
  102.         {"BrickColor", BrickColor.new("Brown")},
  103.         {"Material", "Wood"}
  104.     )
  105.     conf(
  106.         branch,
  107.         {"Size", Vector3.new(size, size, size)},
  108.         {"Position", trunk.Position},
  109.         {"Anchored", true},
  110.         {"TopSurface", "Smooth"},
  111.         {"BottomSurface", "Smooth"},
  112.         {"Shape", "Ball"},
  113.         {"Material", "Grass"},
  114.         {"BrickColor", BrickColor.new(colors[math.random(#colors)])}
  115.     )
  116. end
  117.  
  118. game.Players.CharacterAutoLoads = true
  119.  
  120. for _, player in ipairs(game.Players:GetPlayers()) do
  121.     player:LoadCharacter()
  122. end
Advertisement
Add Comment
Please, Sign In to add comment