package net.minecraft.entity.ai;

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.MathHelper;

public class EntityLookHelper
{
	private EntityLiving entity;
	private float deltaLookYaw;
	private float deltaLookPitch;
	private boolean isLooking;
	private double posX;
	private double posY;
	private double posZ;
	private static final String __OBFID = "CL_00001572";

	public EntityLookHelper(EntityLiving par1EntityLiving)
	{
		this.entity = par1EntityLiving;
	}

	public void setLookPositionWithEntity(Entity par1Entity, float par2, float par3)
	{
		this.posX = par1Entity.posX;

		if (par1Entity instanceof EntityLivingBase)
		{
			this.posY = par1Entity.posY + (double)par1Entity.getEyeHeight();
		}
		else
		{
			this.posY = (par1Entity.boundingBox.minY + par1Entity.boundingBox.maxY) / 2.0D;
		}

		this.posZ = par1Entity.posZ;
		this.deltaLookYaw = par2;
		this.deltaLookPitch = par3;
		this.isLooking = true;
	}

	public void setLookPosition(double par1, double par3, double par5, float par7, float par8)
	{
		this.posX = par1;
		this.posY = par3;
		this.posZ = par5;
		this.deltaLookYaw = par7;
		this.deltaLookPitch = par8;
		this.isLooking = true;
	}

	public void onUpdateLook()
	{
		this.entity.rotationPitch = 0.0F;

		if (this.isLooking)
		{
			this.isLooking = false;
			double d0 = this.posX - this.entity.posX;
			double d1 = this.posY - (this.entity.posY + (double)this.entity.getEyeHeight());
			double d2 = this.posZ - this.entity.posZ;
			double d3 = (double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);
			float f = (float)(Math.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F;
			float f1 = (float)(-(Math.atan2(d1, d3) * 180.0D / Math.PI));
			this.entity.rotationPitch = this.updateRotation(this.entity.rotationPitch, f1, this.deltaLookPitch);
			this.entity.rotationYawHead = this.updateRotation(this.entity.rotationYawHead, f, this.deltaLookYaw);
		}
		else
		{
			this.entity.rotationYawHead = this.updateRotation(this.entity.rotationYawHead, this.entity.renderYawOffset, 10.0F);
		}

		float f2 = MathHelper.wrapAngleTo180_float(this.entity.rotationYawHead - this.entity.renderYawOffset);

		if (!this.entity.getNavigator().noPath())
		{
			if (f2 < -75.0F)
			{
				this.entity.rotationYawHead = this.entity.renderYawOffset - 75.0F;
			}

			if (f2 > 75.0F)
			{
				this.entity.rotationYawHead = this.entity.renderYawOffset + 75.0F;
			}
		}
	}

	private float updateRotation(float par1, float par2, float par3)
	{
		float f3 = MathHelper.wrapAngleTo180_float(par2 - par1);

		if (f3 > par3)
		{
			f3 = par3;
		}

		if (f3 < -par3)
		{
			f3 = -par3;
		}

		return par1 + f3;
	}
}