Wallace543

Terrain chunk.py

Oct 1st, 2013
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.23 KB | None | 0 0
  1. from pandac.PandaModules import *
  2.  
  3. chunksize = 32#64#128
  4. perlin = PerlinNoise2(1224,1224)#500,300)
  5. ##print perlin(0,0)
  6. name = -1
  7. chunks = []
  8. chunks1 = []
  9. coords = []
  10.  
  11. #Textures
  12. grass = PNMImage()
  13. grass.read(Filename("Textures/grass3.png"))
  14. ##water = PNMImage()
  15. ##water.read(Filename("Textures/water1.png"))
  16. sand = PNMImage()
  17. sand.read(Filename("Textures/sand2.png"))
  18. mountain = PNMImage()
  19. mountain.read(Filename("Textures/mountain2.png"))
  20. snow = PNMImage()
  21. snow.read(Filename("Textures/snow2.png"))
  22.  
  23. class chunk(object):
  24.     x = 0
  25.     y = 0
  26. ##    north = False
  27. ##    east = False
  28. ##    south = False
  29. ##    west = False
  30. ##    North = 0
  31. ##    East = 0
  32. ##    West = 0
  33. ##    South = 0
  34.     done = False
  35.     offsetx = 0
  36.     offsety = 0
  37.     ID = 0
  38.     def __init__(self,x,y):
  39.         self.x = x
  40.         self.y = y
  41.         self.offsetx = x
  42.         self.offsety = y              
  43.         self.x1 = self.x+chunksize #bottom corner  
  44.         self.y1 = self.y+chunksize #top corner
  45.     def makeChunk(self):
  46.         global name
  47.         if [self.x,self.y] not in coords:
  48.             self.n = PNMImage(chunksize+1,chunksize+1)
  49.             self.t = PNMImage(chunksize+1,chunksize+1)
  50.             for y in xrange(chunksize+1):
  51.                 for x in xrange(chunksize+1):
  52.                     p = perlin.noise(x+self.offsetx,y-self.offsety)
  53. ##                    p+=0.5
  54.                     if p >= 0:
  55.                         p*=127.5
  56.                         p+=5
  57.                         self.n.setRedVal(x,y,p)
  58.                         self.n.setGreenVal(x,y,p)
  59.                         self.n.setBlueVal(x,y,p)
  60.                         if p <= 10:
  61.                             value = sand.getXelVal(x,y)
  62.                             self.t.setXelVal(x,y,value)
  63.                         elif p > 10 and p <= 20:
  64.                             value = sand.getXelVal(x,y)
  65.                             self.t.setXelVal(x,y,value)
  66.                         elif p > 20 and p <= 80:
  67.                             value = grass.getXelVal(x,y)
  68.                             self.t.setXelVal(x,y,value)
  69.                         elif p > 80 and p <= 90:
  70.                             value = mountain.getXelVal(x,y)
  71.                             self.t.setXelVal(x,y,value)
  72.                         elif p > 90:
  73.                             value = snow.getXelVal(x,y)
  74.                             self.t.setXelVal(x,y,value)
  75.                     elif p < 0:
  76.                         p+=2
  77.                         value = sand.getXelVal(x,y)
  78.                         self.t.setXelVal(x,y,value)
  79.                         self.n.setRedVal(x,y,p)
  80.                         self.n.setGreenVal(x,y,p)
  81.                         self.n.setBlueVal(x,y,p)
  82.             self.n.makeGrayscale()
  83. ##            name+=1
  84. ##            name1 = str(name)
  85. ##            self.t.write("maps/"+name1+"_.png")
  86. ##            self.n.write("maps/"+name1+".png")
  87.             self.T = Texture()
  88.             self.T.load(self.t)
  89.             self.T.setWrapU(Texture.WMClamp)
  90.             self.T.setWrapV(Texture.WMClamp)
  91.             #GeoMipTerrain Stuff
  92.             self.terrain = GeoMipTerrain("terrain")
  93.             self.terrain.setHeightfield(self.n)
  94.             self.terrain.setBlockSize(8)#128)
  95.             self.terrain.setNear(256)
  96.             self.terrain.setFar(512)
  97.             self.terrain.setMinLevel(2)
  98.             self.terrain.setFocalPoint(base.camera)
  99.             self.terrain.setBorderStitching(True)
  100.             root = self.terrain.getRoot()
  101.             root.reparentTo(render)
  102.             root.setSz(500)#150)
  103.             self.scaleZ = root.getSz()
  104.             self.terrain.setAutoFlatten(GeoMipTerrain.AFMStrong)
  105.             self.terrain.generate()
  106.             ts = TextureStage("ts0")
  107.             root.setTexture(ts,self.T)
  108. ##            root.setLight(self.plnp)
  109. ##            root.setShaderInput("light", self.plnp)
  110. ##            root.setLight(self.alnp)
  111. ##            root.setShaderAuto()
  112.             chunks.append(self.terrain)
  113.             chunks1.append(root)
  114.             root.setPos(self.x,self.y,0)
  115.             coords.append([self.x,self.y])
  116.             self.done = True
  117.             self.ID = [self.offsetx/chunksize,self.offsety/chunksize]
  118. ##            print len(chunks)
Advertisement
Add Comment
Please, Sign In to add comment