xxxxxxxxxx
133
let waves = [];
let omitter;
const sizeLimit = 800;
let observer;
let osc, freq, amp;
let dt = 0;
let timerGate = false;
function setup() {
createCanvas(400, 400);
omitter = new Omitter(0,height/2);
observer = createVector(200,250);
osc = new p5.Oscillator('sine');
amp = 0.75;
freq = 0;
osc.start();
}
function draw() {
background(220);
//draw observer
noStroke();
fill(0);
circle(observer.x,observer.y,5);
//omitter stuff
omitter.update();
omitter.display();
omitter.omit();
//loop through waves
for(let i = waves.length - 1; i>= 0; i--){
let wave = waves[i];
wave.update();
wave.display();
//remove waves when too big
if(wave.radius > sizeLimit){
waves.splice(i,1);
}
}
//console.log(freq)
osc.freq(freq, 0.1);
osc.amp(amp, 0.1);
//problem here
if(timerGate){
dt ++;
}
//problem here
}
class Omitter{
constructor(x,y){
this.pos = createVector(x,y);
this.speed = 0.75;
this.omitSpeed = 12;
this.size = 10;
}
omit(){
//create waves when on screen
if(frameCount % this.omitSpeed == 0 && this.pos.x < width + this.size){
append(waves, new Wave(this.pos.x,this.pos.y))
}
}
update(){
//move when on screen
if(this.pos.x < width+this.size){
this.pos.x += this.speed;
}
//restart
if(waves.length == 0 && this.pos.x > width){
this.pos.x = 0;
dt = 0;
}
}
display(){
// draw circle
noStroke();
fill(0);
circle(this.pos.x,this.pos.y,this.size);
}
}
class Wave{
constructor(x,y){
this.origin = createVector(x,y);
this.radius = 1;
this.hit = false;
this.d = dist(observer.x,observer.y,x,y);
this.speed = 1;
}
update(){
this.radius += this.speed;
if(this.radius/2 >= this.d && !this.hit){
this.hit = true;
timerGate = true;
//problem here
console.log(freq)
freq = map(dt,1,25,500,200);
dt = 0;
//problem here
}
}
display(){
noFill();
if(this.hit){
stroke(255,0,0);
}else{
stroke(0)
}
circle(this.origin.x,this.origin.y,this.radius);
}
}