Using lambda form with hype processing

Here is a more complicated example:-

import hype.H;
import hype.HCanvas;
import hype.HDrawable;
import hype.HDrawablePool;
import hype.HRect;
import hype.extended.behavior.HOscillator;
import hype.extended.behavior.HTimer;
import hype.extended.colorist.HPixelColorist;

HDrawablePool pool;
HPixelColorist colors;
HCanvas canvas;

void setup() {
  H.init(this);
  H.background(0xff000000);
  H.use3D(true);
  colors = new HPixelColorist("gradient.jpg");
  canvas = new HCanvas(P3D).autoClear(true);
  H.add(canvas);
  pool = new HDrawablePool(1000);
  pool.autoParent(canvas)
    .add(new HRect().rounding(10))
    .onCreate((Object obj) -> {
    int i = pool.currentIndex();
    HDrawable d = (HDrawable) obj;
    d.noStroke()
      .size((int) random(40, 80), (int) random(60, 80))
      .loc((int) random(width), (int) random(height))
      .anchorAt(H.CENTER)
      .obj("xo", new HOscillator()
      .target(d)
      .property(H.X)
      .relativeVal(d.x())
      .range(-(int) random(5, 10), (int) random(5, 10))
      .speed(random(.005f, .2f))
      .freq(10)
      .currentStep(i)
      )
      .obj("ao", new HOscillator()
      .target(d)
      .property(H.ALPHA)
      .range(50, 255)
      .speed(random(.3f, .9f))
      .freq(5)
      .currentStep(i)
      )
      .obj("wo", new HOscillator()
      .target(d)
      .property(H.WIDTH)
      .range(-d.width(), d.width())
      .speed(random(.05f, .2f))
      .freq(10)
      .currentStep(i)
      )
      .obj("ro", new HOscillator()
      .target(d)
      .property(H.ROTATION)
      .range(-180, 180)
      .speed(random(.005f, .05f))
      .freq(10)
      .currentStep(i)
      )
      .obj("zo", new HOscillator()
      .target(d)
      .property(H.Z)
      .range(-400, 400)
      .speed(random(.005f, .01f))
      .freq(15)
      .currentStep(i * 5)
      );
  }
  )
  .onRequest((Object obj) -> {
    HDrawable d = (HDrawable) obj;
    d.scale(1).alpha(0).loc((int) random(width), (int) random(height), -(int) random(200));

    HOscillator xo = (HOscillator) d.obj("xo");
    xo.register();
    HOscillator ao = (HOscillator) d.obj("ao");
    ao.register();
    HOscillator wo = (HOscillator) d.obj("wo");
    wo.register();
    HOscillator ro = (HOscillator) d.obj("ro");
    ro.register();
    HOscillator zo = (HOscillator) d.obj("zo");
    zo.register();
  }
  )
  .onRelease((Object obj) -> {
    HDrawable d = (HDrawable) obj;

    HOscillator xo = (HOscillator) d.obj("xo");
    xo.unregister();
    HOscillator ao = (HOscillator) d.obj("ao");
    ao.unregister();
    HOscillator wo = (HOscillator) d.obj("wo");
    wo.unregister();
    HOscillator ro = (HOscillator) d.obj("ro");
    ro.unregister();
    HOscillator zo = (HOscillator) d.obj("zo");
    zo.unregister();
  }
  );
  new HTimer(50)
    .callback((Object obj) -> {
    pool.request();
  }
  );
}

void draw() {
  for (HDrawable d : pool) {
    d.loc(d.x(), d.y() - random(0.25f, 1), d.z());

    d.noStroke();
    d.fill(colors.getColor(d.x(), d.y()));

    if (d.z() > -10 && d.z() < 10) {
      d.fill(0xffFFFFCC); // if the z axis hits this range, change fill to light yellow
    }
    if (d.y() < -40) {
      pool.release(d);
    }
  }
  H.drawStage();
}

void settings() {
  size(640, 640, P3D);
}

Here’s the write up on my JRubyArt blog

1 Like