From 2de8aefc5506224eeac82f9bc8aeb5a24e605a75 Mon Sep 17 00:00:00 2001 From: William Toohey Date: Sun, 4 Oct 2015 00:34:49 +1000 Subject: [PATCH] Finish Xmas UI. --- Makefile | 1 + css/hues-x.css | 71 +++++++++++++-- css/style.css | 14 ++- img/lightbase.png | Bin 0 -> 18307 bytes img/lightoff.png | Bin 0 -> 18894 bytes img/lighton.png | Bin 0 -> 20203 bytes img/wiresbottom.png | Bin 0 -> 31607 bytes img/wiresleft.png | Bin 0 -> 29528 bytes img/wiresright.png | Bin 0 -> 24373 bytes index-min.html | 1 + index.html | 3 +- js/HuesCanvas.js | 86 +++++++++++++++++- js/HuesSettings.js | 6 +- js/HuesUI.js | 208 +++++++++++++++++++++++++++++++++++++++++++- 14 files changed, 374 insertions(+), 16 deletions(-) create mode 100644 img/lightbase.png create mode 100644 img/lightoff.png create mode 100644 img/lighton.png create mode 100644 img/wiresbottom.png create mode 100644 img/wiresleft.png create mode 100644 img/wiresright.png diff --git a/Makefile b/Makefile index b656588..14d59bd 100644 --- a/Makefile +++ b/Makefile @@ -26,6 +26,7 @@ pack: mkdir -p release/fonts mkdir -p release/respacks cp -r respacks release/ + cp -r img release/ cp -r fonts release/ cp -r js/lib release/js cp js/hues-min.js release/js diff --git a/css/hues-x.css b/css/hues-x.css index 9f09f1c..757bb3e 100644 --- a/css/hues-x.css +++ b/css/hues-x.css @@ -1,6 +1,3 @@ -/* Heavily based on Kepstin's wonderful CSS work - https://github.com/kepstin/0x40hues-html5/blob/master/hues-m.css */ - .XmasUI { font-family: 'PetMe64Web'; } @@ -15,6 +12,7 @@ left: 8px; right: 8px; color: rgba(255,255,255,0.7); + z-index: 1; } .hues-x-beatbar { @@ -41,15 +39,78 @@ -webkit-transform: translateY(0px); transition: transform 1s ease-out; -webkit-transition: -webkit-transform 1s ease-out; - } .hues-x-beatbar.hidden{ -transform: translateY(-40px); + transform: translateY(-40px); -webkit-transform: translateY(-40px); } .hues-x-controls.hidden { transform: translateY(104px); -webkit-transform: translateY(104px); +} + +.hues-x-light { + position: absolute; + width: 68px; + height: 113px; + transform-origin: 32px 69px; + -webkit-transform-origin: 32px 69px; + background-image: url("../img/lightbase.png"); +} + +.hues-x-light > div > img { + position: absolute; +} + +.hues-x-fade{ + transition: opacity 0.1s linear; + -webkit-transition: opacity 0.1s linear; +} + +.hues-x-lighton { + opacity: 1; +} + +.hues-x-lightoff { + opacity: 0; +} + +.hues-x-lighton.off{ + opacity: 0; +} + +.hues-x-lightoff.off{ + opacity: 1; +} + +.hues-x-wiresleft, .hues-x-wiresbottom, .hues-x-wiresright { + position: absolute; + background-repeat: no-repeat; +} + +.hues-x-wiresleft, .hues-x-wiresright { + height: 100%; + top: 0px; +} + +.hues-x-wiresleft { + width: 76px; + left: 0px; + background-image: url("../img/wiresleft.png"); +} + +.hues-x-wiresright { + width: 59px; + right: 0px; + background-image: url("../img/wiresright.png"); +} + +.hues-x-wiresbottom { + bottom: 0px; + height: 56px; + width:2889px; + background-image: url("../img/wiresbottom.png"); + left:50%;margin-left:-1444.5px; } \ No newline at end of file diff --git a/css/style.css b/css/style.css index 808bff5..0f8acd4 100644 --- a/css/style.css +++ b/css/style.css @@ -12,7 +12,6 @@ html, body { height: 100%; margin: 0; padding: 0; overflow: hidden; - background-color:#fff; } h1 { @@ -67,14 +66,25 @@ h1, h2, h3 { margin: 10px; } -#waifu { +#waifu, #snow { + position: absolute; display: block; height: 100%; padding: 0; +} +#waifu { z-index: -10; } +#snow { + z-index: -9; +} + +#snow.hidden { + display: none; +} + #preloadHelper { background-color: #FFF; width: 100%; diff --git a/img/lightbase.png b/img/lightbase.png new file mode 100644 index 0000000000000000000000000000000000000000..76a0512886340a192f610673d5c6344b3a631cc0 GIT binary patch literal 18307 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 UAgY1?5e7VLEgda#%{_Pg7YGPfy8r+H literal 0 HcmV?d00001 diff --git a/img/lightoff.png b/img/lightoff.png new file mode 100644 index 0000000000000000000000000000000000000000..ca81dbf9e6a6a5d84ba6e87baafa04fc564ad6b4 GIT binary patch literal 18894 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 literal 0 HcmV?d00001 diff --git a/img/lighton.png b/img/lighton.png new file mode 100644 index 0000000000000000000000000000000000000000..4509d190e474b4dbcb8cefe7d235a6f6ada78f7c GIT binary patch literal 20203 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 literal 0 HcmV?d00001 diff --git a/img/wiresbottom.png b/img/wiresbottom.png new file mode 100644 index 0000000000000000000000000000000000000000..20191b45216bb5122742727fde014febe9e851a1 GIT binary patch literal 31607 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Ϣ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 literal 0 HcmV?d00001 diff --git a/img/wiresleft.png b/img/wiresleft.png new file mode 100644 index 0000000000000000000000000000000000000000..266a6a95127005b4d066fe71f99cac340f75f3d7 GIT binary patch literal 29528 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 literal 0 HcmV?d00001 diff --git a/img/wiresright.png b/img/wiresright.png new file mode 100644 index 0000000000000000000000000000000000000000..a0c81e4310e99deafca76d4874704a2256e15ea9 GIT binary patch literal 24373 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 UF7d?e|6}{}ng$x>YK~F=4+O4$sQ>@~ literal 0 HcmV?d00001 diff --git a/index-min.html b/index-min.html index 0d4fc3c..d49cd5e 100644 --- a/index-min.html +++ b/index-min.html @@ -102,6 +102,7 @@
+ \ No newline at end of file diff --git a/index.html b/index.html index b1fdfa4..d83535e 100644 --- a/index.html +++ b/index.html @@ -29,7 +29,7 @@ "./respacks/PackShit.zip" ], //load : false, //debug - autoplay : false // debug + autoplay : false, // debug }; core = new HuesCore(defaults); }; @@ -111,6 +111,7 @@
+ \ No newline at end of file diff --git a/js/HuesCanvas.js b/js/HuesCanvas.js index 0433303..746784d 100644 --- a/js/HuesCanvas.js +++ b/js/HuesCanvas.js @@ -68,6 +68,12 @@ function HuesCanvas(element, aContext, core) { this.canvas = document.getElementById(element).getContext("2d"); window.addEventListener('resize', this.resizeHandler(this)); this.resize(); + + this.snowing = false; + this.maxSnow = 30; + this.snowAngle = 0; + this.lastSnow = 0; + this.snowflakes = []; this.animating = true; requestAnimationFrame(this.getAnimLoop()); @@ -80,7 +86,9 @@ HuesCanvas.prototype.resizeHandler = function(that) { HuesCanvas.prototype.resize = function() { // height is constant 720px, we expand width to suit var ratio = window.innerWidth / window.innerHeight; - this.canvas.canvas.width = 720 * ratio + 1; + this.canvas.canvas.width = Math.ceil(720 * ratio); + var snow = document.getElementById("snow").getContext("2d"); + snow.canvas.width = Math.ceil(720 * ratio); this.needsRedraw = true; } @@ -221,6 +229,9 @@ HuesCanvas.prototype.animationLoop = function() { } else if(this.needsRedraw){ this.redraw(); } + if(this.snowing) { + this.drawSnow(); + } if(this.animating) { requestAnimationFrame(this.getAnimLoop()); } @@ -379,4 +390,77 @@ HuesCanvas.prototype.setAnimating = function(anim) { requestAnimationFrame(this.animationLoop); } this.animating = anim; +} + +// From http://thecodeplayer.com/walkthrough/html5-canvas-snow-effect + +HuesCanvas.prototype.startSnow = function() { + this.snowing = true; + document.getElementById("snow").style.display = "block"; + var height = this.canvas.canvas.height; + var width = this.canvas.canvas.width; + this.snowAngle = 0; + this.snowflakes = []; + for(var i = 0; i < this.maxSnow; i++) { + this.snowflakes.push({ + x: Math.random()*width, //x-coordinate + y: Math.random()*height, //y-coordinate + r: Math.random()*4+1, //radius + d: Math.random()*25 //density + }) + } + this.lastSnow = this.aContext.currentTime; +} + +HuesCanvas.prototype.stopSnow = function() { + this.snowing = false; + document.getElementById("snow").style.display = "none"; +} + +HuesCanvas.prototype.drawSnow = function() { + var ctx = document.getElementById("snow").getContext("2d"); + var W = ctx.canvas.width; + var H = ctx.canvas.height; + var delta = this.lastSnow - this.aContext.currentTime; + ctx.clearRect(0, 0, W, H); + + ctx.fillStyle = "rgba(255, 255, 255, 0.8)"; + ctx.beginPath(); + for(var i = 0; i < this.maxSnow; i++) { + var p = this.snowflakes[i]; + ctx.moveTo(p.x, p.y); + ctx.arc(p.x, p.y, p.r, 0, Math.PI*2, true); + } + ctx.fill(); + + this.snowAngle += delta / 6; + for(var i = 0; i < this.maxSnow; i++) { + var p = this.snowflakes[i]; + //Updating X and Y coordinates + //We will add 1 to the cos function to prevent negative values which will lead flakes to move upwards + //Every particle has its own density which can be used to make the downward movement different for each flake + //Lets make it more random by adding in the radius + p.y += Math.cos(this.snowAngle+p.d) + 1 + p.r/2; + p.x += Math.sin(this.snowAngle) * 2; + + //Sending flakes back from the top when it exits + //Lets make it a bit more organic and let flakes enter from the left and right also. + if(p.x > W+5 || p.x < -5 || p.y > H) { + if(i%3 > 0) {//66.67% of the flakes + this.snowflakes[i] = {x: Math.random()*W, y: -10, r: p.r, d: p.d}; + } + else { + //If the flake is exitting from the right + if(Math.sin(this.snowAngle) > 0) { + //Enter from the left + this.snowflakes[i] = {x: -5, y: Math.random()*H, r: p.r, d: p.d}; + } + else { + //Enter from the right + this.snowflakes[i] = {x: W+5, y: Math.random()*H, r: p.r, d: p.d}; + } + } + } + } + this.lastSnow = this.aContext.currentTime; } \ No newline at end of file diff --git a/js/HuesSettings.js b/js/HuesSettings.js index 8355351..2ab474c 100644 --- a/js/HuesSettings.js +++ b/js/HuesSettings.js @@ -119,7 +119,7 @@ HuesSettings.prototype.settingsOptions = { function HuesSettings(defaults) { this.core = null; this.root = document.getElementById("huesSettings"); - this.window = document.getElementById("settingsWindow"); + this.window = document.getElementById("settingsHelper"); this.hide(); for(var attr in this.defaultSettings) { @@ -152,7 +152,7 @@ HuesSettings.prototype.connectCore = function(core) { HuesSettings.prototype.show = function() { if(this.core) this.core.hideLists(); - this.window.style.display = "block"; + this.window.style.display = "flex"; } HuesSettings.prototype.hide = function() { @@ -161,7 +161,7 @@ HuesSettings.prototype.hide = function() { HuesSettings.prototype.toggle = function() { if(this.window.style.display == "none") { - this.window.style.display = "block"; + this.window.style.display = "flex"; if(this.core) this.core.hideLists(); } else { diff --git a/js/HuesUI.js b/js/HuesUI.js index b25a5a1..12807bf 100644 --- a/js/HuesUI.js +++ b/js/HuesUI.js @@ -481,6 +481,8 @@ function ModernUI() { this.volLabel = null; this.hideRestore = null; + this.currentBeat = "."; + HuesUI.call(this); this.hidden = 0; // we have a 3 stage hide @@ -679,19 +681,19 @@ ModernUI.prototype.modeUpdated = function() { ModernUI.prototype.beat = function() { var beats = this.core.getBeatString(); - var current = beats[0]; + this.currentBeat = beats[0]; var rest = beats.slice(1); this.beatLeft.textContent = rest; this.beatRight.textContent = rest; - if (current != ".") { + if (this.currentBeat != ".") { while (this.beatCenter.firstElementChild) { this.beatCenter.removeChild(this.beatCenter.firstElementChild); } var span = this.beatCenter.ownerDocument.createElement("span"); - span.textContent = current; + span.textContent = this.currentBeat; this.beatCenter.appendChild(span); } this.beatCount.textContent = "B=" + this.intToHex4(this.core.getSafeBeatIndex()); @@ -744,10 +746,132 @@ function XmasUI() { this.controls.className = "hues-x-controls"; this.beatBar.className = "hues-x-beatbar"; + + this.lights = []; + + var wires = document.createElement("div"); + wires.className = "hues-x-wires"; + + var left = document.createElement("div"); + left.className = "hues-x-wiresleft"; + for(var i = 0; i < xleft.length; i++) { + var l = xleft[i]; + var light = this.newLight(l, left); + light.style.transform = "rotate(" + l.angle + "deg)"; + light.style.left = l.x + "px"; + light.style.top = l.y + "px"; + this.lights.push(light); + } + + var right = document.createElement("div"); + right.className = "hues-x-wiresright"; + for(var i = 0; i < xright.length; i++) { + var l = xright[i]; + var light = this.newLight(l, right); + light.style.transform = "rotate(" + (-l.angle) + "deg)"; + light.style.right = l.x + "px"; + light.style.top = l.y + "px"; + this.lights.push(light); + } + + var bottom = document.createElement("div"); + bottom.className = "hues-x-wiresbottom"; + for(var i = 0; i < xbottom.length; i++) { + var l = xbottom[i]; + var light = this.newLight(l, bottom); + light.style.transform = "rotate(" + l.angle + "deg)"; + light.style.left = l.x + "px"; + light.style.bottom = l.y + "px"; + this.lights.push(light); + } + + wires.appendChild(left); + wires.appendChild(right); + wires.appendChild(bottom); + this.root.appendChild(wires); } XmasUI.prototype = Object.create(ModernUI.prototype); XmasUI.prototype.constructor = XmasUI; +XmasUI.prototype.connectCore = function(core) { + HuesUI.prototype.connectCore.call(this, core); + this.core.renderer.startSnow(); +} + +XmasUI.prototype.disconnect = function() { + this.core.renderer.stopSnow(); + HuesUI.prototype.disconnect.call(this); +} + +XmasUI.prototype.lightOn = function(light) { + light.on.className = "hues-x-lighton"; + light.off.className = "hues-x-lightoff"; +} + +XmasUI.prototype.lightOff = function(light) { + light.on.className = "hues-x-lighton off"; + light.off.className = "hues-x-lightoff off"; +} + +XmasUI.prototype.lightFadeOut = function(light) { + light.on.className = "hues-x-lighton hues-x-fade off"; + light.off.className = "hues-x-lightoff hues-x-fade off"; +} + +XmasUI.prototype.lightRecolour = function(light) { + var hue = Math.random() * 360; + light.bulb.style.filter = "hue-rotate(" + hue + "deg)"; + light.bulb.style.webkitFilter = "hue-rotate(" + hue + "deg)"; +} + +XmasUI.prototype.randomLight = function(light) { + if(Math.random() >= 0.5) { + this.lightOn(light); + } else { + this.lightOff(light); + } +} + +XmasUI.prototype.newLight = function(l, parent) { + var light = document.createElement("div"); + light.className = "hues-x-light"; + var bulb = document.createElement("div"); + var on = document.createElement("img"); + on.src = "./img/lighton.png"; + var off = document.createElement("img"); + off.src = "./img/lightoff.png"; + bulb.appendChild(on); + bulb.appendChild(off); + light.appendChild(bulb); + parent.appendChild(light); + light.on = on; + light.off = off; + light.bulb = bulb; + this.randomLight(light); + this.lightRecolour(light); + return light; +} + +XmasUI.prototype.beat = function() { + ModernUI.prototype.beat.call(this); + if(this.currentBeat != ".") { + for(var i = 0; i < this.lights.length; i++) { + var l = this.lights[i]; + switch(this.currentBeat) { + case ":": + this.lightOn(l); + this.lightRecolour(l); + break; + case "+": + this.lightFadeOut(l); + break; + default: + this.randomLight(this.lights[i]); + } + } + } +} + XmasUI.prototype.toggleHide = function() { this.beatBar.className = "hues-x-beatbar"; this.beatCenter.className = "hues-m-beatcenter"; @@ -764,4 +888,80 @@ XmasUI.prototype.toggleHide = function() { XmasUI.prototype.setColourText = function(colour) {}; XmasUI.prototype.blurUpdated = function(x, y) {}; -XmasUI.prototype.updateTime = function(time) {}; \ No newline at end of file +XmasUI.prototype.updateTime = function(time) {}; + +var xleft = [ + {"angle":122.529582194,"x":19.4,"y":-19.35}, + {"angle":92.5309436511,"x":25.4,"y":38.7}, + {"angle":107.530202659,"x":39.4,"y":107.75}, + {"angle":77.5309700777,"x":20.75,"y":184.8}, + {"angle":77.5309700777,"x":32.3,"y":249.8}, + {"angle":107.530202659,"x":40.45,"y":327.9}, + {"angle":88.3307935055,"x":35,"y":410.9}, + {"angle":107.530202659,"x":54.35,"y":490.95}, + {"angle":74.9981580491,"x":28.15,"y":573.8}, + {"angle":89.9973772074,"x":23.45,"y":675.35}, + {"angle":107.530202659,"x":21.65,"y":762.6}, + {"angle":107.530202659,"x":15.8,"y":842.75}, + {"angle":92.5309436511,"x":36.55,"y":905.7}, + {"angle":88.3307935055,"x":31.1,"y":988.7}, + {"angle":107.530202659,"x":50.45,"y":1068.75}, + {"angle":74.9981580491,"x":45.75,"y":1158.5}, + {"angle":88.3307935055,"x":35.85,"y":1238.55} +] +var xright = [ + {"angle":120.001009518,"x":33.3,"y":-29.75}, + {"angle":90.0026227926,"x":35.35,"y":53.65}, + {"angle":102.469029922,"x":41.5,"y":136.5}, + {"angle":91.6692064945,"x":22.15,"y":216.55}, + {"angle":72.4697973408,"x":34.4,"y":278.25}, + {"angle":102.469029922,"x":45.75,"y":361.85}, + {"angle":87.4699314665,"x":26.65,"y":426.35}, + {"angle":72.4697973408,"x":41.6,"y":502.15}, + {"angle":102.469029922,"x":27.5,"y":566}, + {"angle":72.4697973408,"x":7.65,"y":638.45}, + {"angle":102.469029922,"x":11,"y":721.25}, + {"angle":76.1887724128,"x":7.65,"y":792.7}, + {"angle":87.4690563489,"x":36.15,"y":850.35}, + {"angle":102.46813454,"x":16.6,"y":924.3}, + {"angle":72.4697973408,"x":15.3,"y":990.8}, + {"angle":76.1887724128,"x":11.95,"y":1062.25}, + {"angle":87.4690563489,"x":40.45,"y":1119.9}, + {"angle":102.46813454,"x":20.9,"y":1193.85} +] +var xbottom = [ + {"angle":32.5804579323,"x":110.35,"y":-12.1}, + {"angle":3.28979777069,"x":168.05,"y":-5.55}, + {"angle":17.6989154099,"x":238.35,"y":7.7}, + {"angle":-12.6587029361,"x":314.8,"y":-10.4}, + {"angle":-12.6587029361,"x":379.4,"y":1.05}, + {"angle":17.6989154099,"x":457.75,"y":9.4}, + {"angle":2.59102780115,"x":540.6,"y":3.75}, + {"angle":17.6989154099,"x":620.35,"y":22.7}, + {"angle":-15.134241831,"x":703,"y":-2.9}, + {"angle":2.30443717424,"x":804.75,"y":-7.85}, + {"angle":17.6989154099,"x":892.45,"y":-9.55}, + {"angle":17.6989154099,"x":971.65,"y":-15.5}, + {"angle":3.28979777069,"x":1035.2,"y":4.35}, + {"angle":2.59102780115,"x":1118,"y":0.2}, + {"angle":17.6989154099,"x":1198.05,"y":18.95}, + {"angle":-18.378894807,"x":1288.2,"y":14.2}, + {"angle":-4.561224264,"x":1367.9,"y":4.6}, + {"angle":32.5804579323,"x":1452.6,"y":-1.7}, + {"angle":3.28979777069,"x":1511.45,"y":4.45}, + {"angle":17.6989154099,"x":1580.6,"y":17.6}, + {"angle":-12.6587029361,"x":1656.6,"y":-0.95}, + {"angle":-12.6587029361,"x":1722.1,"y":11.1}, + {"angle":17.6989154099,"x":1800.5,"y":18.8}, + {"angle":2.59102780115,"x":1883.1,"y":13}, + {"angle":17.6989154099,"x":1963,"y":32.6}, + {"angle":-15.134241831,"x":2045.8,"y":7}, + {"angle":2.30443717424,"x":2147.55,"y":1.55}, + {"angle":17.6989154099,"x":2234.1,"y":0.4}, + {"angle":17.6989154099,"x":2315,"y":-5.6}, + {"angle":3.28979777069,"x":2377.8,"y":14.5}, + {"angle":2.59102780115,"x":2460.65,"y":9.75}, + {"angle":17.6989154099,"x":2540.2,"y":28.5}, + {"angle":-18.378894807,"x":2627.55,"y":24.9}, + {"angle":-4.561224264,"x":2710.4,"y":14.4} +] \ No newline at end of file