Java tutorial
/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.gui; import matteroverdrive.MatterOverdrive; import matteroverdrive.Reference; import matteroverdrive.api.renderer.ISpaceBodyHoloRenderer; import matteroverdrive.client.data.Color; import matteroverdrive.container.ContainerStarMap; import matteroverdrive.container.MOBaseContainer; import matteroverdrive.data.ScaleTexture; import matteroverdrive.gui.pages.starmap.*; import matteroverdrive.network.packet.server.starmap.PacketStarMapClientCommands; import matteroverdrive.proxy.ClientProxy; import matteroverdrive.starmap.GalaxyClient; import matteroverdrive.starmap.data.Planet; import matteroverdrive.starmap.data.Star; import matteroverdrive.starmap.data.TravelEvent; import matteroverdrive.tile.TileEntityMachineStarMap; import matteroverdrive.util.MOStringHelper; import matteroverdrive.util.RenderUtils; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.AdvancedModelLoader; import net.minecraftforge.client.model.IModelCustom; import org.lwjgl.opengl.GL11; import org.lwjgl.util.glu.Project; import java.util.Collection; import java.util.List; import static org.lwjgl.opengl.GL11.*; /** * Created by Simeon on 6/12/2015. */ public class GuiStarMap extends MOGuiMachine<TileEntityMachineStarMap> { public static ScaleTexture BG = new ScaleTexture(new ResourceLocation(Reference.PATH_GUI + "star_map.png"), 255, 141).setOffsets(213, 34, 42, 94); Minecraft mc; IModelCustom sphere; PagePlanetMenu planetPage; PageGalaxy pageGalaxy; PageQuadrant pageQuadrant; PageStar pageStar; PagePlanetStats pagePlanetStats; public GuiStarMap(InventoryPlayer inventoryPlayer, TileEntityMachineStarMap machine) { super(new ContainerStarMap(inventoryPlayer, machine), machine, 480, 360); mc = Minecraft.getMinecraft(); sphere = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.MODEL_SPHERE)); background = BG; texW = 255; texH = 237; slotsList.getElements().clear(); sidePannel.BACKGROUND_TEXTURE .setLocation(new ResourceLocation(Reference.PATH_ELEMENTS + "right_side_bar_panel_bg_holo.png")); sidePannel.setOpenable(false); sidePannel.setOpen(true); } @Override public void registerPages(MOBaseContainer container, TileEntityMachineStarMap starMap) { pageGalaxy = new PageGalaxy(this, 0, 0, width, height, starMap); pageGalaxy.setName("Galaxy"); AddPage(pageGalaxy, ClientProxy.holoIcons.getIcon("page_icon_galaxy"), MOStringHelper.translateToLocal("gui.tooltip.page.galaxy")).setIconColor(Reference.COLOR_MATTER); pageQuadrant = new PageQuadrant(this, 0, 0, width, height, starMap); pageQuadrant.setName("Quadrant"); AddPage(pageQuadrant, ClientProxy.holoIcons.getIcon("page_icon_quadrant"), MOStringHelper.translateToLocal("gui.tooltip.page.quadrant")).setIconColor(Reference.COLOR_MATTER); pageStar = new PageStar(this, 0, 0, width, height, starMap); pageStar.setName("Star"); AddPage(pageStar, ClientProxy.holoIcons.getIcon("page_icon_star"), MOStringHelper.translateToLocal("gui.tooltip.page.star")).setIconColor(Reference.COLOR_MATTER); planetPage = new PagePlanetMenu(this, 0, 0, width, height, (ContainerStarMap) container, starMap); planetPage.setName("Planet"); AddPage(planetPage, ClientProxy.holoIcons.getIcon("page_icon_planet"), MOStringHelper.translateToLocal("gui.tooltip.page.planet")).setIconColor(Reference.COLOR_MATTER); pagePlanetStats = new PagePlanetStats(this, 0, 0, width, height, starMap); pagePlanetStats.setName("Planet Stats"); AddPage(pagePlanetStats, ClientProxy.holoIcons.getIcon("icon_stats"), MOStringHelper.translateToLocal("gui.tooltip.page.planet_stats")) .setIconColor(Reference.COLOR_MATTER); setPage(machine.getZoomLevel()); } @Override protected void drawGuiContainerBackgroundLayer(float partialTick, int x, int y) { super.drawGuiContainerBackgroundLayer(partialTick, x, y); glPushMatrix(); glTranslated(guiLeft, guiTop, 0); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); if (machine.getActiveSpaceBody() != null) { Collection<ISpaceBodyHoloRenderer> renderers = ClientProxy.renderHandler.getStarmapRenderRegistry() .getStarmapRendererCollection(machine.getActiveSpaceBody().getClass()); if (renderers != null) { for (ISpaceBodyHoloRenderer renderer : renderers) { if (renderer.displayOnZoom(machine.getZoomLevel(), machine.getActiveSpaceBody())) { glPushMatrix(); glTranslated(xSize / 1.9, ySize - 16, 0); if (machine.getActiveSpaceBody() != null) { renderer.renderGUIInfo(GalaxyClient.getInstance().getTheGalaxy(), machine.getActiveSpaceBody(), machine, partialTick, 0.8f); } glPopMatrix(); } } } } glPopMatrix(); } public void drawScreen(int mouseX, int mouseY, float partialTick) { super.drawScreen(mouseX, mouseY, partialTick); } public void drawWorldBackground(int p_146270_1_) { glDisable(GL_TEXTURE_2D); glColor3f(0, 0, 0); RenderUtils.drawPlane(0, 0, -1000, width, height); glEnable(GL_TEXTURE_2D); glPushMatrix(); //GL11.glViewport(0, 0, mc.displayWidth, mc.displayHeight); //GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); glPushAttrib(GL_COLOR_BUFFER_BIT); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); GL11.glMatrixMode(GL11.GL_PROJECTION); glPushMatrix(); GL11.glLoadIdentity(); Project.gluPerspective(75f, (float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05f, 20); //RenderUtil.loadMatrix(camera.getTransposeProjectionMatrix()); GL11.glMatrixMode(GL11.GL_MODELVIEW); glPushMatrix(); GL11.glLoadIdentity(); //RenderUtil.loadMatrix(camera.getTransposeViewMatrix()); glRotated(15, 1, 0, 0); GL11.glTranslatef(0, -0.8f, 0); float lastRotationYaw = Minecraft.getMinecraft().renderViewEntity.rotationYaw; float lastRotationPitch = Minecraft.getMinecraft().renderViewEntity.rotationPitch; float rotation = 0; if (machine.getZoomLevel() <= 2) { rotation = mc.theWorld.getWorldTime() * 0.1f; } Minecraft.getMinecraft().renderViewEntity.rotationYaw = 180 + rotation; Minecraft.getMinecraft().renderViewEntity.prevRotationPitch = Minecraft .getMinecraft().renderViewEntity.rotationPitch = 15; //bindTexture(ClientProxy.renderHandler.getRendererOmniTool().getWeaponTexture()); //ClientProxy.renderHandler.getRendererOmniTool().getModel().renderAll(); switch (machine.getZoomLevel()) { case 0: glTranslated(0, -1.1, -4f); break; case 1: glTranslated(0, -0.6, -4f); break; case 2: Star star = machine.getStar(); float maxDistance = 0; if (star != null) { for (Planet planet : star.getPlanets()) { if (maxDistance < planet.getOrbit()) { maxDistance = planet.getOrbit(); } } } glTranslated(0, 0, -maxDistance * 3 - 1.5f); break; default: GL11.glTranslatef(0, 0.1f, -3f); break; } glRotated(rotation, 0, 1, 0); //glTranslated(0.5f,2.5f,3); ClientProxy.renderHandler.getTileEntityRendererStarMap().render(machine, -0.5f, -1.8f, -0.5f, 0); glPopMatrix(); //fontRendererObj.drawString("Test",100,100,0xffffff); GL11.glMatrixMode(GL11.GL_PROJECTION); glPopMatrix(); GL11.glMatrixMode(GL11.GL_MODELVIEW); glPopMatrix(); Minecraft.getMinecraft().renderViewEntity.rotationYaw = lastRotationYaw; Minecraft.getMinecraft().renderViewEntity.prevRotationPitch = Minecraft .getMinecraft().renderViewEntity.rotationPitch = lastRotationPitch; GL11.glPopAttrib(); } public void onPageChange(int newPage) { pageQuadrant.init(); pageStar.init(); planetPage.init(); pagePlanetStats.init(); if (newPage != machine.getZoomLevel()) { MatterOverdrive.packetPipeline.sendToServer(new PacketStarMapClientCommands(machine, newPage, machine.getGalaxyPosition(), machine.getDestination())); } } public void onPlanetChange(Planet planet) { pageStar.init(); pagePlanetStats.loadShips(); planetPage.init(); } public void onTravelEventsChange(List<TravelEvent> travelEvents) { pagePlanetStats.init(); } @Override public void initGui() { this.xSize = width; this.ySize = height; pageGalaxy.setSize(width, height); pageQuadrant.setSize(width, height); pageStar.setSize(width, height); sidePannel.setPosition(xSize - 42, 16); super.initGui(); indicator.setVisible(false); AddMainPlayerSlots(inventorySlots, this, "holo_with_BG", new Color(Reference.COLOR_HOLO.getIntR() / 3, Reference.COLOR_HOLO.getIntG() / 3, Reference.COLOR_HOLO.getIntB() / 3), 45, ySize - 104); AddHotbarPlayerSlots(inventorySlots, this, "holo_with_BG", new Color(Reference.COLOR_HOLO.getIntR() / 2, Reference.COLOR_HOLO.getIntG() / 2, Reference.COLOR_HOLO.getIntB() / 2), 45, ySize - 25); } public void onGuiClosed() { //machine.SyncCommandsToServer(); } @Override protected void updateElementInformation() { if (machine.getZoomLevel() != currentPage) { setPage(machine.getZoomLevel()); } super.updateElementInformation(); pageButtons.get(4).setVisible(machine.getPlanet() != null); pageButtons.get(3).setVisible(machine.getPlanet() != null); pageButtons.get(2).setVisible(machine.getStar() != null); pageButtons.get(1).setVisible(machine.getQuadrant() != null); } public boolean doesGuiPauseGame() { return false; } @Override public void updateScreen() { super.updateScreen(); } }