/*
* 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.starmap;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import matteroverdrive.Reference;
import matteroverdrive.client.data.Color;
import matteroverdrive.proxy.ClientProxy;
import matteroverdrive.starmap.GalaxyClient;
import matteroverdrive.starmap.data.*;
import matteroverdrive.tile.TileEntityMachineStarMap;
import matteroverdrive.util.MOStringHelper;
import matteroverdrive.util.RenderUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.util.Vec3;
import static org.lwjgl.opengl.GL11.*;
/**
* Created by Simeon on 6/17/2015.
*/
@SideOnly(Side.CLIENT)
public class StarMapRenderGalaxy extends StarMapRendererStars
{
@Override
public void renderBody(Galaxy galaxy, SpaceBody spaceBody, TileEntityMachineStarMap starMap, float partialTicks,float viewerDistance)
{
double distanceMultiply = 2;
glDepthMask(false);
glLineWidth(1);
for (Quadrant quadrant : galaxy.getQuadrants())
{
renderStars(quadrant, starMap,distanceMultiply,2);
}
glDisable(GL_TEXTURE_2D);
for (int i = 0;i < galaxy.getTravelEvents().size();i++)
{
TravelEvent travelEvent = galaxy.getTravelEvents().get(i);
if (travelEvent.isValid(GalaxyClient.getInstance().getTheGalaxy()))
{
Vec3 from = GalaxyClient.getInstance().getTheGalaxy().getPlanet(travelEvent.getFrom()).getStar().getPosition(2);
Vec3 to = GalaxyClient.getInstance().getTheGalaxy().getPlanet(travelEvent.getTo()).getStar().getPosition(2);
Vec3 dir = from.subtract(to);
double percent = travelEvent.getPercent(starMap.getWorldObj());
RenderUtils.applyColorWithMultipy(Reference.COLOR_HOLO, 0.5f);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glPushMatrix();
glTranslated(from.xCoord + dir.xCoord * percent, from.yCoord + dir.yCoord * percent, from.zCoord + dir.zCoord * percent);
RenderUtils.rotateTowards(Vec3.createVectorHelper(-1, 0, 0.0), dir.normalize(), Vec3.createVectorHelper(0, 1, 0));
RenderUtils.drawShip(0, 0, 0, 0.02);
glPopMatrix();
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
RenderUtils.applyColorWithMultipy(Reference.COLOR_HOLO_PURPLE, 0.5f);
glBegin(GL_LINE_STRIP);
glVertex3d(from.xCoord, from.yCoord, from.zCoord);
glVertex3d(to.xCoord, to.yCoord, to.zCoord);
glEnd();
}
}
glEnable(GL_TEXTURE_2D);
}
@Override
public void renderGUIInfo(Galaxy galaxy, SpaceBody spaceBody,TileEntityMachineStarMap starMap, float partialTicks, float opacity)
{
glEnable(GL_ALPHA_TEST);
int ownedSystemCount = galaxy.getOwnedSystemCount(Minecraft.getMinecraft().thePlayer);
int enemySystemCount = galaxy.getEnemySystemCount(Minecraft.getMinecraft().thePlayer);
int freeSystemCount = galaxy.getStarCount() - ownedSystemCount - enemySystemCount;
Color color = Reference.COLOR_HOLO_GREEN;
RenderUtils.applyColorWithMultipy(color, opacity);
ClientProxy.holoIcons.renderIcon("page_icon_star", 0, -30);
RenderUtils.drawString(String.format("x%s", ownedSystemCount), 24, -23, color, opacity);
color = Reference.COLOR_HOLO_RED;
RenderUtils.applyColorWithMultipy(color, opacity);
ClientProxy.holoIcons.renderIcon("page_icon_star", 64, -30);
RenderUtils.drawString(String.format("x%s", enemySystemCount), 88, -23, color, opacity);
color = Reference.COLOR_HOLO;
RenderUtils.applyColorWithMultipy(color, opacity);
ClientProxy.holoIcons.renderIcon("page_icon_star", 128, -30);
RenderUtils.drawString(String.format("x%s", freeSystemCount), 152, -23, color, opacity);
for (int i = 0; i < galaxy.getTravelEvents().size(); i++)
{
TravelEvent travelEvent = galaxy.getTravelEvents().get(i);
if (travelEvent.isValid(GalaxyClient.getInstance().getTheGalaxy())) {
Planet from = GalaxyClient.getInstance().getTheGalaxy().getPlanet(travelEvent.getFrom());
Planet to = GalaxyClient.getInstance().getTheGalaxy().getPlanet(travelEvent.getTo());
RenderUtils.drawString(String.format("%s -> %s : %s", from.getName(), to.getName(), MOStringHelper.formatRemainingTime(galaxy.getTravelEvents().get(i).getTimeRemainning(starMap.getWorldObj()) / 20)), 0, -48 - i * 10, Reference.COLOR_HOLO, opacity);
}
}
glDisable(GL_ALPHA_TEST);
}
@Override
public boolean displayOnZoom(int zoom, SpaceBody spaceBody) {
return true;
}
@Override
public double getHologramHeight(SpaceBody spaceBody) {
return 2.5;
}
}