public EntityRailgunFX(EntityPlayer player) { super(player); new Motion3D(player, true).applyToEntity(this); this.life = 50; this.blendInTime = 150; this.widthShrinkTime = 800; this.widthWiggleRadius = 0.3; this.maxWiggleSpeed = 0.8; this.blendOutTime = 1000; this.length = 45.0; ignoreFrustumCheck = true; // Build the arc list { double cur = 1.0; double len = this.length; while (cur <= len) { float theta = RandUtils.rangef(0, MathUtils.PI_F * 2); double r = RandUtils.ranged(0.1, 0.25); Vec3 vec = VecUtils.vec(cur, r * MathHelper.sin(theta), r * MathHelper.cos(theta)); vec.rotateAroundZ(rotationPitch * MathUtils.PI_F / 180); vec.rotateAroundY((270 - rotationYaw) * MathUtils.PI_F / 180); arcHandler.generateAt(vec); cur += RandUtils.ranged(1, 2); } } }
@SubscribeEvent public void entityHurtEvent(LivingHurtEvent event) { if (!EtFuturum.enableDmgIndicator) return; int amount = MathHelper.floor_float(Math.min(event.entityLiving.getHealth(), event.ammount) / 2F); if (amount <= 0) return; // If the attacker is a player spawn the hearts aligned and facing it if (event.source instanceof EntityDamageSource) { EntityDamageSource src = (EntityDamageSource) event.source; Entity attacker = src.getSourceOfDamage(); if (attacker instanceof EntityPlayer && !(attacker instanceof FakePlayer)) { EntityPlayer player = (EntityPlayer) attacker; Vec3 look = player.getLookVec(); look.rotateAroundY((float) Math.PI / 2); for (int i = 0; i < amount; i++) { double x = event.entityLiving.posX - amount * 0.35 * look.xCoord / 2 + i * 0.35 * look.xCoord; double y = event.entityLiving.posY + 1.5 + event.entityLiving.worldObj.rand.nextGaussian() * 0.05; double z = event.entityLiving.posZ - amount * 0.35 * look.zCoord / 2 + i * 0.35 * look.zCoord; EtFuturum.networkWrapper.sendToAllAround( new BlackHeartParticlesMessage(x, y, z), new TargetPoint(player.worldObj.provider.dimensionId, x, y, z, 64)); } } } }
public static void rotateAABBAroundY(AxisAlignedBB aabb, double xoff, double zoff, float ang) { double y0 = aabb.minY; double y1 = aabb.maxY; vec00.xCoord = aabb.minX - xoff; vec00.zCoord = aabb.minZ - zoff; vec01.xCoord = aabb.minX - xoff; vec01.zCoord = aabb.maxZ - zoff; vec10.xCoord = aabb.maxX - xoff; vec10.zCoord = aabb.minZ - zoff; vec11.xCoord = aabb.maxX - xoff; vec11.zCoord = aabb.maxZ - zoff; vec00.rotateAroundY(ang); vec01.rotateAroundY(ang); vec10.rotateAroundY(ang); vec11.rotateAroundY(ang); aabb.setBounds(minX(), y0, minZ(), maxX(), y1, maxZ()).offset(xoff, 0.0D, zoff); }
@Override public void doRender(Entity ent, double x, double y, double z, float a, float b) { IRay ray = (IRay) ent; GL11.glPushMatrix(); double length = ray.getLength(); double fix = ray.getStartFix(); Vec3 vo; if (ray.needsViewOptimize()) vo = ViewOptimize.getFixVector(ray); else vo = vec(0, 0, 0); // Rotate fix vector to world coordinate vo.rotateAroundY(MathUtils.toRadians(270 - ent.rotationYaw)); Vec3 start = vec(0, 0, 0), end = add(start, multiply(new Motion3D(ent, true).getMotionVec(), length)); start = add(start, vo); x += start.xCoord; y += start.yCoord; z += start.zCoord; Vec3 delta = subtract(end, start); double dxzsq = delta.xCoord * delta.xCoord + delta.zCoord * delta.zCoord; double npitch = MathUtils.toAngle(Math.atan2(delta.yCoord, Math.sqrt(dxzsq))); double nyaw = MathUtils.toAngle(Math.atan2(delta.xCoord, delta.zCoord)); GL11.glTranslated(x, y, z); GL11.glRotated(-90 + nyaw, 0, 1, 0); GL11.glRotated(npitch, 0, 0, 1); GL11.glTranslated(fix, 0, 0); draw(ent, ray.getLength() - fix); GL11.glPopMatrix(); }
static { tabletModel = new GroupObject("tablet", GL11.GL_TRIANGLES); float angle = (float) Math.toRadians(51.43D); Vec3 vec = Vec3.createVectorHelper(0d, 0.2d, 0.5d); Vec3 vec2 = Vec3.createVectorHelper(0d, 0.2d, 0.5d); vec2.rotateAroundY(angle); tabletModel.faces.add( createFace( 0f, 0.6255f, 0f, (float) vec.xCoord, 0.6255f, (float) vec.zCoord, (float) vec2.xCoord, 0.6255f, (float) vec2.zCoord, 0.5f, 0.5f, (0.5f + (float) vec.xCoord), 0.5f + (float) vec.zCoord, (0.5f + (float) vec2.xCoord), 0.5f + (float) vec2.zCoord)); tabletModel.faces.add( createFace( 0f, 0.688f, 0f, (float) vec.xCoord, 0.688f, (float) vec.zCoord, (float) vec2.xCoord, 0.688f, (float) vec2.zCoord, 0.5f, 0.5f, (0.5f + (float) vec.xCoord), 0.5f + (float) vec.zCoord, (0.5f + (float) vec2.xCoord), 0.5f + (float) vec2.zCoord)); tabletModel.faces.add( createFace( (float) vec.xCoord, 0.6255f, (float) vec.zCoord, (float) vec.xCoord, 0.688f, (float) vec.zCoord, (float) vec2.xCoord, 0.688f, (float) vec2.zCoord, 0f, 0f, 0f, 0.0625f, 0.5f, 0.0625f)); tabletModel.faces.add( createFace( (float) vec.xCoord, 0.6255f, (float) vec.zCoord, (float) vec2.xCoord, 0.688f, (float) vec2.zCoord, (float) vec2.xCoord, 0.6255f, (float) vec2.zCoord, 0f, 0f, 0.5f, 0.0625f, 0.5f, 0f)); for (int i = 0; i < 6; i++) { vec.rotateAroundY(angle); vec2.rotateAroundY(angle); // texOffset += 0.0625f; tabletModel.faces.add( createFace( 0f, 0.6255f, 0f, (float) vec.xCoord, 0.6255f, (float) vec.zCoord, (float) vec2.xCoord, 0.6255f, (float) vec2.zCoord, 0.5f, 0.5f, (0.5f + (float) vec.xCoord), 0.5f + (float) vec.zCoord, (0.5f + (float) vec2.xCoord), 0.5f + (float) vec2.zCoord)); tabletModel.faces.add( createFace( 0f, 0.688f, 0f, (float) vec.xCoord, 0.688f, (float) vec.zCoord, (float) vec2.xCoord, 0.688f, (float) vec2.zCoord, 0.5f, 0.5f, (0.5f + (float) vec.xCoord), 0.5f + (float) vec.zCoord, (0.5f + (float) vec2.xCoord), 0.5f + (float) vec2.zCoord)); tabletModel.faces.add( createFace( (float) vec.xCoord, 0.6255f, (float) vec.zCoord, (float) vec.xCoord, 0.688f, (float) vec.zCoord, (float) vec2.xCoord, 0.688f, (float) vec2.zCoord, 0f, 0f, 0f, 0.0625f, 0.5f, 0.0625f)); tabletModel.faces.add( createFace( (float) vec.xCoord, 0.6255f, (float) vec.zCoord, (float) vec2.xCoord, 0.688f, (float) vec2.zCoord, (float) vec2.xCoord, 0.6255f, (float) vec2.zCoord, 0f, 0f, 0.5f, 0.0625f, 0.5f, 0f)); } }