generated from tilera/1710mod
186 lines
7.2 KiB
Java
186 lines
7.2 KiB
Java
package mffs.render;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.particle.EntityFX;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.util.MathHelper;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.world.World;
|
|
import org.lwjgl.opengl.GL11;
|
|
import universalelectricity.core.vector.Vector3;
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public class FXBeam extends EntityFX {
|
|
double movX;
|
|
double movY;
|
|
double movZ;
|
|
private float length;
|
|
private float rotYaw;
|
|
private float rotPitch;
|
|
private float prevYaw;
|
|
private float prevPitch;
|
|
private Vector3 target;
|
|
private float endModifier;
|
|
private boolean reverse;
|
|
private boolean pulse;
|
|
private int rotationSpeed;
|
|
private float prevSize;
|
|
|
|
public FXBeam(final World par1World, final Vector3 position,
|
|
final Vector3 target, final float red, final float green,
|
|
final float blue, final int age) {
|
|
super(par1World, position.x, position.y, position.z, 0.0, 0.0, 0.0);
|
|
this.movX = 0.0;
|
|
this.movY = 0.0;
|
|
this.movZ = 0.0;
|
|
this.length = 0.0f;
|
|
this.rotYaw = 0.0f;
|
|
this.rotPitch = 0.0f;
|
|
this.prevYaw = 0.0f;
|
|
this.prevPitch = 0.0f;
|
|
this.target = new Vector3();
|
|
this.endModifier = 1.0f;
|
|
this.reverse = false;
|
|
this.pulse = true;
|
|
this.rotationSpeed = 20;
|
|
this.prevSize = 0.0f;
|
|
this.setRGB(red, green, blue);
|
|
this.setSize(0.02f, 0.02f);
|
|
((Entity)this).noClip = true;
|
|
((Entity)this).motionX = 0.0;
|
|
((Entity)this).motionY = 0.0;
|
|
((Entity)this).motionZ = 0.0;
|
|
this.target = target;
|
|
final float xd = (float)(((Entity)this).posX - this.target.x);
|
|
final float yd = (float)(((Entity)this).posY - this.target.y);
|
|
final float zd = (float)(((Entity)this).posZ - this.target.z);
|
|
this.length = (float)new Vector3((Entity)this).distanceTo(this.target);
|
|
final double var7 = MathHelper.sqrt_double((double)(xd * xd + zd * zd));
|
|
this.rotYaw = (float)(Math.atan2(xd, zd) * 180.0 / 3.141592653589793);
|
|
this.rotPitch = (float)(Math.atan2(yd, var7) * 180.0 / 3.141592653589793);
|
|
this.prevYaw = this.rotYaw;
|
|
this.prevPitch = this.rotPitch;
|
|
super.particleMaxAge = age;
|
|
final EntityLivingBase renderentity =
|
|
Minecraft.getMinecraft().renderViewEntity;
|
|
int visibleDistance = 50;
|
|
if (!Minecraft.getMinecraft().gameSettings.fancyGraphics) {
|
|
visibleDistance = 25;
|
|
}
|
|
if (renderentity.getDistance(((Entity)this).posX, ((Entity)this).posY,
|
|
((Entity)this).posZ) > visibleDistance) {
|
|
super.particleMaxAge = 0;
|
|
}
|
|
}
|
|
|
|
public void onUpdate() {
|
|
((Entity)this).prevPosX = ((Entity)this).posX;
|
|
((Entity)this).prevPosY = ((Entity)this).posY;
|
|
((Entity)this).prevPosZ = ((Entity)this).posZ;
|
|
this.prevYaw = this.rotYaw;
|
|
this.prevPitch = this.rotPitch;
|
|
final float xd = (float)(((Entity)this).posX - this.target.x);
|
|
final float yd = (float)(((Entity)this).posY - this.target.y);
|
|
final float zd = (float)(((Entity)this).posZ - this.target.z);
|
|
this.length = MathHelper.sqrt_float(xd * xd + yd * yd + zd * zd);
|
|
final double var7 = MathHelper.sqrt_double((double)(xd * xd + zd * zd));
|
|
this.rotYaw = (float)(Math.atan2(xd, zd) * 180.0 / 3.141592653589793);
|
|
this.rotPitch = (float)(Math.atan2(yd, var7) * 180.0 / 3.141592653589793);
|
|
if (super.particleAge++ >= super.particleMaxAge) {
|
|
this.setDead();
|
|
}
|
|
}
|
|
|
|
public void setRGB(final float r, final float g, final float b) {
|
|
super.particleRed = r;
|
|
super.particleGreen = g;
|
|
super.particleBlue = b;
|
|
}
|
|
|
|
public void renderParticle(final Tessellator tessellator, final float f,
|
|
final float f1, final float f2, final float f3,
|
|
final float f4, final float f5) {
|
|
tessellator.draw();
|
|
GL11.glPushMatrix();
|
|
final float var9 = 1.0f;
|
|
final float slide = (float)((Entity)this).worldObj.getTotalWorldTime();
|
|
final float rot = ((Entity)this).worldObj.provider.getWorldTime() %
|
|
(360 / this.rotationSpeed) * this.rotationSpeed +
|
|
this.rotationSpeed * f;
|
|
float size = 1.0f;
|
|
if (this.pulse) {
|
|
size = Math.min(super.particleAge / 4.0f, 1.0f);
|
|
size = this.prevSize + (size - this.prevSize) * f;
|
|
}
|
|
float op = 0.5f;
|
|
if (this.pulse && super.particleMaxAge - super.particleAge <= 4) {
|
|
op = 0.5f - (4 - (super.particleMaxAge - super.particleAge)) * 0.1f;
|
|
}
|
|
Minecraft.getMinecraft().renderEngine.bindTexture(
|
|
new ResourceLocation("mffs", "textures/blocks/fortron.png"));
|
|
GL11.glTexParameterf(3553, 10242, 10497.0f);
|
|
GL11.glTexParameterf(3553, 10243, 10497.0f);
|
|
GL11.glDisable(2884);
|
|
float var10 = slide + f;
|
|
if (this.reverse) {
|
|
var10 *= -1.0f;
|
|
}
|
|
final float var11 = -var10 * 0.2f - MathHelper.floor_float(-var10 * 0.1f);
|
|
GL11.glEnable(3042);
|
|
GL11.glBlendFunc(770, 1);
|
|
GL11.glDepthMask(false);
|
|
final float xx =
|
|
(float)(((Entity)this).prevPosX +
|
|
(((Entity)this).posX - ((Entity)this).prevPosX) * f -
|
|
EntityFX.interpPosX);
|
|
final float yy =
|
|
(float)(((Entity)this).prevPosY +
|
|
(((Entity)this).posY - ((Entity)this).prevPosY) * f -
|
|
EntityFX.interpPosY);
|
|
final float zz =
|
|
(float)(((Entity)this).prevPosZ +
|
|
(((Entity)this).posZ - ((Entity)this).prevPosZ) * f -
|
|
EntityFX.interpPosZ);
|
|
GL11.glTranslated((double)xx, (double)yy, (double)zz);
|
|
final float ry = this.prevYaw + (this.rotYaw - this.prevYaw) * f;
|
|
final float rp = this.prevPitch + (this.rotPitch - this.prevPitch) * f;
|
|
GL11.glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
|
|
GL11.glRotatef(180.0f + ry, 0.0f, 0.0f, -1.0f);
|
|
GL11.glRotatef(rp, 1.0f, 0.0f, 0.0f);
|
|
final double var12 = -0.15 * size;
|
|
final double var13 = 0.15 * size;
|
|
final double var44b = -0.15 * size * this.endModifier;
|
|
final double var17b = 0.15 * size * this.endModifier;
|
|
GL11.glRotatef(rot, 0.0f, 1.0f, 0.0f);
|
|
for (int t = 0; t < 3; ++t) {
|
|
final double var14 = this.length * size * var9;
|
|
final double var15 = 0.0;
|
|
final double var16 = 1.0;
|
|
final double var17 = -1.0f + var11 + t / 3.0f;
|
|
final double var18 = this.length * size * var9 + var17;
|
|
GL11.glRotatef(60.0f, 0.0f, 1.0f, 0.0f);
|
|
tessellator.startDrawingQuads();
|
|
tessellator.setBrightness(200);
|
|
tessellator.setColorRGBA_F(super.particleRed, super.particleGreen,
|
|
super.particleBlue, op);
|
|
tessellator.addVertexWithUV(var44b, var14, 0.0, var16, var18);
|
|
tessellator.addVertexWithUV(var12, 0.0, 0.0, var16, var17);
|
|
tessellator.addVertexWithUV(var13, 0.0, 0.0, var15, var17);
|
|
tessellator.addVertexWithUV(var17b, var14, 0.0, var15, var18);
|
|
tessellator.draw();
|
|
}
|
|
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
|
GL11.glDepthMask(true);
|
|
GL11.glDisable(3042);
|
|
GL11.glEnable(2884);
|
|
GL11.glPopMatrix();
|
|
tessellator.startDrawingQuads();
|
|
this.prevSize = size;
|
|
Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("textures/particle/particles.png"));
|
|
}
|
|
}
|