Merge pull request #45 from LoveEevee/fix-audioctx-safari
Loader: Fallback to wav if ogg is not supported
This commit is contained in:
commit
680b41d650
@ -112,6 +112,7 @@ var assets = {
|
|||||||
"bgm_result.ogg",
|
"bgm_result.ogg",
|
||||||
"bgm_setsume.ogg"
|
"bgm_setsume.ogg"
|
||||||
],
|
],
|
||||||
|
"audioOgg": "note_ka.ogg",
|
||||||
"fonts": [
|
"fonts": [
|
||||||
"Kozuka",
|
"Kozuka",
|
||||||
"TnT"
|
"TnT"
|
||||||
|
@ -31,11 +31,9 @@ class Circle{
|
|||||||
getLastFrame(){
|
getLastFrame(){
|
||||||
return this.lastFrame
|
return this.lastFrame
|
||||||
}
|
}
|
||||||
incFrame(){
|
animate(ms){
|
||||||
this.lastFrame += 20
|
|
||||||
}
|
|
||||||
animate(){
|
|
||||||
this.animating = true
|
this.animating = true
|
||||||
|
this.animT = ms
|
||||||
}
|
}
|
||||||
isAnimated(){
|
isAnimated(){
|
||||||
return this.animating
|
return this.animating
|
||||||
@ -43,9 +41,6 @@ class Circle{
|
|||||||
getAnimT(){
|
getAnimT(){
|
||||||
return this.animT
|
return this.animT
|
||||||
}
|
}
|
||||||
incAnimT(){
|
|
||||||
this.animT += 0.05
|
|
||||||
}
|
|
||||||
getPlayed(){
|
getPlayed(){
|
||||||
return this.isPlayed
|
return this.isPlayed
|
||||||
}
|
}
|
||||||
|
@ -241,6 +241,7 @@ class Game{
|
|||||||
this.globalScore.points += score
|
this.globalScore.points += score
|
||||||
}
|
}
|
||||||
checkDrumroll(circle){
|
checkDrumroll(circle){
|
||||||
|
var ms = this.elapsedTime
|
||||||
var dai = circle.getType() === "daiDrumroll"
|
var dai = circle.getType() === "daiDrumroll"
|
||||||
var score = 100
|
var score = 100
|
||||||
circle.hit()
|
circle.hit()
|
||||||
@ -252,14 +253,14 @@ class Game{
|
|||||||
}
|
}
|
||||||
var circleAnim = new Circle({
|
var circleAnim = new Circle({
|
||||||
id: 0,
|
id: 0,
|
||||||
start: this.elapsedTime,
|
start: ms,
|
||||||
type: sound,
|
type: sound,
|
||||||
txt: "",
|
txt: "",
|
||||||
speed: circle.speed,
|
speed: circle.speed,
|
||||||
gogoTime: circle.gogoTime
|
gogoTime: circle.gogoTime
|
||||||
})
|
})
|
||||||
circleAnim.played(score, dai)
|
circleAnim.played(score, dai)
|
||||||
circleAnim.animate()
|
circleAnim.animate(ms)
|
||||||
this.controller.view.drumroll.push(circleAnim)
|
this.controller.view.drumroll.push(circleAnim)
|
||||||
this.globalScore.drumroll++
|
this.globalScore.drumroll++
|
||||||
this.globalScore.points += score * (dai ? 2 : 1)
|
this.globalScore.points += score * (dai ? 2 : 1)
|
||||||
|
@ -11,29 +11,7 @@ class Loader{
|
|||||||
this.screen.innerHTML = page
|
this.screen.innerHTML = page
|
||||||
this.loaderPercentage = document.querySelector("#loader .percentage")
|
this.loaderPercentage = document.querySelector("#loader .percentage")
|
||||||
this.loaderProgress = document.querySelector("#loader .progress")
|
this.loaderProgress = document.querySelector("#loader .progress")
|
||||||
|
|
||||||
assets.fonts.forEach(name => {
|
|
||||||
var font = document.createElement("h1")
|
|
||||||
font.style.fontFamily = name
|
|
||||||
font.appendChild(document.createTextNode("I am a font"))
|
|
||||||
this.assetsDiv.appendChild(font)
|
|
||||||
this.promises.push(new Promise((resolve, reject) => {
|
|
||||||
FontDetect.onFontLoaded(name, resolve, reject, {msTimeout: 90000})
|
|
||||||
}))
|
|
||||||
})
|
|
||||||
var fontDetectDiv = document.getElementById("fontdetectHelper")
|
|
||||||
fontDetectDiv.parentNode.removeChild(fontDetectDiv)
|
|
||||||
|
|
||||||
assets.img.forEach(name => {
|
|
||||||
var id = this.getFilename(name)
|
|
||||||
var image = document.createElement("img")
|
|
||||||
this.promises.push(pageEvents.load(image))
|
|
||||||
image.id = name
|
|
||||||
image.src = "/assets/img/" + name
|
|
||||||
this.assetsDiv.appendChild(image)
|
|
||||||
assets.image[id] = image
|
|
||||||
})
|
|
||||||
|
|
||||||
snd.buffer = new SoundBuffer()
|
snd.buffer = new SoundBuffer()
|
||||||
snd.musicGain = snd.buffer.createGain()
|
snd.musicGain = snd.buffer.createGain()
|
||||||
snd.sfxGain = snd.buffer.createGain()
|
snd.sfxGain = snd.buffer.createGain()
|
||||||
@ -48,46 +26,79 @@ class Loader{
|
|||||||
)
|
)
|
||||||
snd.sfxLoudGain.setVolume(1.2)
|
snd.sfxLoudGain.setVolume(1.2)
|
||||||
|
|
||||||
assets.audioSfx.forEach(name => {
|
snd.buffer.load("/assets/audio/" + assets.audioOgg).then(() => {
|
||||||
this.promises.push(this.loadSound(name, snd.sfxGain))
|
this.oggNotSupported = false
|
||||||
})
|
}, () => {
|
||||||
assets.audioMusic.forEach(name => {
|
this.oggNotSupported = true
|
||||||
this.promises.push(this.loadSound(name, snd.musicGain))
|
}).then(() => {
|
||||||
})
|
|
||||||
assets.audioSfxLR.forEach(name => {
|
assets.fonts.forEach(name => {
|
||||||
this.promises.push(this.loadSound(name, snd.sfxGain).then(sound => {
|
var font = document.createElement("h1")
|
||||||
|
font.style.fontFamily = name
|
||||||
|
font.appendChild(document.createTextNode("I am a font"))
|
||||||
|
this.assetsDiv.appendChild(font)
|
||||||
|
this.promises.push(new Promise((resolve, reject) => {
|
||||||
|
FontDetect.onFontLoaded(name, resolve, reject, {msTimeout: 90000})
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
var fontDetectDiv = document.getElementById("fontdetectHelper")
|
||||||
|
fontDetectDiv.parentNode.removeChild(fontDetectDiv)
|
||||||
|
|
||||||
|
assets.img.forEach(name => {
|
||||||
var id = this.getFilename(name)
|
var id = this.getFilename(name)
|
||||||
assets.sounds[id + "_p1"] = assets.sounds[id].copy(snd.sfxGainL)
|
var image = document.createElement("img")
|
||||||
assets.sounds[id + "_p2"] = assets.sounds[id].copy(snd.sfxGainR)
|
this.promises.push(pageEvents.load(image))
|
||||||
|
image.id = name
|
||||||
|
image.src = "/assets/img/" + name
|
||||||
|
this.assetsDiv.appendChild(image)
|
||||||
|
assets.image[id] = image
|
||||||
|
})
|
||||||
|
|
||||||
|
assets.audioSfx.forEach(name => {
|
||||||
|
this.promises.push(this.loadSound(name, snd.sfxGain))
|
||||||
|
})
|
||||||
|
assets.audioMusic.forEach(name => {
|
||||||
|
this.promises.push(this.loadSound(name, snd.musicGain))
|
||||||
|
})
|
||||||
|
assets.audioSfxLR.forEach(name => {
|
||||||
|
this.promises.push(this.loadSound(name, snd.sfxGain).then(sound => {
|
||||||
|
var id = this.getFilename(name)
|
||||||
|
assets.sounds[id + "_p1"] = assets.sounds[id].copy(snd.sfxGainL)
|
||||||
|
assets.sounds[id + "_p2"] = assets.sounds[id].copy(snd.sfxGainR)
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
assets.audioSfxLoud.forEach(name => {
|
||||||
|
this.promises.push(this.loadSound(name, snd.sfxLoudGain))
|
||||||
|
})
|
||||||
|
|
||||||
|
p2 = new P2Connection()
|
||||||
|
|
||||||
|
this.promises.push(this.ajax("/api/songs").then(songs => {
|
||||||
|
assets.songs = JSON.parse(songs)
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
assets.views.forEach(name => {
|
||||||
|
var id = this.getFilename(name)
|
||||||
|
this.promises.push(this.ajax("src/views/" + name).then(page => {
|
||||||
|
assets.pages[id] = page
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
|
this.promises.forEach(promise => {
|
||||||
|
promise.then(this.assetLoaded.bind(this))
|
||||||
|
})
|
||||||
|
|
||||||
|
Promise.all(this.promises).then(() => {
|
||||||
|
this.clean()
|
||||||
|
this.callback()
|
||||||
|
}, this.errorMsg.bind(this))
|
||||||
|
|
||||||
})
|
})
|
||||||
assets.audioSfxLoud.forEach(name => {
|
|
||||||
this.promises.push(this.loadSound(name, snd.sfxLoudGain))
|
|
||||||
})
|
|
||||||
|
|
||||||
p2 = new P2Connection()
|
|
||||||
|
|
||||||
this.promises.push(this.ajax("/api/songs").then(songs => {
|
|
||||||
assets.songs = JSON.parse(songs)
|
|
||||||
}))
|
|
||||||
|
|
||||||
assets.views.forEach(name => {
|
|
||||||
var id = this.getFilename(name)
|
|
||||||
this.promises.push(this.ajax("src/views/" + name).then(page => {
|
|
||||||
assets.pages[id] = page
|
|
||||||
}))
|
|
||||||
})
|
|
||||||
|
|
||||||
this.promises.forEach(promise => {
|
|
||||||
promise.then(this.assetLoaded.bind(this))
|
|
||||||
})
|
|
||||||
|
|
||||||
Promise.all(this.promises).then(() => {
|
|
||||||
this.clean()
|
|
||||||
this.callback()
|
|
||||||
}, this.errorMsg.bind(this))
|
|
||||||
}
|
}
|
||||||
loadSound(name, gain){
|
loadSound(name, gain){
|
||||||
|
if(this.oggNotSupported && name.endsWith(".ogg")){
|
||||||
|
name = name.slice(0, -4) + ".wav"
|
||||||
|
}
|
||||||
var id = this.getFilename(name)
|
var id = this.getFilename(name)
|
||||||
return gain.load("/assets/audio/" + name).then(sound => {
|
return gain.load("/assets/audio/" + name).then(sound => {
|
||||||
assets.sounds[id] = sound
|
assets.sounds[id] = sound
|
||||||
|
@ -498,7 +498,7 @@ class View{
|
|||||||
}
|
}
|
||||||
}else if(!circle.isAnimated()){
|
}else if(!circle.isAnimated()){
|
||||||
// Start animation to HP bar
|
// Start animation to HP bar
|
||||||
circle.animate()
|
circle.animate(ms)
|
||||||
}
|
}
|
||||||
if(ms >= circle.ms && !circle.gogoChecked){
|
if(ms >= circle.ms && !circle.gogoChecked){
|
||||||
if(this.gogoTime != circle.gogoTime){
|
if(this.gogoTime != circle.gogoTime){
|
||||||
@ -507,10 +507,12 @@ class View{
|
|||||||
circle.gogoChecked = true
|
circle.gogoChecked = true
|
||||||
}
|
}
|
||||||
if(circle.isAnimated()){
|
if(circle.isAnimated()){
|
||||||
var animationDuration = 470
|
var animT = circle.getAnimT()
|
||||||
if(ms <= finishTime + animationDuration){
|
var animationDuration = 400
|
||||||
var curveDistance = this.HPBarX + this.HPBarW - this.slotX
|
if(ms <= animT + animationDuration){
|
||||||
var bezierPoint = this.calcBezierPoint(circle.getAnimT(), [{
|
var curveDistance = this.HPBarX + this.HPBarW - this.slotX - this.HPBarColH / 2
|
||||||
|
var animPoint = (ms - animT) / animationDuration
|
||||||
|
var bezierPoint = this.calcBezierPoint(this.easeOut(animPoint), [{
|
||||||
x: this.slotX + this.circleSize * 0.4,
|
x: this.slotX + this.circleSize * 0.4,
|
||||||
y: this.circleY - this.circleSize * 0.8
|
y: this.circleY - this.circleSize * 0.8
|
||||||
}, {
|
}, {
|
||||||
@ -521,13 +523,9 @@ class View{
|
|||||||
y: 0
|
y: 0
|
||||||
}, {
|
}, {
|
||||||
x: this.slotX + curveDistance,
|
x: this.slotX + curveDistance,
|
||||||
y: this.HPbarColY
|
y: this.HPbarColY + this.HPBarColH / 2
|
||||||
}])
|
}])
|
||||||
this.drawCircle(circle, {x: bezierPoint.x, y: bezierPoint.y})
|
this.drawCircle(circle, {x: bezierPoint.x, y: bezierPoint.y})
|
||||||
|
|
||||||
// Update animation frame
|
|
||||||
circle.incAnimT()
|
|
||||||
circle.incFrame()
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
circle.endAnimation()
|
circle.endAnimation()
|
||||||
@ -548,6 +546,9 @@ class View{
|
|||||||
}
|
}
|
||||||
return data[0]
|
return data[0]
|
||||||
}
|
}
|
||||||
|
easeOut(pos){
|
||||||
|
return Math.sin(Math.PI / 2 * pos)
|
||||||
|
}
|
||||||
drawCircle(circle, circlePos){
|
drawCircle(circle, circlePos){
|
||||||
var z = this.canvas.scale
|
var z = this.canvas.scale
|
||||||
var fill, size, faceID
|
var fill, size, faceID
|
||||||
|
Loading…
Reference in New Issue
Block a user