Advertisement
Elec0

Building.java

Apr 6th, 2013
420
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.72 KB | None | 0 0
  1.  
  2.     /**
  3.      * Generates circular buildings
  4.      */
  5.     private void genStyle2()
  6.     {
  7.         Vector3f v3Offset = new Vector3f(v3Origin);
  8.         int iSegments = CIRCLE_SEGMENTS;
  9.         float fSegmentAngle = 360/iSegments;
  10.        
  11.         Shape3D s3BaseC = new Shape3D(GL_TRIANGLE_FAN);
  12.         Shape3D s3TopC = new Shape3D(GL_TRIANGLE_FAN);
  13.         Shape3D s3Cyl = new Shape3D(GL_QUADS);
  14.        
  15.         int iBaseHeight = (int)(fDevLevel * S2_HEIGHT_MIN_MULTI) + rand.nextInt((int)(fDevLevel * S2_HEIGHT_MAX_MULTI));
  16.        
  17.         float fCircRadX = fDevLevel * S2_WIDTH_MIN_MULTI + rand.nextInt((int)(fDevLevel * S2_WIDTH_MAX_MULTI));
  18.         float fCircRadY = fCircRadX; // In case I want other shapes, but I don't at the moment
  19.        
  20.         if(iMaxWidthX <= fDevLevel * S2_WIDTH_MIN_MULTI)
  21.         {
  22. //          System.out.println("Max width is less than minimum width, setting max width to minimum width");
  23.             iMaxWidthX = (int)(fDevLevel * S2_WIDTH_MIN_MULTI);
  24.             iMaxWidthY = (int)(fDevLevel * S2_WIDTH_MIN_MULTI);
  25.         }
  26.        
  27.         if(fCircRadX > iMaxWidthX)
  28.         {
  29.             while(fCircRadX > iMaxWidthX)
  30.             {
  31.                 fCircRadX = fDevLevel * S2_WIDTH_MIN_MULTI + rand.nextInt((int)(fDevLevel * S2_WIDTH_MAX_MULTI));
  32.                 fCircRadY = fCircRadX;
  33.             }
  34.         }
  35. //      if(fCircRadY > iMaxWidthY)
  36. //      {
  37. //          while(fCircRadY > iMaxWidthX)
  38. //          {
  39. //              fCircRadY = fDevLevel * S2_WIDTH_MIN_MULTI + rand.nextInt((int)(fDevLevel * S2_WIDTH_MAX_MULTI));
  40. //          }
  41. //      }
  42.        
  43.         int iCuts = 0;
  44.        
  45.         // Have the center vert be in the center for triangle fan
  46.         s3BaseC.addPoint(v3Offset.getX(), v3Offset.getY(), v3Offset.getZ());
  47.        
  48.         int[] iCutLoc = new int[CIRCLE_SEGMENTS];
  49.        
  50.         for(int i = 0; i < iSegments + 1; ++i)
  51.         {
  52.             float fCurRadAng = i * fSegmentAngle;
  53.            
  54.             // If we want to, skip forward 90 degrees to vary the look of the buildings, but not if it's the first vert, cause...I'm not sure, but it doesn't work if it happens
  55.             if(rand.nextFloat() < S2_CIRCLE_CUT_CH && i != 0 && iCuts < S2_CIRCLE_MAX_CUTS)
  56.             {
  57.                
  58.                 if(iSegments - i >= 9 && i != 0)
  59.                 {
  60.                     iCutLoc[i] = 1;
  61.                     i += 9;
  62.                     fCurRadAng += 90;
  63.                     iCuts++;
  64.                 }
  65.                
  66.                
  67.             }
  68.            
  69.             s3BaseC.addPoint(v3Offset.getX() + (float)Math.cos(fCurRadAng * DEG_RAD) * fCircRadX, v3Offset.getY() + (float)Math.sin(fCurRadAng * DEG_RAD) * fCircRadY, v3Offset.getZ());           
  70.         }
  71.        
  72.         s3BaseC.createArray();
  73.        
  74.         float fSkipUV = (float)(iSegments - (iCuts*9));
  75.        
  76.         System.out.println((float)(1f/36f));
  77.        
  78.         for(int i = 1; i < s3BaseC.v3VertsA.length; ++i)
  79.         {
  80.             Vector3f v = s3BaseC.v3VertsA[i];
  81.             s3TopC.addPoint(v.getX(), v.getY(), v.getZ() + iBaseHeight);
  82.            
  83.             if(i != 0)
  84.             {
  85.                 if(s3BaseC.v3VertsA.length > i+1)
  86.                 {
  87.                     s3Cyl.addPoint(v.getX(), v.getY(), v.getZ() + iBaseHeight);
  88.                     s3Cyl.addPoint(v.getX(), v.getY(), v.getZ());
  89.                     s3Cyl.addPoint(s3BaseC.v3VertsA[i+1].getX(), s3BaseC.v3VertsA[i+1].getY(), s3BaseC.v3VertsA[i+1].getZ());
  90.                     s3Cyl.addPoint(s3BaseC.v3VertsA[i+1].getX(), s3BaseC.v3VertsA[i+1].getY(), s3BaseC.v3VertsA[i+1].getZ() + iBaseHeight);
  91.                    
  92.                     float fCurNum = 0;
  93.                     // Then we cut 90 degrees here and need to change the textures
  94.                     if(iCutLoc[i] == 1)
  95.                     {
  96.                         fCurNum = i + 9;
  97.                     }
  98.                     else
  99.                     {
  100.                         fCurNum = i;
  101.                     }
  102.                    
  103.  
  104.                     s3Cyl.addUVPoint(0, (i-1)/fSkipUV);
  105.                     s3Cyl.addUVPoint(0, fCurNum/fSkipUV);
  106.                     s3Cyl.addUVPoint(4, fCurNum/fSkipUV);
  107.                     s3Cyl.addUVPoint(4, (i-1)/fSkipUV);                
  108.                    
  109.                 }
  110.                
  111.             }
  112.            
  113.         }
  114.        
  115.         s3TopC.createArray();
  116.         s3Cyl.createArray();
  117.        
  118.         tTexture = texGen.generate();
  119.         s3Cyl.setTexture(tTexture);
  120.        
  121.         s3Objects.add(s3BaseC);
  122.         s3Objects.add(s3TopC);
  123.         s3Objects.add(s3Cyl);
  124.        
  125.     }
  126.    
  127.  
  128.     public void render()
  129.     {
  130.         glPushMatrix();
  131.        
  132.         glColor3f(1, 1, 1);
  133.        
  134.         for(Shape3D s : s3Objects)
  135.         {
  136.             s.render();
  137.         }
  138.        
  139.         glPopMatrix();
  140.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement