/*
* 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.parts;
import matteroverdrive.api.inventory.IBionicPart;
import matteroverdrive.api.renderer.IBionicPartRenderer;
import matteroverdrive.client.render.entity.EntityRendererRougeAndroid;
import matteroverdrive.entity.player.AndroidPlayer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.client.renderer.entity.RendererLivingEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
/**
* Created by Simeon on 9/13/2015.
*/
public class RougeAndroidPartsRender implements IBionicPartRenderer
{
private final RougeAndroidPartsRenderPlayer moRenderPlayer = new RougeAndroidPartsRenderPlayer();
@Override
public void renderPart(ItemStack partStack, AndroidPlayer androidPlayer, RenderPlayer renderPlayer,float ticks)
{
moRenderPlayer.setRenderManager(RenderManager.instance);
Minecraft.getMinecraft().getTextureManager().bindTexture(EntityRendererRougeAndroid.texture);
EntityPlayer entityPlayer = androidPlayer.getPlayer();
if (entityPlayer.ticksExisted == 0)
{
entityPlayer.lastTickPosX = entityPlayer.posX;
entityPlayer.lastTickPosY = entityPlayer.posY;
entityPlayer.lastTickPosZ = entityPlayer.posZ;
}
double d0 = entityPlayer.lastTickPosX + (entityPlayer.posX - entityPlayer.lastTickPosX) * (double)ticks;
double d1 = entityPlayer.lastTickPosY + (entityPlayer.posY - entityPlayer.lastTickPosY) * (double)ticks;
double d2 = entityPlayer.lastTickPosZ + (entityPlayer.posZ - entityPlayer.lastTickPosZ) * (double)ticks;
float f1 = entityPlayer.prevRotationYaw + (entityPlayer.rotationYaw - entityPlayer.prevRotationYaw) * ticks;
IBionicPart bionicPart = (IBionicPart)partStack.getItem();
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
moRenderPlayer.setTexture(bionicPart.getTexture(androidPlayer,partStack));
moRenderPlayer.setModelBipedMain(bionicPart.getModel(androidPlayer,partStack));
if (moRenderPlayer.modelBipedMain != null)
{
moRenderPlayer.doRender(androidPlayer,d0 - RenderManager.renderPosX,d1 - RenderManager.renderPosY,d2 - RenderManager.renderPosZ,f1,ticks);
}
}
@Override
public void affectPlayerRenderer(ItemStack partStack, AndroidPlayer androidPlayer, RenderPlayer renderPlayer, float ticks)
{
}
public class RougeAndroidPartsRenderPlayer extends RendererLivingEntity
{
private ResourceLocation textureLocation;
public ModelBiped modelBipedMain;
public RougeAndroidPartsRenderPlayer()
{
super(new ModelBiped(0.0F), 0.5F);
}
public void doRender(AndroidPlayer androidPlayer, double x, double y, double z, float rotationYaw, float ticks)
{
GL11.glColor3f(1.0F, 1.0F, 1.0F);
ItemStack itemstack = androidPlayer.getPlayer().inventory.getCurrentItem();
this.modelBipedMain.heldItemRight = itemstack != null ? 1 : 0;
if (itemstack != null && androidPlayer.getPlayer().getItemInUseCount() > 0)
{
EnumAction enumaction = itemstack.getItemUseAction();
if (enumaction == EnumAction.block)
{
this.modelBipedMain.heldItemRight = 3;
}
else if (enumaction == EnumAction.bow)
{
this.modelBipedMain.aimedBow = true;
}
}
this.modelBipedMain.isSneak = androidPlayer.getPlayer().isSneaking();
double d3 = y - (double)androidPlayer.getPlayer().yOffset;
if (androidPlayer.getPlayer().isSneaking() && !(androidPlayer.getPlayer() instanceof EntityPlayerSP))
{
d3 -= 0.125D;
}
super.doRender(androidPlayer.getPlayer(), x, d3, z, rotationYaw, ticks);
this.modelBipedMain.aimedBow = false;
this.modelBipedMain.isSneak = false;
this.modelBipedMain.heldItemRight = 0;
}
protected ResourceLocation getEntityTexture(Entity p_110775_1_)
{
if (textureLocation != null)
{
return textureLocation;
}
return EntityRendererRougeAndroid.texture;
}
@Override
protected void preRenderCallback(EntityLivingBase p_77041_1_, float p_77041_2_)
{
float f1 = 0.9375F;
GL11.glScalef(f1, f1, f1);
}
public void setTexture(ResourceLocation location)
{
this.textureLocation = location;
}
public void setModelBipedMain(ModelBiped modelBipedMain)
{
this.modelBipedMain = modelBipedMain;
this.mainModel = modelBipedMain;
}
}
}