Пример #1
0
 @Override
 public void update(float delta) {
   elapsed += delta / 1000;
   i1.setRotation(elapsed * FloatMath.PI / 2);
   s1.setRotation(elapsed * FloatMath.PI / 2);
   g2.setWidth(Math.max(1f, Math.abs(100 * FloatMath.sin(elapsed))));
   inner.setOrigin(FloatMath.sin(elapsed * 2f) * 50, FloatMath.cos(elapsed * 2f) * 50);
 }
Пример #2
0
  @Override
  public Surface drawLine(float x0, float y0, float x1, float y1, float width) {
    bindFramebuffer();

    // swap the line end points if x1 is less than x0
    if (x1 < x0) {
      float temp = x0;
      x0 = x1;
      x1 = temp;
      temp = y0;
      y0 = y1;
      y1 = temp;
    }

    float dx = x1 - x0, dy = y1 - y0;
    float length = FloatMath.sqrt(dx * dx + dy * dy);
    float wx = dx * (width / 2) / length;
    float wy = dy * (width / 2) / length;

    InternalTransform l = ctx.createTransform();
    l.setRotation(FloatMath.atan2(dy, dx));
    l.setTranslation(x0 + wy, y0 - wx);
    l.preConcatenate(topTransform());

    GLShader shader = ctx.quadShader(this.shader);
    if (fillPattern != null) {
      int tex = fillPattern.ensureTexture();
      if (tex > 0) {
        shader.prepareTexture(tex, tint);
        shader.addQuad(
            l,
            0,
            0,
            length,
            width,
            0,
            0,
            length / fillPattern.width(),
            width / fillPattern.height());
      }
    } else {
      int tex = ctx.fillImage().ensureTexture();
      shader.prepareTexture(tex, Tint.combine(fillColor, tint));
      shader.addQuad(l, 0, 0, length, width, 0, 0, 1, 1);
    }
    return this;
  }