package zmaster587.advancedRocketry.client.render.planet; import org.lwjgl.opengl.GL11; import zmaster587.advancedRocketry.api.stations.ISpaceObject; import zmaster587.advancedRocketry.dimension.DimensionManager; import zmaster587.advancedRocketry.dimension.DimensionProperties; import zmaster587.advancedRocketry.stations.SpaceObjectManager; import zmaster587.libVulpes.render.RenderHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.EnumFacing; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; public class RenderSpaceSky extends RenderPlanetarySky { //Mostly vanilla code //TODO: make usable on other planets public RenderSpaceSky() { super(); } Minecraft mc = Minecraft.getMinecraft(); @Override protected ForgeDirection getRotationAxis(DimensionProperties properties, int x, int z) { try { return SpaceObjectManager.getSpaceManager().getSpaceStationFromBlockCoords(x,z).getForwardDirection().getRotation(ForgeDirection.UP); } catch(NullPointerException e) { return ForgeDirection.EAST; } } @Override protected void renderPlanet(Tessellator tessellator1, ResourceLocation icon, float planetOrbitalDistance, float alphaMultiplier, boolean hasAtmosphere, float atmColor[], boolean isGasgiant) { ISpaceObject object = SpaceObjectManager.getSpaceManager().getSpaceStationFromBlockCoords((int)mc.thePlayer.posX, (int)mc.thePlayer.posZ); if(object == null) return; planetOrbitalDistance = object.getOrbitalDistance(); GL11.glPushMatrix(); //GL11.glDisable(GL11.GL_BLEND); GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); GL11.glDisable(GL11.GL_FOG); //GL11.glDisable(GL11.GL_LIGHTING); GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ZERO); mc.renderEngine.bindTexture(icon); GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); //int k = mc.theWorld.getMoonPhase(); //int l = k % 4; //int i1 = k / 4 % 2; //Set planet Orbiting distance; size float f10 = 100f*(200-planetOrbitalDistance)/100f; float Xoffset = (float)((System.currentTimeMillis()/1000000d % 1)); float f14 = 1f + Xoffset; float f15 = 0f + Xoffset; float f16 = f15; float f17 = f14; //TODO: draw sky planets tessellator1.startDrawingQuads(); tessellator1.setColorRGBA_F(1f, 1f, 1f, alphaMultiplier); tessellator1.addVertexWithUV((double)(-f10), -10.0D, (double)f10, (double)f16, (double)f17); tessellator1.addVertexWithUV((double)f10, -10.0D, (double)f10, (double)f14, (double)f17); tessellator1.addVertexWithUV((double)f10, -10.0D, (double)(-f10), (double)f14, (double)f15); tessellator1.addVertexWithUV((double)(-f10), -10.0D, (double)(-f10), (double)f16, (double)f15); tessellator1.draw(); GL11.glPopAttrib(); //Draw atmosphere if applicable if(isGasgiant) { GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); //GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); tessellator1.startDrawingQuads(); mc.renderEngine.bindTexture(DimensionProperties.getAtmosphereLEOResource()); double dist = -5D - 4*(planetOrbitalDistance)/200D; double scalingMult = 1D - 0.9*(planetOrbitalDistance)/200D; int maxAmt = 6; float lng = (float) (Minecraft.getSystemTime()/100000d % 1); for(int i = 0; i < maxAmt; i++) { tessellator1.setColorRGBA_F(0.05f*(maxAmt-i/6f), .4f*(i/6f), 1f, 0.4f); //IDK it looks pretty Xoffset = lng*(i-(maxAmt/4f)); float Yoffset = -lng*i; f14 = i + Yoffset; f15 = 0f + Yoffset; f16 = 0f + Xoffset; f17 = i + Xoffset; RenderHelper.renderTopFaceWithUV(tessellator1, -10D + i*scalingMult, -f10, -f10, 0, 0, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, -10D+ i*scalingMult, 0, 0, f10, f10, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, -10D+ i*scalingMult, -f10, 0, 0, f10, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, -10D+ i*scalingMult, 0, -f10, f10, 0, f14, f15, f16, f17); } tessellator1.draw(); GL11.glDisable(GL11.GL_TEXTURE_2D); //GL11.glDisable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); tessellator1.startDrawingQuads(); tessellator1.setColorRGBA_F(0.5f,0.5f,1, 0.08f); for(int i = 0; i < 5 ; i++) { RenderHelper.renderTopFaceWithUV(tessellator1, dist + i*scalingMult, -f10, -f10, 0, 0, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, dist + i*scalingMult, 0, 0, f10, f10, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, dist + i*scalingMult, -f10, 0, 0, f10, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, dist + i*scalingMult, 0, -f10, f10, 0, f14, f15, f16, f17); } tessellator1.draw(); GL11.glEnable(GL11.GL_TEXTURE_2D); } else if(hasAtmosphere) { GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); //GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); tessellator1.startDrawingQuads(); mc.renderEngine.bindTexture(DimensionProperties.getAtmosphereLEOResource()); tessellator1.setColorRGBA_F(1f, 1f, 1f, .8f); Xoffset = (float)((System.currentTimeMillis()/100000d % 1)); f14 = 1f + Xoffset; f15 = 0f + Xoffset; f16 = f15; f17 = f14; RenderHelper.renderTopFaceWithUV(tessellator1, -10D, -f10, -f10, 0, 0, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, -10D, 0, 0, f10, f10, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, -10D, -f10, 0, 0, f10, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, -10D, 0, -f10, f10, 0, f14, f15, f16, f17); tessellator1.draw(); GL11.glDisable(GL11.GL_TEXTURE_2D); //GL11.glDisable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); tessellator1.startDrawingQuads(); tessellator1.setColorRGBA_F(atmColor[0], atmColor[1], atmColor[2], 0.08f); double dist = -5D - 4*(planetOrbitalDistance)/200D; double scalingMult = 1D - 0.9*(planetOrbitalDistance)/200D; for(int i = 0; i < 5 ; i++) { RenderHelper.renderTopFaceWithUV(tessellator1, dist + i*scalingMult, -f10, -f10, 0, 0, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, dist + i*scalingMult, 0, 0, f10, f10, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, dist + i*scalingMult, -f10, 0, 0, f10, f14, f15, f16, f17); RenderHelper.renderTopFaceWithUV(tessellator1, dist + i*scalingMult, 0, -f10, f10, 0, f14, f15, f16, f17); } tessellator1.draw(); GL11.glEnable(GL11.GL_TEXTURE_2D); } tessellator1.setColorRGBA_F(1f,1f,1f,1f); GL11.glEnable(GL11.GL_FOG); //GL11.glEnable(GL11.GL_LIGHTING); GL11.glPopMatrix(); } @Override protected ResourceLocation getTextureForPlanet(DimensionProperties properties) { return properties.getPlanetIconLEO(); } }