Blame onefile/iron-spring.c

Ivan Mahonin 261920
#include <helianthus.h>
Ivan Mahonin 261920
#include <math.h>
Ivan Mahonin 261920
Ivan Mahonin 261920
#define CIRCLES_COUNT   20
Ivan Mahonin 261920
#define CIRCLES_RADIUS  25
Ivan Mahonin 261920
#define RING_RADIUS     50
Ivan Mahonin 261920
#define ROTATION_SPEED 70
Ivan Mahonin 261920
#define RINGS_COUNT 3
Ivan Mahonin 261920
Ivan Mahonin 261920
Ivan Mahonin 261920
double angles[6];
Ivan Mahonin 261920
double speeds[6];
Ivan Mahonin 261920
Ivan Mahonin 261920
Ivan Mahonin 261920
void init() {
Ivan Mahonin 261920
  background(colorByHSV(0, 0, 0.2));
Ivan Mahonin 261920
}
Ivan Mahonin 261920
Ivan Mahonin 261920
void draw() {
Ivan Mahonin 261920
  for(int j = 1; j <= RINGS_COUNT; j++) {
Ivan Mahonin 261920
    saveState();
Ivan Mahonin 261920
    strokeWidth(CIRCLES_RADIUS + j*10);
Ivan Mahonin 261920
    translate(mouseX(), mouseY());
Ivan Mahonin 261920
    if (mouseDown("left")) {
Ivan Mahonin 261920
      angles[j] -= windowGetFrameTime() * (ROTATION_SPEED * (j/3.0));
Ivan Mahonin 261920
      speeds[j] = 0;
Ivan Mahonin 261920
    } else
Ivan Mahonin 261920
    if (mouseDown("right")) {
Ivan Mahonin 261920
      angles[j] += windowGetFrameTime() * (ROTATION_SPEED * (j/3.0));
Ivan Mahonin 261920
      speeds[j] = 0;
Ivan Mahonin 261920
    } else {
Ivan Mahonin 261920
      speeds[j] -= angles[j];
Ivan Mahonin 261920
      speeds[j] *= pow(0.1, windowGetFrameTime());
Ivan Mahonin 261920
      angles[j] += speeds[j]*windowGetFrameTime();
Ivan Mahonin 261920
    }
Ivan Mahonin 261920
Ivan Mahonin 261920
    rotate(windowGetSeconds() + angles[j]);
Ivan Mahonin 261920
Ivan Mahonin 261920
    for(int i = 0; i < CIRCLES_COUNT; i++) {
Ivan Mahonin 261920
      double a = 0;
Ivan Mahonin 261920
      //if (mouseDown("left"))
Ivan Mahonin 261920
        a = 360.0*i/CIRCLES_COUNT;
Ivan Mahonin 261920
      double x = 1 + 0.05*sin(windowGetSeconds()*10 + a/180*PI*13);
Ivan Mahonin 261920
      stroke(colorByHSV(a, 0.7, 1));
Ivan Mahonin 261920
      point(RING_RADIUS*j*x, 0);
Ivan Mahonin 261920
      rotate(360.0/CIRCLES_COUNT);
Ivan Mahonin 261920
    }
Ivan Mahonin 261920
    restoreState();
Ivan Mahonin 261920
  }
Ivan Mahonin 261920
}
Ivan Mahonin 261920
Ivan Mahonin 261920
int main() {
Ivan Mahonin 261920
  windowSetTitle("Iron Spring Simulator");
Ivan Mahonin 261920
  windowSetVariableFrameRate();
Ivan Mahonin 261920
  windowSetResizable(TRUE);
Ivan Mahonin 261920
  windowSetInit(&init);
Ivan Mahonin 261920
  windowSetDraw(&draw);
Ivan Mahonin 261920
  windowRun();
Ivan Mahonin 261920
  return 0;
Ivan Mahonin 261920
}