/* global loadSound frameRate background createButton io noCanvas select createP windowWidth windowHeight random createImg createDiv AUTO loadJSON createCanvas createRadio selectAll int str */ // force https var http_confirm = location.href.split(":")[0]; if (http_confirm == "http") { window.location.replace("https://" + location.host); } function AudioImport(url) { return new Promise(function(resolve, reject) { var audio = new Tone.Player(url, function() { resolve(audio); }).toDestination(); }); } var socket = io(location.host); var n = 0; var fr = 20; var arr = []; var voice = []; var looper; var score; let logo; var silence; async function preload() { loadJSON("/score.json", function(json) { score = json; }); silence = await AudioImport("./audio/_silence.wav"); } async function setup() { noCanvas(); if (windowWidth > 1500 && windowWidth > windowHeight) { fr = 30; } else { fr =20; } frameRate(fr); voice[0] = await AudioImport("./audio/018.mp3"); voice[1] = await AudioImport("./audio/011.mp3"); voice[2] = await AudioImport("./audio/14.mp3"); voice[3] = await AudioImport("./audio/012.mp3"); voice[4] = await AudioImport("./audio/17.mp3"); voice[5] = await AudioImport("./audio/11.mp3"); voice[6] = await AudioImport("./audio/013.mp3"); voice[7] = await AudioImport("./audio/022.mp3"); voice[8] = await AudioImport("./audio/020.mp3"); voice[9] = await AudioImport("./audio/021.mp3"); voice[10] = await AudioImport("./audio/014.mp3"); voice[11] = await AudioImport("./audio/16.mp3"); voice[12] = await AudioImport("./audio/015.mp3"); voice[13] = await AudioImport("./audio/18.mp3"); voice[14] = await AudioImport("./audio/12.mp3"); voice[15] = await AudioImport("./audio/019.mp3"); voice[16] = await AudioImport("./audio/13.mp3"); voice[17] = await AudioImport("./audio/016.mp3"); voice[18] = await AudioImport("./audio/017.mp3"); voice[19] = await AudioImport("./audio/023.mp3"); randomvoiceplay(); } // var myroom = -1; var plogo; var intro; var ready; // socket.on("connect", function() { console.log("connected!"); // if (myroom == -1 && selectAll(".roomsel").length == 0) { //initial connection -> ask the room number. // plogo.position(windowWidth/2, 50); plogo = createImg( "./imgs/logo02.png", "퍼레이드진진진 로고", "", function(im) { im.show(); im.size(windowWidth, AUTO); } ); intro = createP( "흘러가는 진 퍼레이드에 오신거 환영합니다.
*본인의 기기로 보고 싶은 퍼레이드의 구간을 고르세요.
여러 개의 기기로 퍼레이드를 연결해서 볼 수 있습니다.
*이 퍼레이드에서 흘러가는 진들은 각자의 이야기를 가지고 있습니다.
대체텍스트가 포함되어 있어 스크린리더를 통해 이야기를 음성으로 들을 수 있습니다." ); intro.style("font-size", windowHeight / 30 + "pt"); intro.class("intro"); var roomsel = createDiv(); roomsel.class("roomsel"); for (var idx = 9; idx > 0; idx--) { var b = createButton(str(idx), str(idx)); b.mouseClicked(function() { silence.start(); 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(); }); plogo.remove(); }, 1000); setTimeout(function() { ready.remove(); }, 8000); }); 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 img = createImg(object.src, object.alt, "", function(im) { im.show(); if (windowWidth > windowHeight) { im.size( (windowHeight * (object.size.base * 1.4 + object.size.random * Math.random())) / 100, AUTO ); im.position( windowWidth, (windowHeight * (object.y.base + object.y.random * Math.random()) * 0.5) / 100 ); } else { im.size( (windowHeight * (object.size.base + object.size.random * Math.random())) / 100, AUTO ); im.position( windowWidth, (windowHeight * (object.y.base + object.y.random * Math.random())) / 100 ); } 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); } }); img.hide(); arr.push(img); }); function draw() { arr.forEach(function(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); if (x < -windowHeight*0.9) { img.remove(); } }); } function randomvoiceplay() { (looper = function(timeout) { setTimeout(function() { voice[int(random(19))].start(); looper(random(8000, 12000)); }, timeout); })(8000); }