package drzhark.mocreatures.client.model;



import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.util.MathHelper;

import org.lwjgl.opengl.GL11;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import drzhark.mocreatures.entity.passive.MoCEntityFly;

@SideOnly(Side.CLIENT)
public class MoCModelFly extends ModelBase {

    ModelRenderer FrontLegs;
    ModelRenderer RearLegs;
    ModelRenderer MidLegs;
    ModelRenderer FoldedWings;
    ModelRenderer Head;
    ModelRenderer Tail;
    ModelRenderer Abdomen;
    ModelRenderer RightWing;
    ModelRenderer Thorax;
    ModelRenderer LeftWing;

    public MoCModelFly()
    {
        textureWidth = 32;
        textureHeight = 32;

        Head = new ModelRenderer(this, 0, 4);
        Head.addBox(-1F, 0F, -1F, 2, 1, 2);
        Head.setRotationPoint(0F, 21.5F, -2F);
        setRotation(Head, -2.171231F, 0F, 0F);

        Thorax = new ModelRenderer(this, 0, 0);
        Thorax.addBox(-1F, 0F, -1F, 2, 2, 2);
        Thorax.setRotationPoint(0F, 20.5F, -1F);
        setRotation(Thorax, 0F, 0F, 0F);

        Abdomen = new ModelRenderer(this, 8, 0);
        Abdomen.addBox(-1F, 0F, -1F, 2, 2, 2);
        Abdomen.setRotationPoint(0F, 21.5F, 0F);
        setRotation(Abdomen, 1.427659F, 0F, 0F);

        Tail = new ModelRenderer(this, 10, 2);
        Tail.addBox(-1F, 0F, -1F, 1, 1, 1);
        Tail.setRotationPoint(0.5F, 21.2F, 1.5F);
        setRotation(Tail, 1.427659F, 0F, 0F);

        FrontLegs = new ModelRenderer(this, 0, 7);
        FrontLegs.addBox(-1F, 0F, 0F, 2, 2, 0);
        FrontLegs.setRotationPoint(0F, 22.5F, -1.8F);
        setRotation(FrontLegs, 0.1487144F, 0F, 0F);

        RearLegs = new ModelRenderer(this, 0, 11);
        RearLegs.addBox(-1F, 0F, 0F, 2, 2, 0);
        RearLegs.setRotationPoint(0F, 22.5F, -0.4F);
        setRotation(RearLegs, 1.070744F, 0F, 0F);

        MidLegs = new ModelRenderer(this, 0, 9);
        MidLegs.addBox(-1F, 0F, 0F, 2, 2, 0);
        MidLegs.setRotationPoint(0F, 22.5F, -1.2F);
        setRotation(MidLegs, 0.5948578F, 0F, 0F);

        /*RightWing = new ModelRenderer(this, 10, 8);
        RightWing.addBox(-4F, -2F, 0F, 3, 4, 0);
        RightWing.setRotationPoint(0F, 14.5F, -1F);
        
        LeftWing = new ModelRenderer(this, 4, 8);
        LeftWing.addBox(1F, -2F, 0F, 3, 4, 0);
        LeftWing.setRotationPoint(0F, 14.5F, -1F);*/

        LeftWing = new ModelRenderer(this, 4, 4);
        LeftWing.addBox(-1F, 0F, 0.5F, 2, 0, 4);
        LeftWing.setRotationPoint(0F, 20.4F, -1F);
        setRotation(LeftWing, 0F, 1.047198F, 0F);

        RightWing = new ModelRenderer(this, 4, 4);
        RightWing.addBox(-1F, 0F, 0.5F, 2, 0, 4);
        RightWing.setRotationPoint(0F, 20.4F, -1F);
        setRotation(RightWing, 0F, -1.047198F, 0F);

        FoldedWings = new ModelRenderer(this, 4, 4);
        FoldedWings.addBox(-1F, 0F, 0F, 2, 0, 4);
        FoldedWings.setRotationPoint(0F, 20.5F, -2F);
        setRotation(FoldedWings, 0.0872665F, 0F, 0F);

    }

    @Override
    public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
    {
        super.render(entity, f, f1, f2, f3, f4, f5);
        MoCEntityFly fly = (MoCEntityFly) entity;
        boolean isFlying = (fly.getIsFlying() || fly.isOnAir());
        //boolean onGround = fly.onGround;
        setRotationAngles(f, f1, f2, f3, f4, f5, !isFlying);

        FrontLegs.render(f5);
        RearLegs.render(f5);
        MidLegs.render(f5);
        Head.render(f5);
        Tail.render(f5);
        Abdomen.render(f5);
        Thorax.render(f5);

        if (!isFlying)
        {
            FoldedWings.render(f5);
        }
        else
        {
            GL11.glPushMatrix();
            GL11.glEnable(3042 /*GL_BLEND*/);
            float transparency = 0.6F;
            GL11.glBlendFunc(770, 771);
            GL11.glColor4f(0.8F, 0.8F, 0.8F, transparency);
            LeftWing.render(f5);
            RightWing.render(f5);
            GL11.glDisable(3042/*GL_BLEND*/);
            GL11.glPopMatrix();
        }
    }

    private void setRotation(ModelRenderer model, float x, float y, float z)
    {
        model.rotateAngleX = x;
        model.rotateAngleY = y;
        model.rotateAngleZ = z;
    }

    /*public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5)
    {
      super.setRotationAngles(f, f1, f2, f3, f4, f5);
      
      float WingRot = MathHelper.cos((f2 * 3.0F)) * 0.7F;
      RightWing.rotateAngleZ = WingRot;
    LeftWing.rotateAngleZ = -WingRot;
    
    float legMov = (f1*1.5F);
      FrontLegs.rotateAngleX = 0.1487144F + legMov;
      MidLegs.rotateAngleX = 0.5948578F + legMov;
      RearLegs.rotateAngleX = 1.070744F + legMov;
    }*/

    public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, boolean onGround)
    {
        //super.setRotationAngles(f, f1, f2, f3, f4, f5);
        float WingRot = MathHelper.cos((f2 * 3.0F)) * 0.7F;
        RightWing.rotateAngleZ = WingRot;
        LeftWing.rotateAngleZ = -WingRot;
        float legMov = 0F;
        float legMovB = 0F;

        if (!onGround)
        {
            legMov = (f1 * 1.5F);
            legMovB = legMov;
        }
        else
        {
            legMov = MathHelper.cos((f * 1.5F) + 3.141593F) * 2.0F * f1;
            legMovB = MathHelper.cos(f * 1.5F) * 2.0F * f1;
        }

        FrontLegs.rotateAngleX = 0.1487144F + legMov;
        MidLegs.rotateAngleX = 0.5948578F + legMovB;
        RearLegs.rotateAngleX = 1.070744F + legMov;
    }

}