scene.org File Archive

File download

<root>­/­parties­/­2024­/­sessions24­/­code_graphics/-by-fallenangelrk.txt

File size:
3 556 bytes (3.47K)
File date:
2024-11-19 12:14:03
Download count:
all-time: 10

Preview

// 光のエフェクト
let Lights = [];
let maked = 0, update = 0;
let stLocX, stLocY, texAlpha = 0;
let textFlag = false;
let nameFont;

// 回転パターンの変数
let theta = 0.0, S = 1.0;
let reverse = false;

function setup() {
  createCanvas(1920, 1080);
  frameRate(60);
  strokeWeight(3);
  colorMode(HSB, 359, 99, 99, 99);

  // create a first light
  Lights[0] = new Light(width - 20, height / 2, width - 20, 347, 83, 99, 99, 0);

  // create font
  nameFont = "HGSSoeiKakugothicUB";
  textAlign(CENTER, CENTER);
}

function draw() {
  background(0);

  // 光のエフェクトを描画
  for (let i = 0; i <= maked; i++) {
    if (Lights[i]) Lights[i].exe();
  }

  // 新しい光の作成
	drawingContext.filter = 'blur(24px)';
  if (frameCount % int(random(15, 25)) === 0) {
    Create();
  }
	drawingContext.filter = 'none';

  // 回転パターンを上に重ねる
  push();
  translate(width / 2, height / 2);
  scale(S);
  if (mouseX < width / 2) {
    fill(255, 0, 0);
  } else {
    fill(0, 0, 255);
  }

  for (let n = 1; n < 4; n++) {
		let col = color(this.hue, this.satu, this.brig, this.alpha);
    rotate(radians(theta));
		ellipse((150 * n) - 25, -25, 50, 50);
		noFill();
		arc(0, 0, 150 * n, 150 * n, 0, theta);
		fill(col);
    if (n != 0) {
      ellipse((-150 * n) - 25, -25, 50, 50);
			noFill();
			arc(0, 0, 300 * n, 300 * n, 0, theta);
			fill(col);
    }
  }
  pop();

  // 回転方向の変更
  if (theta > 180) {
    theta = 0.0;
    reverse = true;
  } else if (theta < -180) {
    theta = 0.0;
    reverse = false;
  }

  // 回転角度の増減
  if (!reverse) {
    theta += 3;
  } else {
    theta -= 3;
  }
	
	// テキスト表示
  indication();
}

function Create() {
  maked++;
  if (maked >= 10) maked = 9;
  update++;
  if (update >= 10) update = 0;

  stLocX = width - random(50, 200);
  stLocY = height / 2 - random(-100, 100);
  Lights[update] = new Light(stLocX, stLocY, stLocX, random(320, 359), random(0, 99), 99, 99, update);
}

function indication() {
  if (frameCount % 300 === 0) {
    textFlag = !textFlag;
    if (!textFlag) texAlpha = 0;
  }

  if (textFlag) {
    texAlpha = min(texAlpha + 1, 99);
    fill(0, 0, 99, texAlpha);
    textFont(nameFont, 72);
    text("”SESSIONS ”", width / 2, height / 2 + random(-5, 5));
  } else {
    texAlpha = 0;
  }
}

class Light {
  constructor(x, y, start_x, hue, satu, brig, alpha, update) {
    this.location = createVector(x, y);
    this.velocity = createVector(-30, 0);
    this.start_x = start_x;
    this.radi = 10;
    this.hue = hue;
    this.satu = satu;
    this.brig = brig;
    this.alpha = alpha;
    this.update = update;
  }

  exe() {
    this.display();
    this.slide();
    this.changeAlpha();
  }

  display() {
    colorMode(HSB, 359, 99, 99, 99);
    let col = color(this.hue, this.satu, this.brig, this.alpha);
    fill(col);
    stroke(col);

    ellipse(this.location.x, this.location.y, this.radi, this.radi);
    line(this.location.x, this.location.y, this.start_x, this.location.y);
  }

  slide() {
    this.location.add(this.velocity);
  }

  changeAlpha() {
    if (this.location.x < 0 && this.alpha >= 20) {
      this.alpha -= 2.5;
    } else {
      this.alpha = min(this.alpha + 40, 99);
    }
  }
}

function keyPressed() {
  if (key === 'l' || key === 'L') {
    S += 0.1;
  } else if (key === 's' || key === 'S') {
    S -= 0.1;
  }
}