diff --git a/app.py b/app.py
index ed02b6f..f1eac37 100644
--- a/app.py
+++ b/app.py
@@ -27,6 +27,25 @@ def query_db(query, args=(), one=False):
return (rv[0] if rv else None) if one else rv
+def get_config():
+ if os.path.isfile('config.json'):
+ try:
+ config = json.load(open('config.json', 'r'))
+ except ValueError:
+ print 'WARNING: Invalid config.json, using default values'
+ config = {}
+ else:
+ print 'WARNING: No config.json found, using default values'
+ config = {}
+
+ if not config.get('songs_baseurl'):
+ config['songs_baseurl'] = ''.join([request.host_url, 'songs']) + '/'
+ if not config.get('assets_baseurl'):
+ config['assets_baseurl'] = ''.join([request.host_url, 'assets']) + '/'
+
+ return config
+
+
def parse_osu(osu):
osu_lines = open(osu, 'r').read().replace('\x00', '').split('\n')
sections = {}
@@ -110,7 +129,7 @@ def route_index():
version = None
if os.path.isfile('version.json'):
version = json.load(open('version.json', 'r'))
- return render_template('index.html', version=version)
+ return render_template('index.html', version=version, config=get_config())
@app.route('/api/preview')
@@ -165,17 +184,7 @@ def route_api_songs():
@app.route('/api/config')
def route_api_config():
- if os.path.isfile('config.json'):
- config = json.load(open('config.json', 'r'))
- else:
- print 'WARNING: No config.json found, using default values'
- config = {
- 'songs_baseurl': ''.join([request.host_url, 'songs']) + '/'
- }
-
- if not config.get('songs_baseurl'):
- config['songs_baseurl'] = ''.join([request.host_url, 'songs']) + '/'
-
+ config = get_config()
return jsonify(config)
diff --git a/config.example.json b/config.example.json
index c5291d4..9bfd207 100644
--- a/config.example.json
+++ b/config.example.json
@@ -1,3 +1,4 @@
{
- "songs_baseurl": ""
+ "songs_baseurl": "",
+ "assets_baseurl": ""
}
diff --git a/public/src/css/main.css b/public/src/css/main.css
index ed8a4cb..035ca53 100644
--- a/public/src/css/main.css
+++ b/public/src/css/main.css
@@ -1,11 +1,3 @@
-@font-face{
- font-family: TnT;
- src: url("/assets/fonts/TnT.ttf") format("truetype");
-}
-@font-face{
- font-family: Kozuka;
- src: url("/assets/fonts/Kozuka.otf") format("truetype");
-}
html,
body{
margin: 0;
diff --git a/public/src/js/loader.js b/public/src/js/loader.js
index 2ee3251..673997e 100644
--- a/public/src/js/loader.js
+++ b/public/src/js/loader.js
@@ -15,7 +15,7 @@ class Loader{
this.screen.innerHTML = page
this.loaderPercentage = document.querySelector("#loader .percentage")
this.loaderProgress = document.querySelector("#loader .progress")
-
+
snd.buffer = new SoundBuffer()
snd.musicGain = snd.buffer.createGain()
snd.sfxGain = snd.buffer.createGain()
@@ -29,97 +29,98 @@ class Loader{
0.5
)
snd.sfxLoudGain.setVolume(1.2)
-
- snd.buffer.load("/assets/audio/" + assets.audioOgg).then(() => {
- this.oggNotSupported = false
- }, () => {
- this.oggNotSupported = true
- }).then(() => {
-
- 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
- })
-
- 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))
- })
-
- this.promises.push(this.ajax("/api/songs").then(songs => {
- assets.songs = JSON.parse(songs)
- }))
- this.promises.push(this.ajax("/api/config").then(conf => {
- gameConfig = JSON.parse(conf)
- }))
-
- 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.push(this.canvasTest.blurPerformance().then(result => {
- perf.blur = result
- if(result > 1000 / 50){
- // Less than 50 fps with blur enabled
- disableBlur = true
- }
- }))
-
- this.promises.forEach(promise => {
- promise.then(this.assetLoaded.bind(this))
- })
-
- Promise.all(this.promises).then(() => {
- this.canvasTest.drawAllImages().then(result => {
- perf.allImg = result
- perf.load = (+new Date) - this.startTime
- this.canvasTest.clean()
- this.clean()
- this.callback()
+ this.promises.push(this.ajax("/api/config").then(conf => {
+ gameConfig = JSON.parse(conf)
+
+ snd.buffer.load(gameConfig.assets_baseurl + "audio/" + assets.audioOgg).then(() => {
+ this.oggNotSupported = false
+ }, () => {
+ this.oggNotSupported = true
+ }).then(() => {
+
+ 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})
+ }))
})
- }, this.errorMsg.bind(this))
-
- })
+ 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 = gameConfig.assets_baseurl + "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))
+ })
+
+ 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.push(this.canvasTest.blurPerformance().then(result => {
+ perf.blur = result
+ if(result > 1000 / 50){
+ // Less than 50 fps with blur enabled
+ disableBlur = true
+ }
+ }))
+
+ this.promises.forEach(promise => {
+ promise.then(this.assetLoaded.bind(this))
+ })
+
+ Promise.all(this.promises).then(() => {
+ this.canvasTest.drawAllImages().then(result => {
+ perf.allImg = result
+ perf.load = (+new Date) - this.startTime
+ this.canvasTest.clean()
+ this.clean()
+ this.callback()
+ })
+ }, this.errorMsg.bind(this))
+
+ })
+ }))
+
}
loadSound(name, gain){
if(this.oggNotSupported && name.endsWith(".ogg")){
name = name.slice(0, -4) + ".wav"
}
var id = this.getFilename(name)
- return gain.load("/assets/audio/" + name).then(sound => {
+ return gain.load(gameConfig.assets_baseurl + "audio/" + name).then(sound => {
assets.sounds[id] = sound
})
}
diff --git a/templates/index.html b/templates/index.html
index df040f1..2a4dab8 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -22,6 +22,7 @@
+