createCanvas(windowWidth, windowHeight);
colors[0] = ['#152228', '#01737E', '#FEFFF2', '#F64203', '#013D45', '#1D435C', '#11A3B3', '#EFBF1F', '#E2641B', '#E43120'];
colorPatarn = int(random(colors.length));
for (let i = 0; i < particlesNum; i++) {
const y = random(height);
const wh = map(dist(x, y, width/2, height/2), 0, width/2, 50, 10);
const c = colors[colorPatarn][int(random(colors[colorPatarn].length))];
particles[i] = new Particle(x, y, wh, c);
if(rotationX === 0 && rotationY === 0){
mx = (mouseX - width/2) / 100;
my = (mouseY - height/2) / 100;
mx = map(rotationY, -90, 90, -displayHeight/2, displayHeight/2)/10;
my = map(rotationX, -90, 90, -displayWidth/2, displayWidth/2)/10;
for (let i = 0; i < particlesNum; i++) {
particles[i].update(mx, my);
function createMetaTag() {
let meta = createElement('meta');
meta.attribute('name', 'viewport');
meta.attribute('content', 'user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width,height=device-height');
let head = select('head');
if (typeof(DeviceOrientationEvent) !== 'undefined' && typeof(DeviceOrientationEvent.requestPermission) === 'function') {
DeviceOrientationEvent.requestPermission()
let button = createButton("click to allow access to sensors");
button.style("font-size", "24px");
button.mousePressed(requestAccess);
permissionGranted = true;
permissionGranted = true;
function requestAccess() {
DeviceOrientationEvent.requestPermission()
if (response == 'granted') {
permissionGranted = true;
permissionGranted = false;