/* * 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.client.render.tileentity; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import matteroverdrive.api.renderer.ISpaceBodyHoloRenderer; import matteroverdrive.gui.GuiStarMap; import matteroverdrive.proxy.ClientProxy; import matteroverdrive.starmap.GalaxyClient; import matteroverdrive.starmap.data.SpaceBody; import matteroverdrive.tile.TileEntityMachineStarMap; import matteroverdrive.util.RenderUtils; import net.minecraft.client.Minecraft; import net.minecraft.util.Vec3; import java.util.Collection; import static org.lwjgl.opengl.GL11.*; /** * Created by Simeon on 6/13/2015. */ @SideOnly(Side.CLIENT) public class TileEntityRendererStarMap extends TileEntityRendererStation<TileEntityMachineStarMap> { @Override protected void renderHologram(TileEntityMachineStarMap starMap, double x, double y, double z, float partialTicks, double noise) { if (!(Minecraft.getMinecraft().currentScreen instanceof GuiStarMap)) { if (isUsable(starMap)) { render(starMap, x, y, z, partialTicks); } else { super.renderHologram(starMap, x, y, z, partialTicks, noise); } } } public void render(TileEntityMachineStarMap starMap, double x, double y, double z, float partialTicks) { renderHologramBase(starMap, x, y, z, partialTicks); } protected void renderHologramBase(TileEntityMachineStarMap starMap, double x, double y, double z,float partialTicks) { glPushMatrix(); glTranslated(x, y, z); glTranslated(0.5, 0.5, 0.5); glEnable(GL_BLEND); glDisable(GL_LIGHTING); RenderUtils.disableLightmap(); glBlendFunc(GL_ONE, GL_ONE); float distance = (float) Vec3.createVectorHelper(x, y, z).lengthVector(); if (starMap.getActiveSpaceBody() != null) { Collection<ISpaceBodyHoloRenderer> renderers = ClientProxy.renderHandler.getStarmapRenderRegistry().getStarmapRendererCollection(starMap.getActiveSpaceBody().getClass()); if (renderers != null) { for (ISpaceBodyHoloRenderer renderer : renderers) { if (renderer.displayOnZoom(starMap.getZoomLevel(), starMap.getActiveSpaceBody())) { SpaceBody spaceBody = starMap.getActiveSpaceBody(); if (spaceBody != null) { glTranslated(0, renderer.getHologramHeight(spaceBody), 0); glPushMatrix(); renderer.renderBody(GalaxyClient.getInstance().getTheGalaxy(), spaceBody, starMap, partialTicks, distance); glPopMatrix(); if (drawHoloLights()) { glPushMatrix(); Vec3 playerPosition = Minecraft.getMinecraft().renderViewEntity.getPosition(partialTicks); playerPosition.yCoord = 0; Vec3 mapPosition = Vec3.createVectorHelper(starMap.xCoord + 0.5, 0, starMap.zCoord + 0.5); Vec3 dir = playerPosition.subtract(mapPosition).normalize(); double angle = Math.acos(dir.dotProduct(Vec3.createVectorHelper(1, 0, 0))); if (Vec3.createVectorHelper(0, 1, 0).dotProduct(dir.crossProduct(Vec3.createVectorHelper(1, 0, 0))) < 0) { angle = Math.PI * 2 - angle; } drawHoloGuiInfo(renderer, spaceBody, starMap, (Math.PI / 2 - angle) * (180 / Math.PI), partialTicks); glPopMatrix(); } } } } } } glPopMatrix(); RenderUtils.enableLightmap(); } @Override protected boolean drawHoloLights() { return !(Minecraft.getMinecraft().currentScreen instanceof GuiStarMap); } @Override protected double getLightHeight() { return 1; } @Override protected double getLightsSize() { return 2; } public void drawHoloGuiInfo(ISpaceBodyHoloRenderer renderer,SpaceBody spaceBody,TileEntityMachineStarMap starMap,double angle,float partialTicks) { angle = Math.round(angle / 90d) * 90; glPushMatrix(); glTranslated(0, -renderer.getHologramHeight(spaceBody) + 0.3, 0); glRotated(angle, 0, 1, 0); glTranslated(1, 0, -0.8); glScaled(0.01, 0.01, 0.01); glRotated(180, 0, 0, 1); if (spaceBody != null) renderer.renderGUIInfo(GalaxyClient.getInstance().getTheGalaxy(), spaceBody,starMap, partialTicks, 0.5f); glPopMatrix(); } }