82 lines
1.9 KiB
Java

package com.hbm.particle.psys.engine;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
/**
* HBM: reinventing the fucking wheel for the 15th time since 2014
*
* @author hbm
*/
@SideOnly(Side.CLIENT)
public abstract class PSysFX {
public World world;
public double posX;
public double posY;
public double posZ;
public double prevPosX;
public double prevPosY;
public double prevPosZ;
public static double interpPosX;
public static double interpPosY;
public static double interpPosZ;
public AxisAlignedBB boundingBox;
public int particleAge;
public int particleMaxAge;
public boolean isExpired = false;
public boolean shouldExpireWhenUnloaded = true;
public boolean isUnloaded = false;
public PSysFX(World world, double x, double y, double z) {
this.world = world;
this.posX = x;
this.posY = y;
this.posZ = z;
}
public void updateParticle() {
this.prevPosX = posX;
this.prevPosY = posY;
this.prevPosZ = posZ;
this.isUnloaded = !world.getChunkProvider().chunkExists((int) Math.floor(posX) >> 4, (int) Math.floor(posZ) >> 4);
this.particleAge++;
if(this.particleAge >= this.particleMaxAge) {
this.expire();
}
if(this.shouldExpireWhenUnloaded && this.isUnloaded) {
this.expire();
}
}
public abstract void renderParticle();
public AxisAlignedBB getBoundingBox() {
return this.boundingBox;
}
public void setBoundingBox(AxisAlignedBB bb) {
this.boundingBox = bb;
}
protected void setPosToAABB() {
AxisAlignedBB aabb = this.getBoundingBox();
this.posX = (aabb.minX + aabb.maxX) / 2.0D;
this.posY = aabb.minY;
this.posZ = (aabb.minZ + aabb.maxZ) / 2.0D;
}
public void expire() {
this.isExpired = true;
}
public void setExpireOnUnload(boolean expire) {
this.shouldExpireWhenUnloaded = expire;
}
}