Guest User

Untitled

a guest
Oct 16th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. from __future__ import division
  2. from perlin import Perlin
  3. from biomes import biomes
  4. import time, random
  5.  
  6. def generate(master, chunk):
  7. chunk.terrain = generate_terrain(
  8. chunk.position[0],
  9. chunk.position[1],
  10. master.seed,
  11. master.quality,
  12. master.minz,
  13. master.maxz
  14. )
  15.  
  16. chunk.biomes = generate_biomes()
  17.  
  18. sr = ((-1, -1), (0, -1), (1, -1),
  19. (-1, 0), (1, 0),
  20. (-1, 1), (0, 1), (1, 1))
  21.  
  22. for x in range(16):
  23. for y in range(16):
  24. z = chunk.terrain[(x, y)]
  25. u = 0
  26.  
  27. for ch in sr:
  28. cx = x + ch[0]
  29. cy = y + ch[1]
  30.  
  31. if cx < 0 or cy < 0 or cx > 15 or cy > 15:
  32. continue
  33.  
  34. cd = z - chunk.terrain[(cx, cy)]
  35.  
  36. if cd > 1 and cd - 1 > u:
  37. u = cd - 1
  38.  
  39. for i in range(1 + u):
  40. bz = z - i
  41. bt = chunk.biomes[x, y].get_dbt(x, y, bz)
  42. chunk[x, y, bz] = bt
  43.  
  44. def generate_terrain(cx, cy, seed, quality, minz, maxz):
  45. dt = quality + seed # Modulator.
  46. pl = Perlin() # Generator.
  47. op = {} # Output.
  48.  
  49. for x in range(16):
  50. for y in range(16):
  51. z = pl.noise((x / seed) / dt, (y / seed) / dt, 0)
  52.  
  53. if z < 0.0:
  54. z = 0.0
  55.  
  56. if z > 1.0:
  57. z = 1.0
  58.  
  59. z = int(round((z * (maxz - minz)) + minz))
  60. op[(x, y)] = z
  61.  
  62. return op
  63.  
  64. def generate_biomes():
  65. op = {}
  66.  
  67. for x in range(16):
  68. for y in range(16):
  69. op[(x, y)] = biomes['forest'] # no generation yet
  70.  
  71. return op
Add Comment
Please, Sign In to add comment