package common.entity.item;

import common.entity.Entity;
import common.entity.EntityType;
import common.nbt.NBTTagCompound;
import common.world.Explosion;
import common.world.World;

public class EntityExplosion extends Entity
{
    private int progress;
    private int radius;

    public EntityExplosion(World worldIn)
    {
        super(worldIn);
        this.preventSpawning = true;
        this.setSize(0.1F, 0.1F);
//		this.setInvisible(true);
    }
    
    public EntityExplosion(World worldIn, double x, double y, double z)
    {
    	this(worldIn, x, y, z, 70);
    }

    public EntityExplosion(World worldIn, double x, double y, double z, int radius)
    {
        this(worldIn);
        this.setPosition(x, y, z);
        this.prevX = x;
        this.prevY = y;
        this.prevZ = z;
        this.radius = radius;
    }

    protected void entityInit()
    {
    }
    
    protected boolean canTriggerWalking()
    {
        return false;
    }
    
    public void onUpdate()
    {
        this.prevX = this.posX;
        this.prevY = this.posY;
        this.prevZ = this.posZ;
        this.motionX = this.motionY = this.motionZ = 0.0D;
    	if(this.progress++ >= this.radius) {
    		this.setDead();
    	}
    	else if(!this.worldObj.client) {
            this.explode(this.progress - 1);
        }
    }

    private void explode(double min)
    {
		Explosion.doExplosionAlgo3(this.worldObj, this.posX, this.posY + (double)(this.height / 2.0F), this.posZ, this.rand, min + 6.0d, min);
    }
    
    protected void writeEntityToNBT(NBTTagCompound tagCompound)
    {
        tagCompound.setInteger("Progress", this.progress);
        tagCompound.setInteger("Radius", this.radius);
    }
    
    protected void readEntityFromNBT(NBTTagCompound tagCompund)
    {
        this.progress = tagCompund.getInteger("Progress");
        this.radius = tagCompund.getInteger("Radius");
    }

    public float getEyeHeight()
    {
        return 0.0F;
    }
    
    public int getTrackingRange() {
    	return 0;
    }
    
    public int getUpdateFrequency() {
    	return 0;
    }
    
    public boolean isSendingVeloUpdates() {
    	return false;
    }
    
    public EntityType getType() {
    	return EntityType.EXPLOSIVE;
    }
}
