// // force https // var http_confirm = location.href.split(":")[0]; // if (http_confirm == "http") { // window.location.replace("https://" + location.host); // } var socket = io(location.host); var n = 0; var fr = 20; var arr = []; var looper; var score; let logo; var silence; (async () => { fetch("/entries").then(function(response) { return response.json(); }).then(function(data) { console.log(data); }).catch(function() { console.log("Booo"); }); var list = new Promise((resolve, reject) => { var xmlHttp = new XMLHttpRequest(); xmlHttp.open( "GET", "/entries", false ); // false for synchronous request xmlHttp.send( null ); return xmlHttp.responseText; loadJSON("/entries", (json) => { resolve(json); }); }); await list; console.log(list); })(); function preload() { loadJSON("/score.json", function(json) { score = json; }); silence = loadSound("./audio/_silence.wav"); } function setup() { noCanvas(); if (windowWidth > 1500 && windowWidth > windowHeight) { fr = 30; } else { fr = 20; } frameRate(fr); } // var myroom = -1; var intro; var ready; // socket.on("connect", function() { console.log("connected!"); // //TESTING... fixed to room 1. // myroom = 1; if (myroom == -1 && selectAll(".roomsel").length == 0) { //initial connection -> ask the room number. intro = createP("《흐름을 향하여 걷는》 ..."); intro.style("font-size", windowHeight / 30 + "pt"); intro.class("intro"); var roomsel = createDiv(); roomsel.class("roomsel"); var b = createButton("시작하기!", 1); b.mouseClicked(function() { silence.play(); myroom = parseInt(this.value()); socket.emit("room", myroom, function(res) { if (res) { console.log("entered the room -> " + myroom); createP(str(myroom)); // setTimeout(function() { // ready = createP("퍼레이드 시작합니다!!"); // ready.position( // windowWidth / 2 - windowWidth / 10, // windowHeight / 2 // ); // }, 1000); } else { console.log("rejected!"); } }); setTimeout(function() { selectAll(".roomsel").forEach(function(item) { item.remove(); }); selectAll(".intro").forEach(function(item) { item.remove(); }); }, 1000); }); roomsel.child(b); } else { //re-connection -> just connect to remembered room! socket.emit("room", myroom, function(res) { if (res) { console.log("entered the room -> " + myroom); } else { console.log("rejected!"); } }); } }); socket.on("post", function(post) { console.log(post); // var object = post.object; var object = { "id": 1, "type": "abc", "src": "https://p.dianaband.info/public/sound-parade/" + list[post] + "/pixels.png", "audio": "https://p.dianaband.info/public/sound-parade/" + list[post] + "/audio.mp3", "alt": "알트", "size": { "base": 40, "random": 20 }, "y": { "base": 20, "random": 10 }, "showtime": 30000 }; console.log(object); var img = createImg(object.src, object.alt, "", function(im) { var sound = loadSound(object.audio, function(snd) { //로딩이 끝나면, play! snd.loop(); //로딩이 끝나면, show! im.show(); //그림의 크기와 초기 위치 ==> 가로 보기인 경우 var width = 0; if (windowWidth > windowHeight) { width = (windowHeight * (object.size.base * 1.4 + object.size.random * Math.random())) / 100; // 좀더 크게 + 40% (ratio) im.size(width, AUTO); im.position( windowWidth * 1.5, // +150% 에서 생성되어서 접근 (sound fade-in) (windowHeight * (object.y.base + object.y.random * Math.random()) * 0.5) / 100 // 좀더 위로 위로 - 50% (ratio) ); //그림의 크기와 초기 위치 ==> 세로 보기인 경우 } else { width = (windowHeight * (object.size.base + object.size.random * Math.random())) / 100; // json에서 정한 크기 그대로. (ratio) im.size(width, AUTO); im.position( windowWidth * 1.5, // +150% 에서 생성되어서 접근 (sound fade-in) (windowHeight * (object.y.base + object.y.random * Math.random())) / 100 // json에서 정한 위치 그대로. (ratio) ); } //추가 정보들 im.attribute("data-type", object.type); im.attribute("data-showtime", object.showtime / 1000); //milli-sec. -> seconds. //'아이콘' 들은 애니메이션을 시켜줘야 함... if (object.type == "icon") { // im.class("rotate"); im.style("animation-duration", object.rotate + "s"); var orgs = im.style("transform-origin").split(" "); var str = parseFloat(orgs[0]) + object.pivot.x + "px"; str = str + " " + parseFloat(orgs[1]) + object.pivot.y + "px"; im.style("transform-origin", str); // } //로딩이 다 되면, rendering array에 추가. var bundle = { ref: object, img: im, sound: snd, width: width }; arr.push(bundle); }); }); //첨에는 hide img.hide(); }); function draw() { for (var i = arr.length - 1; i >= 0; i -= 1) { var bundle = arr[i]; var img = bundle.img; var showtime = parseFloat(img.attribute("data-showtime")); var type = img.attribute("data-type"); var x = img.position().x; var y = img.position().y; y = y + random(-1, 1); x = x - windowWidth / (fr * showtime); // if (type == "icon") { img.style("z-index", "-1"); } 3; img.position(x, y); var pan = (x / windowWidth) * 2 - 1; //panning var snd = bundle.sound; if (x >= -bundle.width && x < windowWidth) { pan = ((x + bundle.width) / (windowWidth + bundle.width)) * 2 - 1; snd.pan(pan); snd.setVolume(1); } else { var range; var knob; if (x >= windowWidth) { range = windowWidth / 2; knob = x - windowWidth; snd.pan(1); snd.setVolume(1 - knob / range); } else if (x < -bundle.width) { range = windowWidth / 2; knob = (x + bundle.width) * -1; snd.pan(-1); snd.setVolume(1 - knob / range); } } //remove at -50% (sound fade-out) var exit_x = -bundle.width - windowWidth/2; if (x < exit_x) { img.remove(); snd.stop(); arr.splice(i, 1); } } } // function randomvoiceplay() { // (looper = function(timeout) { // setTimeout(function() { // voice[int(random(19))].play(); // looper(random(8000, 12000)); // }, timeout); // })(8000); // }