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);
      }
    }
  }
示例#2
0
  @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));
        }
      }
    }
  }
示例#3
0
 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();
  }
示例#5
0
 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));
   }
 }