Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Generates circular buildings
- */
- private void genStyle2()
- {
- Vector3f v3Offset = new Vector3f(v3Origin);
- int iSegments = CIRCLE_SEGMENTS;
- float fSegmentAngle = 360/iSegments;
- Shape3D s3BaseC = new Shape3D(GL_TRIANGLE_FAN);
- Shape3D s3TopC = new Shape3D(GL_TRIANGLE_FAN);
- Shape3D s3Cyl = new Shape3D(GL_QUADS);
- int iBaseHeight = (int)(fDevLevel * S2_HEIGHT_MIN_MULTI) + rand.nextInt((int)(fDevLevel * S2_HEIGHT_MAX_MULTI));
- float fCircRadX = fDevLevel * S2_WIDTH_MIN_MULTI + rand.nextInt((int)(fDevLevel * S2_WIDTH_MAX_MULTI));
- float fCircRadY = fCircRadX; // In case I want other shapes, but I don't at the moment
- if(iMaxWidthX <= fDevLevel * S2_WIDTH_MIN_MULTI)
- {
- // System.out.println("Max width is less than minimum width, setting max width to minimum width");
- iMaxWidthX = (int)(fDevLevel * S2_WIDTH_MIN_MULTI);
- iMaxWidthY = (int)(fDevLevel * S2_WIDTH_MIN_MULTI);
- }
- if(fCircRadX > iMaxWidthX)
- {
- while(fCircRadX > iMaxWidthX)
- {
- fCircRadX = fDevLevel * S2_WIDTH_MIN_MULTI + rand.nextInt((int)(fDevLevel * S2_WIDTH_MAX_MULTI));
- fCircRadY = fCircRadX;
- }
- }
- // if(fCircRadY > iMaxWidthY)
- // {
- // while(fCircRadY > iMaxWidthX)
- // {
- // fCircRadY = fDevLevel * S2_WIDTH_MIN_MULTI + rand.nextInt((int)(fDevLevel * S2_WIDTH_MAX_MULTI));
- // }
- // }
- int iCuts = 0;
- // Have the center vert be in the center for triangle fan
- s3BaseC.addPoint(v3Offset.getX(), v3Offset.getY(), v3Offset.getZ());
- int[] iCutLoc = new int[CIRCLE_SEGMENTS];
- for(int i = 0; i < iSegments + 1; ++i)
- {
- float fCurRadAng = i * fSegmentAngle;
- // 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
- if(rand.nextFloat() < S2_CIRCLE_CUT_CH && i != 0 && iCuts < S2_CIRCLE_MAX_CUTS)
- {
- if(iSegments - i >= 9 && i != 0)
- {
- iCutLoc[i] = 1;
- i += 9;
- fCurRadAng += 90;
- iCuts++;
- }
- }
- s3BaseC.addPoint(v3Offset.getX() + (float)Math.cos(fCurRadAng * DEG_RAD) * fCircRadX, v3Offset.getY() + (float)Math.sin(fCurRadAng * DEG_RAD) * fCircRadY, v3Offset.getZ());
- }
- s3BaseC.createArray();
- float fSkipUV = (float)(iSegments - (iCuts*9));
- System.out.println((float)(1f/36f));
- for(int i = 1; i < s3BaseC.v3VertsA.length; ++i)
- {
- Vector3f v = s3BaseC.v3VertsA[i];
- s3TopC.addPoint(v.getX(), v.getY(), v.getZ() + iBaseHeight);
- if(i != 0)
- {
- if(s3BaseC.v3VertsA.length > i+1)
- {
- s3Cyl.addPoint(v.getX(), v.getY(), v.getZ() + iBaseHeight);
- s3Cyl.addPoint(v.getX(), v.getY(), v.getZ());
- s3Cyl.addPoint(s3BaseC.v3VertsA[i+1].getX(), s3BaseC.v3VertsA[i+1].getY(), s3BaseC.v3VertsA[i+1].getZ());
- s3Cyl.addPoint(s3BaseC.v3VertsA[i+1].getX(), s3BaseC.v3VertsA[i+1].getY(), s3BaseC.v3VertsA[i+1].getZ() + iBaseHeight);
- float fCurNum = 0;
- // Then we cut 90 degrees here and need to change the textures
- if(iCutLoc[i] == 1)
- {
- fCurNum = i + 9;
- }
- else
- {
- fCurNum = i;
- }
- s3Cyl.addUVPoint(0, (i-1)/fSkipUV);
- s3Cyl.addUVPoint(0, fCurNum/fSkipUV);
- s3Cyl.addUVPoint(4, fCurNum/fSkipUV);
- s3Cyl.addUVPoint(4, (i-1)/fSkipUV);
- }
- }
- }
- s3TopC.createArray();
- s3Cyl.createArray();
- tTexture = texGen.generate();
- s3Cyl.setTexture(tTexture);
- s3Objects.add(s3BaseC);
- s3Objects.add(s3TopC);
- s3Objects.add(s3Cyl);
- }
- public void render()
- {
- glPushMatrix();
- glColor3f(1, 1, 1);
- for(Shape3D s : s3Objects)
- {
- s.render();
- }
- glPopMatrix();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement