© Joshua Davis 

This Site Was Proudly Created With Wix.com

HOscillator 012

HYPE, HDrawablePool (onRequest, onRelease), HRect, HOscillator (x, alpha, width, rotation), HTimer, HText

import hype.*;
import hype.extended.behavior.HOscillator;
import hype.extended.behavior.HTimer;
import hype.extended.colorist.HColorPool;

HDrawablePool pool;
HColorPool  colors = new HColorPool(#111111, #202020, #242424, #333333, #4D4D4D, #CCCCCC);

void setup() {
 size(640,640);
 H.init(this).background(#000000);

 PFont type = createFont("DroidSerifBoldItalic.ttf", 24);

 pool = new HDrawablePool(1000);
 pool.autoAddToStage()
  .add(new HRect().rounding(5))
  .onCreate(
   new HCallback() {
    public void run(Object obj) {
     int i = pool.currentIndex();

     HDrawable d = (HDrawable) obj;
     d
      .strokeWeight(8)
      .stroke(#FFFFFF, 10)
      .strokeCap(ROUND)
      .strokeJoin(ROUND)
      .fill(colors.getColor())
      .size( (int)random(4,10) , (int)random(8,12) )
      .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(.005,.2) )
       .freq(10)
       .currentStep(i)
      )

      .obj("ao", new HOscillator()
       .target(d)
       .property(H.ALPHA)
       .range(0,255)
       .speed( random(.3,.9) )
       .freq(5)
       .currentStep(i)
      )

      .obj("wo", new HOscillator()
       .target(d)
       .property(H.WIDTH)
       .range(-d.width(),d.width())
       .speed( random(.05,.2) )
       .freq(10)
       .currentStep(i)
      )

      .obj("ro", new HOscillator()
       .target(d)
       .property(H.ROTATION)
       .range(-180,180)
       .speed( random(.005,.05) )
       .freq(10)
       .currentStep(i)
      )
     ;
    }
   }
  )

  .onRequest(
   new HCallback() {
    public void run(Object obj) {
     HDrawable d = (HDrawable) obj;
     d.scale(1).alpha(0).loc((int)random(width),(int)random(height));

     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();
    }
   }
  )

  .onRelease(
   new HCallback() {
    public void run(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();
    }
   }
  )
 ;

 new HTimer(50)
  .callback(
   new HCallback() {
    public void run(Object obj) {
     pool.request();
    }
   }
  )
 ;

 HText f1 = new HText("dust",200,type);
 f1.fill(#ECECEC).anchorAt(H.CENTER).loc(width/2,height/2);
 H.add(f1);
}

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

  if (d.y() < -40) pool.release(d);
 }

 H.drawStage();
}