Fix webkit styles, other CSS tweaks, local respack loading

serial
William Toohey 10 years ago
parent 2ec8396cb7
commit aa175b0414
  1. 66
      css/hues-m.css
  2. 6
      css/hues-r.css
  3. 54
      css/hues-res.css
  4. 10
      css/hues-w.css
  5. 8
      css/hues-x.css
  6. 10
      css/style.css
  7. 10
      index.html
  8. 17
      js/HuesCore.js
  9. 2
      js/HuesSettings.js
  10. 21
      js/HuesUI.js
  11. 49
      js/ResourceManager.js
  12. 8
      js/ResourcePack.js
  13. 16
      js/SoundManager.js

@ -8,15 +8,15 @@
.hues-m-beatbar, .hues-m-beatcenter{ .hues-m-beatbar, .hues-m-beatcenter{
transform: translateY(0px); transform: translateY(0px);
-webkit-transform: translateY(0px); -webkit-transform: translateY(0px);
transition: transform 1s linear; transition: transform 1s ease-out;
-webkit-transition: transform 1s linear; -webkit-transition: -webkit-transform 1s ease-out;
} }
.hues-m-controls { .hues-m-controls {
transform: translateY(0px); transform: translateY(0px);
-webkit-transform: translateY(0px); -webkit-transform: translateY(0px);
transition: transform 1s linear; transition: transform 1s ease-out;
-webkit-transition: transform 1s linear; -webkit-transition: -webkit-transform 1s ease-out;
} }
.hues-m-beatbar.hidden, .hues-m-beatcenter.hidden{ .hues-m-beatbar.hidden, .hues-m-beatcenter.hidden{
@ -231,7 +231,7 @@
user-select: none; user-select: none;
font-size: 12px; font-size: 12px;
width: 50%; width: 50%;
margin: auto; margin: 3px auto;
float: left; float: left;
} }
@ -251,37 +251,41 @@
cursor: pointer; cursor: pointer;
} }
.hues-m-prevbutton:hover, .hues-m-nextbutton:hover, .hues-m-actbutton:hover {
background: rgb(100,100,100);
}
.hues-m-prevbutton, .hues-m-nextbutton { .hues-m-prevbutton, .hues-m-nextbutton {
color: white; color: white;
background: rgb(32,32,32); background: rgb(40,40,40);
height: 20px; height: 20px;
line-height: 20px; line-height: 20px;
font-size: 12px; font-size: 12px;
white-space: nowrap; white-space: nowrap;
border-radius: 10px; border-radius: 10px;
top: 10px; top: 7.5px;
} }
.hues-m-prevbutton { .hues-m-prevbutton {
padding: 0 10px 0 0; padding: 0 10px 0 0;
left: 0px; left: 5px;
border-radius: 10px 0 0 10px; border-radius: 10px 0 0 10px;
} }
.hues-m-nextbutton { .hues-m-nextbutton {
padding: 0 0 0 10px; padding: 0 0 0 10px;
left: 48px; left: 42px;
border-radius: 0 10px 10px 0; border-radius: 0 10px 10px 0;
} }
.hues-m-actbutton { .hues-m-actbutton {
height: 40px; height: 35px;
width: 40px; width: 35px;
left: 15px; left: 17.5px;
color: white; color: white;
background: rgb(32,32,32); background: rgb(32,32,32);
font-size: 20px; font-size: 20px;
line-height: 40px; line-height: 35px;
border-radius: 20px; border-radius: 20px;
text-align: center; text-align: center;
z-index: 1; z-index: 1;
@ -291,15 +295,45 @@
bottom: 5px; bottom: 5px;
} }
.hues-m-question, .hues-m-cog { .hues-m-question, .hues-m-cog, .hues-m-hide {
cursor: pointer; cursor: pointer;
} }
.hues-m-cog { .hues-m-cog {
position: absolute;
left: 15px;
top: 0px;
font-size: 20px;
}
.hues-m-hide {
position: absolute;
left: 17px;
top: 20px;
font-size: 12px;
}
.hues-m-hiderestore {
display: none;
position: absolute; position: absolute;
left: 8px; left: 8px;
top: 5px; right: 8px;
font-size: 25px; bottom: 0px;
margin: 0 auto;
height: 30px;
max-width: 992px;
background: linear-gradient(rgba(0,0,0,0), rgba(0,0,0,0.2));
border-top-left-radius: 100px;
border-top-right-radius: 100px;
cursor: pointer;
}
.hues-m-hiderestore:hover {
background: linear-gradient(rgba(0,0,0,0), rgba(0,0,0,0.4));
}
.hues-m-hiderestore.hidden {
display: block;
} }
.hues-m-question { .hues-m-question {

@ -19,7 +19,9 @@
} }
.hues-r-controls { .hues-r-controls {
display:-webkit-flex;
display:flex; display:flex;
-webkit-align-items:center;
align-items:center; align-items:center;
position: absolute; position: absolute;
right: 0px; right: 0px;
@ -95,8 +97,8 @@
.hues-r-container, .hues-r-controls, .hues-r-subcontrols { .hues-r-container, .hues-r-controls, .hues-r-subcontrols {
transform: translateY(0px); transform: translateY(0px);
-webkit-transform: translateY(0px); -webkit-transform: translateY(0px);
transition: transform 1s linear; transition: transform 1s ease-out;
-webkit-transition: transform 1s linear; -webkit-transition: -webkit-transform 1s ease-out;
} }
.hues-r-container.hidden, .hues-r-controls.hidden, .hues-r-subcontrols.hidden { .hues-r-container.hidden, .hues-r-controls.hidden, .hues-r-subcontrols.hidden {

@ -17,6 +17,7 @@
.res-packcontainer { .res-packcontainer {
width: 55%; width: 55%;
height: 100%;
right: 0; right: 0;
margin-left: 10px; margin-left: 10px;
} }
@ -37,6 +38,48 @@
height: 155px; height: 155px;
} }
#res-progress-container {
font-size: 11px;
}
#res-progress-bar {
height:5px; /* Can be anything */
position: relative;
background: #000;
-moz-border-radius: 25px;
-webkit-border-radius: 25px;
border-radius: 25px;
padding: 2px;
margin: 2px;
}
#res-progress-filled {
display: block;
height: 100%;
border-radius: 8px;
background-color: rgb(43,194,83);
position: relative;
overflow: hidden;
}
#res-progress-texts {
font-size: 9px;
}
#res-progress-current {
position: absolute;
left: 5px;
}
#res-progress-top {
position: absolute;
right: 5px;
}
#res-progress-percent {
text-align: center;
}
.res-list { .res-list {
border: 2px solid black; border: 2px solid black;
background: rgba(255,255,255,0.3); background: rgba(255,255,255,0.3);
@ -47,7 +90,9 @@
.res-listitem { .res-listitem {
font-size: 10px; font-size: 10px;
border-bottom: 1px solid black; border-bottom: 1px solid black;
display: -webkit-flex;
display: flex; display: flex;
-webkit-align-items: center;
align-items: center; align-items: center;
} }
@ -91,7 +136,9 @@
} }
.res-buttons { .res-buttons {
display: -webkit-flex;
display: flex; display: flex;
-webkit-justify-content: space-between;
justify-content: space-between; justify-content: space-between;
padding: 0px 0px; padding: 0px 0px;
} }
@ -132,7 +179,9 @@
} }
#res-countscontainer { #res-countscontainer {
margin-top: 3px; position: absolute;
bottom: 0;
width: 100%;
} }
.res-counts { .res-counts {
@ -143,7 +192,9 @@
#res-packinfo { #res-packinfo {
margin-top: 5px; margin-top: 5px;
font-size: 9px; font-size: 9px;
display: -webkit-flex;
display: flex; display: flex;
-webkit-justify-content: space-between;
justify-content: space-between; justify-content: space-between;
} }
@ -189,6 +240,7 @@
} }
#res-packbuttons > .res-button { #res-packbuttons > .res-button {
-webkit-flex-grow: 1;
flex-grow: 1; flex-grow: 1;
text-align: center; text-align: center;
} }

@ -3,7 +3,9 @@
} }
.hues-w-controls { .hues-w-controls {
display:-webkit-flex;
display:flex; display:flex;
-webkit-align-items:center;
align-items:center; align-items:center;
position: absolute; position: absolute;
right: 0px; right: 0px;
@ -32,8 +34,8 @@
.hues-w-controls, .hues-w-subcontrols { .hues-w-controls, .hues-w-subcontrols {
transform: translateY(0px); transform: translateY(0px);
-webkit-transform: translateY(0px); -webkit-transform: translateY(0px);
transition: transform 1s linear; transition: transform 1s ease-out;
-webkit-transition: transform 1s linear; -webkit-transition: -webkit-transform 1s ease-out;
} }
.hues-w-controls.hidden, .hues-w-subcontrols.hidden { .hues-w-controls.hidden, .hues-w-subcontrols.hidden {
@ -44,8 +46,8 @@
.hues-w-beatbar { .hues-w-beatbar {
transform: translateY(0px); transform: translateY(0px);
-webkit-transform: translateY(0px); -webkit-transform: translateY(0px);
transition: transform 1s linear; transition: transform 1s ease-out;
-webkit-transition: transform 1s linear; -webkit-transition: -webkit-transform 1s ease-out;
} }
.hues-w-beatbar.hidden { .hues-w-beatbar.hidden {

@ -32,15 +32,15 @@
.hues-x-beatbar{ .hues-x-beatbar{
transform: translateY(0px); transform: translateY(0px);
-webkit-transform: translateY(0px); -webkit-transform: translateY(0px);
transition: transform 1s linear; transition: transform 1s ease-out;
-webkit-transition: transform 1s linear; -webkit-transition: -webkit-transform 1s ease-out;
} }
.hues-x-controls { .hues-x-controls {
transform: translateY(0px); transform: translateY(0px);
-webkit-transform: translateY(0px); -webkit-transform: translateY(0px);
transition: transform 1s linear; transition: transform 1s ease-out;
-webkit-transition: transform 1s linear; -webkit-transition: -webkit-transform 1s ease-out;
} }

@ -37,8 +37,11 @@ h1, h2, h3 {
} }
#reference { #reference {
display:-webkit-flex;
display:flex; display:flex;
-webkit-align-items:center;
align-items:center; align-items:center;
-webkit-justify-content: center;
justify-content: center; justify-content: center;
} }
@ -76,9 +79,13 @@ h1, h2, h3 {
background-color: #FFF; background-color: #FFF;
width: 100%; width: 100%;
height: 100%; height: 100%;
display:-webkit-flex;
display:flex; display:flex;
-webkit-justify-content:center;
justify-content:center; justify-content:center;
-webkit-align-items:center;
align-items:center; align-items:center;
-webkit-flex-direction: column;
flex-direction: column; flex-direction: column;
font-family: 'PetMe64Web'; font-family: 'PetMe64Web';
font-size: 25pt; font-size: 25pt;
@ -144,8 +151,11 @@ input.tab-input[type="radio"]:checked + label {
} }
#settingsHelper { #settingsHelper {
display:-webkit-flex;
display:flex; display:flex;
-webkit-justify-content:center;
justify-content:center; justify-content:center;
-webkit-align-items:center;
align-items:center; align-items:center;
position: absolute; position: absolute;
top: 0; top: 0;

@ -25,8 +25,9 @@
var defaults = { var defaults = {
respacks : [//"./respacks/Defaults_v5.0.zip", respacks : [//"./respacks/Defaults_v5.0.zip",
"./respacks/CharPackagev0.03.zip", "./respacks/CharPackagev0.03.zip",
//"./respacks/HuesMixB.zip", "./respacks/HuesMixB.zip",
"./respacks/PackShit.zip"], "./respacks/PackShit.zip"
],
load : false, //debug load : false, //debug
autoplay : false // debug autoplay : false // debug
}; };
@ -43,12 +44,13 @@
</div> </div>
<div id="settingsHelper"> <div id="settingsHelper">
<div id="settingsWindow"> <div id="settingsWindow">
<div id="closeButton">x</div>
<div id="tabs"> <div id="tabs">
<input class="tab-input" type="radio" name="tabs" id="tab1"> <input class="tab-input" type="radio" name="tabs" id="tab1">
<label class="tab-label" for="tab1">RESOURCES</label> <label class="tab-label" for="tab1">RESOURCES</label>
<input class="tab-input" type="radio" name="tabs" id="tab2" checked> <input class="tab-input" type="radio" name="tabs" id="tab2">
<label class="tab-label" for="tab2">OPTIONS</label> <label class="tab-label" for="tab2">OPTIONS</label>
<input class="tab-input" type="radio" name="tabs" id="tab3"> <input class="tab-input" type="radio" name="tabs" id="tab3" checked>
<label class="tab-label" for="tab3">INFO</label> <label class="tab-label" for="tab3">INFO</label>
<div id="tab1-content" class="tab-content"> <div id="tab1-content" class="tab-content">
<!-- Populated by ResourceManager.js --> <!-- Populated by ResourceManager.js -->

@ -6,7 +6,7 @@ HuesCore = function(defaults) {
this.currentSong; this.currentSong;
this.currentImage; this.currentImage;
this.songIndex=-1; this.songIndex=-1;
this.colourIndex=0; // TODO should be 0xF this.colourIndex=0x3f;
this.imageIndex=-1; this.imageIndex=-1;
this.isFullAuto = true; this.isFullAuto = true;
this.loopCount=0; this.loopCount=0;
@ -33,7 +33,7 @@ HuesCore = function(defaults) {
this.resourceManager = new Resources(this); this.resourceManager = new Resources(this);
this.soundManager = new SoundManager(this); this.soundManager = new SoundManager(this);
if(!this.soundManager.canUse) { if(!this.soundManager.canUse) {
this.error("Web Audio API not supported in this browser."); this.error(this.soundManager.errorMsg);
return; return;
} }
this.renderer = new HuesCanvas("waifu", this.soundManager.context, this); this.renderer = new HuesCanvas("waifu", this.soundManager.context, this);
@ -129,6 +129,17 @@ HuesCore.prototype.previousSong = function() {
this.setSong(index); this.setSong(index);
} }
HuesCore.prototype.setSongByName = function(name) {
var songs = this.resourceManager.enabledSongs;
for(var i = 0; i < songs.length; i++) {
if(songs[i].title == name) {
this.setSong(i);
return;
}
}
this.setSong(0); // fallback
}
HuesCore.prototype.setSong = function(index) { HuesCore.prototype.setSong = function(index) {
if(this.currentSong == this.resourceManager.enabledSongs[index]) { if(this.currentSong == this.resourceManager.enabledSongs[index]) {
return; return;
@ -156,9 +167,9 @@ HuesCore.prototype.setSong = function(index) {
break; break;
} }
} }
this.resetAudio();
var that = this; var that = this;
this.soundManager.playSong(this.currentSong, this.doBuildup, function() { this.soundManager.playSong(this.currentSong, this.doBuildup, function() {
that.resetAudio();
that.fillBuildup(); that.fillBuildup();
}); });
} }

@ -77,7 +77,7 @@ function HuesSettings(defaults) {
this.core = null; this.core = null;
this.root = document.getElementById("huesSettings"); this.root = document.getElementById("huesSettings");
this.window = document.getElementById("settingsWindow"); this.window = document.getElementById("settingsWindow");
this.hide(); // TODO hide this.hide();
for(var attr in this.defaultSettings) { for(var attr in this.defaultSettings) {
if(attr == "respacks") { if(attr == "respacks") {

@ -203,6 +203,10 @@ HuesUI.prototype.intToHex2 = function(num) {
return '$0x' + ("00"+num.toString(16)).slice(-2); return '$0x' + ("00"+num.toString(16)).slice(-2);
} }
HuesUI.prototype.intToHex3 = function(num) {
return '$0x' + ("000"+num.toString(16)).slice(-3);
}
HuesUI.prototype.intToHex4 = function(num) { HuesUI.prototype.intToHex4 = function(num) {
return '$0x' + ("0000"+num.toString(16)).slice(-4); return '$0x' + ("0000"+num.toString(16)).slice(-4);
} }
@ -355,7 +359,7 @@ RetroUI.prototype.beat = function() {
this.beatBar.textContent = ">>" + rest; this.beatBar.textContent = ">>" + rest;
this.beatCount.textContent = "B=" + this.intToHex2(this.core.getSafeBeatIndex()); this.beatCount.textContent = "B=" + this.intToHex3(this.core.getSafeBeatIndex());
} }
function ModernUI() { function ModernUI() {
@ -369,6 +373,7 @@ function ModernUI() {
this.leftInfo = null; this.leftInfo = null;
this.controls = null; this.controls = null;
this.volInput = null; this.volInput = null;
this.hideRestore = null;
HuesUI.call(this); HuesUI.call(this);
@ -408,6 +413,9 @@ ModernUI.prototype.initUI = function() {
this.settingsToggle.className = "hues-m-cog"; this.settingsToggle.className = "hues-m-cog";
volCluster.appendChild(this.settingsToggle); volCluster.appendChild(this.settingsToggle);
this.hideToggle.className = "hues-m-hide";
volCluster.appendChild(this.hideToggle);
var volBar = document.createElement("div"); var volBar = document.createElement("div");
volBar.className = "hues-m-vol-bar"; volBar.className = "hues-m-vol-bar";
volCluster.appendChild(volBar); volCluster.appendChild(volBar);
@ -515,18 +523,27 @@ ModernUI.prototype.initUI = function() {
beatCenter.className = "hues-m-beatcenter"; beatCenter.className = "hues-m-beatcenter";
this.root.appendChild(beatCenter); this.root.appendChild(beatCenter);
this.beatCenter = beatCenter; this.beatCenter = beatCenter;
this.hideRestore = document.createElement("div");
this.hideRestore.className = "hues-m-hiderestore";
this.hideRestore.onclick = function() {
that.toggleHide();
}
this.root.appendChild(this.hideRestore);
} }
ModernUI.prototype.toggleHide = function() { ModernUI.prototype.toggleHide = function() {
this.beatBar.className = "hues-m-beatbar"; this.beatBar.className = "hues-m-beatbar";
this.beatCenter.className = "hues-m-beatcenter"; this.beatCenter.className = "hues-m-beatcenter";
this.controls.className = "hues-m-controls"; this.controls.className = "hues-m-controls";
this.hideRestore.className = "hues-m-hiderestore";
switch(this.hidden) { switch(this.hidden) {
case 1: case 1:
this.beatBar.className = "hues-m-beatbar hidden"; this.beatBar.className = "hues-m-beatbar hidden";
this.beatCenter.className = "hues-m-beatcenter hidden"; this.beatCenter.className = "hues-m-beatcenter hidden";
case 0: case 0:
this.controls.className = "hues-m-controls hidden"; this.controls.className = "hues-m-controls hidden";
this.hideRestore.className = "hues-m-hiderestore hidden";
} }
this.hidden = (this.hidden+1) % 3; this.hidden = (this.hidden+1) % 3;
} }
@ -650,7 +667,7 @@ WeedUI.prototype.beat = function() {
this.beatLeft.textContent = rest; this.beatLeft.textContent = rest;
this.beatRight.textContent = rest; this.beatRight.textContent = rest;
this.beatCount.textContent = "B=" + this.intToHex2(this.core.getSafeBeatIndex()); this.beatCount.textContent = "B=" + this.intToHex3(this.core.getSafeBeatIndex());
if(["x", "o", "X", "O"].indexOf(beats[0]) != -1) { if(["x", "o", "X", "O"].indexOf(beats[0]) != -1) {
var beatCenter = document.createElement("div"); var beatCenter = document.createElement("div");

@ -199,8 +199,10 @@ Resources.prototype.parseLocalQueue = function(recursing) {
r.loadBlob(this.fileParseQueue.shift(), r.loadBlob(this.fileParseQueue.shift(),
function() { function() {
that.addPack(r); that.addPack(r);
that.localComplete();
that.parseLocalQueue(true); that.parseLocalQueue(true);
}, },
function(progress, respack) {that.localProgress(progress, respack);},
function() {that.parseLocalQueue(true);}); function() {that.parseLocalQueue(true);});
} else { } else {
console.log("Local respack parsing complete"); console.log("Local respack parsing complete");
@ -208,6 +210,26 @@ Resources.prototype.parseLocalQueue = function(recursing) {
} }
} }
Resources.prototype.localProgress = function(progress, respack) {
this.packsView.progressStatus.textContent = "Processing...";
this.packsView.progressBar.style.width = (progress * 100) + "%";
this.packsView.progressCurrent.textContent = respack.filesLoaded;
this.packsView.progressTop.textContent = respack.filesToLoad;
this.packsView.progressPercent.textContent = Math.round(progress * 100) + "%";
}
Resources.prototype.localComplete = function(progress) {
var progStat = this.packsView.progressStatus;
progStat.textContent = "Complete";
window.setTimeout(function() {progStat.textContent = "Idle";}, 2000);
this.packsView.progressBar.style.width = "100%";
this.packsView.progressCurrent.textContent = "0b";
this.packsView.progressTop.textContent = "0b";
this.packsView.progressPercent.textContent = "0%";
}
Resources.prototype.initUI = function() { Resources.prototype.initUI = function() {
this.root = document.getElementById("huesResources"); this.root = document.getElementById("huesResources");
var that = this; var that = this;
@ -254,21 +276,38 @@ Resources.prototype.initUI = function() {
this.fileInput.onchange = function() {that.loadLocal();}; this.fileInput.onchange = function() {that.loadLocal();};
var progressContainer = document.createElement("div"); var progressContainer = document.createElement("div");
progressContainer.id = "res-progress-container";
var progressBar = document.createElement("div"); var progressBar = document.createElement("div");
progressBar.id = "res-progress-bar";
var progressFilled = document.createElement("span");
progressFilled.id = "res-progress-filled";
progressBar.appendChild(progressFilled);
var progressStatus = document.createElement("div"); var progressStatus = document.createElement("div");
progressStatus.textContent = "Idle";
var progressTexts = document.createElement("div");
progressTexts.id = "res-progress-texts";
var progressCurrent = document.createElement("div"); var progressCurrent = document.createElement("div");
progressCurrent.id = "res-progress-current";
progressCurrent.textContent = "0b";
var progressTop = document.createElement("div"); var progressTop = document.createElement("div");
progressTop.id = "res-progress-top";
progressTop.textContent = "0b";
var progressPercent = document.createElement("div"); var progressPercent = document.createElement("div");
this.packsView.progressBar = progressBar; progressPercent.id = "res-progress-percent";
progressPercent.textContent = "0%";
progressTexts.appendChild(progressCurrent);
progressTexts.appendChild(progressTop);
progressTexts.appendChild(progressPercent);
this.packsView.progressBar = progressFilled;
this.packsView.progressStatus = progressStatus; this.packsView.progressStatus = progressStatus;
this.packsView.progressCurrent = progressCurrent; this.packsView.progressCurrent = progressCurrent;
this.packsView.progressTop = progressTop; this.packsView.progressTop = progressTop;
this.packsView.progressPercent = progressPercent; this.packsView.progressPercent = progressPercent;
progressContainer.appendChild(progressBar);
progressContainer.appendChild(progressStatus); progressContainer.appendChild(progressStatus);
progressContainer.appendChild(progressCurrent); progressContainer.appendChild(progressBar);
progressContainer.appendChild(progressTop); progressContainer.appendChild(progressTexts);
progressContainer.appendChild(progressPercent);
packsContainer.appendChild(packHeader); packsContainer.appendChild(packHeader);
packsContainer.appendChild(packList); packsContainer.appendChild(packList);

@ -48,21 +48,20 @@ Respack.prototype.updateProgress = function() {
if(this.loadedFromURL) { if(this.loadedFromURL) {
percent = (percent / 2) + 0.5; percent = (percent / 2) + 0.5;
} }
this.progressCallback(percent); this.progressCallback(percent, this);
} }
} }
Respack.prototype.loadFromURL = function(url, callback, progress) { Respack.prototype.loadFromURL = function(url, callback, progress) {
var that = this; var that = this;
this.progressCallback = progress;
this.loadedFromURL = true; this.loadedFromURL = true;
var req = new XMLHttpRequest(); var req = new XMLHttpRequest();
req.open('GET', url, true); req.open('GET', url, true);
req.responseType = 'blob'; req.responseType = 'blob';
req.onload = function() { req.onload = function() {
that.loadBlob(req.response, callback); that.loadBlob(req.response, callback, progress);
}; };
req.onerror = function() { req.onerror = function() {
console.log("Could not load respack at URL", url); console.log("Could not load respack at URL", url);
@ -80,8 +79,9 @@ Respack.prototype.loadFromURL = function(url, callback, progress) {
req.send(); req.send();
} }
Respack.prototype.loadBlob = function(blob, callback, errorCallback) { Respack.prototype.loadBlob = function(blob, callback, progress, errorCallback) {
this._completionCallback = callback; this._completionCallback = callback;
this.progressCallback = progress;
var that = this; var that = this;
this.size = blob.size; this.size = blob.size;
this.file = new zip.fs.FS(); this.file = new zip.fs.FS();

@ -37,11 +37,20 @@ function SoundManager(core) {
this.gainNode.connect(this.context.destination); this.gainNode.connect(this.context.destination);
} catch(e) { } catch(e) {
this.canUse = false; this.canUse = false;
this.errorMsg = "Web Audio API not supported in this browser.";
return;
}
var audio = document.createElement("audio"),
canPlayMP3 = (typeof audio.canPlayType === "function" &&
audio.canPlayType("audio/mpeg") !== "");
if(!canPlayMP3) {
this.canUse = false;
this.errorMsg = "MP3 not supported in this browser.";
return;
} }
var that = this; var that = this;
window.addEventListener('touchend', function() { window.addEventListener('touchend', function() {
// create empty buffer // create empty buffer
var buffer = that.context.createBuffer(1, 1, 22050); var buffer = that.context.createBuffer(1, 1, 22050);
var source = that.context.createBufferSource(); var source = that.context.createBufferSource();
@ -81,7 +90,7 @@ SoundManager.prototype.playSong = function(song, playBuild, callback) {
callback(); callback();
if(playBuild) { if(playBuild) {
// Mobile Safari requires offset, even if 0 // mobile webkit requires offset, even if 0
that.bufSource.start(0); that.bufSource.start(0);
that.startTime = that.context.currentTime + that.loopStart; that.startTime = that.context.currentTime + that.loopStart;
} else { } else {
@ -97,7 +106,8 @@ SoundManager.prototype.playSong = function(song, playBuild, callback) {
SoundManager.prototype.stop = function() { SoundManager.prototype.stop = function() {
if (this.playing) { if (this.playing) {
this.bufSource.stop(); // arg required for mobile webkit
this.bufSource.stop(0);
this.bufSource.disconnect(); // TODO needed? this.bufSource.disconnect(); // TODO needed?
this.bufSource = null; this.bufSource = null;
this.playing = false; this.playing = false;

Loading…
Cancel
Save