diff --git a/app.py b/app.py
new file mode 100644
index 0000000..7c93615
--- /dev/null
+++ b/app.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python2
+
+import sqlite3
+from flask import Flask, g, jsonify
+
+app = Flask(__name__)
+DATABASE = 'taiko.db'
+
+
+def get_db():
+ db = getattr(g, '_database', None)
+ if db is None:
+ db = g._database = sqlite3.connect(DATABASE)
+ return db
+
+
+def query_db(query, args=(), one=False):
+ cur = get_db().execute(query, args)
+ rv = cur.fetchall()
+ cur.close()
+ return (rv[0] if rv else None) if one else rv
+
+
+@app.teardown_appcontext
+def close_connection(exception):
+ db = getattr(g, '_database', None)
+ if db is not None:
+ db.close()
+
+
+@app.route('/api/songs')
+def route_api_songs():
+ songs = query_db('select * from songs where enabled = 1')
+ songs_out = []
+ for song in songs:
+ print song
+ songs_out.append(
+ {'id': song[0], 'title': song[1], 'title_en': song[2], 'stars': {
+ 'easy': song[3], 'normal': song[4],
+ 'hard': song[5], 'oni': song[6]
+ }}
+ )
+
+ return jsonify(songs_out)
+
+
+if __name__ == '__main__':
+ app.run(port=34801)
diff --git a/index.html b/index.html
index babc551..6c7a8eb 100644
--- a/index.html
+++ b/index.html
@@ -21,6 +21,7 @@
+
diff --git a/src/css/animations.css b/src/css/animations.css
new file mode 100644
index 0000000..82dce8a
--- /dev/null
+++ b/src/css/animations.css
@@ -0,0 +1,58 @@
+@keyframes don-normal {
+0%{background-position-y:0px}
+6.35%{background-position-y:-184px}
+7.94%{background-position-y:-368px}
+9.52%{background-position-y:-552px}
+11.11%{background-position-y:-736px}
+12.7%{background-position-y:-920px}
+14.29%{background-position-y:-1104px}
+15.87%{background-position-y:-1104px}
+17.46%{background-position-y:-920px}
+19.05%{background-position-y:-736px}
+20.63%{background-position-y:-552px}
+22.22%{background-position-y:-368px}
+23.81%{background-position-y:-184px}
+25.4%{background-position-y:0px}
+31.75%{background-position-y:-184px}
+33.33%{background-position-y:-368px}
+34.92%{background-position-y:-552px}
+36.51%{background-position-y:-736px}
+38.1%{background-position-y:-920px}
+39.68%{background-position-y:-1104px}
+41.27%{background-position-y:-1104px}
+42.86%{background-position-y:-920px}
+44.44%{background-position-y:-736px}
+46.03%{background-position-y:-552px}
+47.62%{background-position-y:-368px}
+49.21%{background-position-y:-184px}
+50.79%{background-position-y:0px}
+57.14%{background-position-y:-184px}
+58.73%{background-position-y:-368px}
+60.32%{background-position-y:-552px}
+61.9%{background-position-y:-736px}
+63.49%{background-position-y:-920px}
+65.08%{background-position-y:-1104px}
+66.67%{background-position-y:-1104px}
+68.25%{background-position-y:-920px}
+69.84%{background-position-y:-1288px}
+71.43%{background-position-y:-1472px}
+73.02%{background-position-y:-1656px}
+74.6%{background-position-y:-1840px}
+76.19%{background-position-y:-2024px}
+77.78%{background-position-y:-2024px}
+79.37%{background-position-y:-2024px}
+80.95%{background-position-y:-2024px}
+82.54%{background-position-y:-1840px}
+84.13%{background-position-y:-1656px}
+85.71%{background-position-y:-1472px}
+87.3%{background-position-y:-1288px}
+88.89%{background-position-y:-2392px}
+90.48%{background-position-y:-2208px}
+92.06%{background-position-y:-2208px}
+93.65%{background-position-y:-2392px}
+95.24%{background-position-y:-2576px}
+96.83%{background-position-y:-2760px}
+98.41%{background-position-y:-2944px}
+100%{background-position-y:-3128px}
+}
+
diff --git a/src/css/main.css b/src/css/main.css
index c74f834..320626d 100644
--- a/src/css/main.css
+++ b/src/css/main.css
@@ -63,6 +63,7 @@ html, body{
color: white;
float: right;
z-index: 1;
+ font-weight: 300;
}
.stroke-main:before {
@@ -98,4 +99,11 @@ html, body{
.click-to-continue:before {
width: 100%;
+}
+
+
+.don {
+ background-position-y: 0;
+ position: absolute;
+ top: 0px;
}
\ No newline at end of file
diff --git a/src/css/songselect.css b/src/css/songselect.css
index 817760d..1147e0d 100644
--- a/src/css/songselect.css
+++ b/src/css/songselect.css
@@ -50,7 +50,7 @@ ul li{
.song-title{
float: right;
width: 45px;
- padding: 10px 0px;
+ padding: 10px 2px;
word-wrap: break-word;
font-size: 22pt;
color: white;
@@ -65,7 +65,7 @@ ul li{
.song{
font-size: 14pt;
- width: 45px;
+ width: 50px;
margin-right:15px;
height:100%;
color: black;
diff --git a/src/js/assets.js b/src/js/assets.js
index 81445a0..165f654 100644
--- a/src/js/assets.js
+++ b/src/js/assets.js
@@ -26,7 +26,8 @@ var assets = {
'muzu_easy.png',
'muzu_normal.png',
'muzu_hard.png',
- 'muzu_oni.png'
+ 'muzu_oni.png',
+ 'don_anim_normal.png'
),
audio: new Array(
diff --git a/src/js/game.js b/src/js/game.js
index 844c2a2..2687a9e 100644
--- a/src/js/game.js
+++ b/src/js/game.js
@@ -194,7 +194,7 @@ function Game(controller, selectedSong, songData){
_fadeOutStarted=true;
}
}
-
+
this.whenFadeoutMusic = function(){
if(_fadeOutStarted){
if(_musicFadeOut%8==0){
diff --git a/src/js/loader.js b/src/js/loader.js
index 3dc7da8..a7c9ae1 100644
--- a/src/js/loader.js
+++ b/src/js/loader.js
@@ -26,6 +26,7 @@ function Loader(){
var id = name.substr(0, name.length-4);
var audio = new Audio();
audio.src = '/assets/audio/'+name;
+ audio.muted = true;
audio.load();
audio.onloadeddata = function(){
assets.sounds[id] = new Audio();
@@ -37,10 +38,10 @@ function Loader(){
$.ajax({
async:true,
- type:"POST",
- url:"/src/php/getsongs.php",
+ type:"GET",
+ url:"/api/songs",
success:function(songs){
- assets.songs = $.parseJSON(songs);
+ assets.songs = songs;
_this.assetLoaded();
},
error:function(){
diff --git a/src/js/loadsong.js b/src/js/loadsong.js
index e46dc30..64834be 100644
--- a/src/js/loadsong.js
+++ b/src/js/loadsong.js
@@ -17,7 +17,7 @@ function loadSong(selectedSong){
$("#assets").append("");
var audio = new Audio();
- audio.src = '/songs/'+_selectedSong.folder+'/'+_selectedSong.title+'.mp3';
+ audio.src = '/songs/'+_selectedSong.folder+'/main.mp3';
audio.load();
$("#music-bg").load(function(){
diff --git a/src/js/songselect.js b/src/js/songselect.js
index 110a144..244649a 100644
--- a/src/js/songselect.js
+++ b/src/js/songselect.js
@@ -4,6 +4,35 @@ function SongSelect(){
var _songs;
var _selectedSong = {title:'', folder:'', difficulty:''};
var _code="";
+ var _preview;
+ var _preview_to;
+
+ this.startPreview = function(id, first_open=true) {
+ var start = Date.now();
+ setTimeout(function(){
+ bgm.pause();
+ }, 400);
+
+ _preview = new Audio('/songs/' + id + '/main.mp3');
+ _preview.onloadeddata = function() {
+ var end = Date.now();
+ var delay = end - start;
+ var no_delay = first_open ? 0 : 300;
+
+ _preview.currentTime = 10.0;
+ _preview.loop = true;
+ _preview.volume = 0.5;
+
+ _preview_to = setTimeout(function(){
+ _preview.play();
+ }, delay <= 1000 && first_open ? 1000 : no_delay);
+ }
+ };
+
+ this.endPreview = function() {
+ clearTimeout(_preview_to);
+ _preview.pause();
+ };
this.run = function(){
@@ -15,6 +44,9 @@ function SongSelect(){
$("#song-container").show();
$(".difficulty").click(function(e){
+ _this.endPreview();
+ assets.sounds["diffsel"].pause();
+ assets.sounds["diffsel"].currentTime = 0;
assets.sounds["don"].play();
clearInterval(menuLoop);
@@ -22,8 +54,8 @@ function SongSelect(){
_selectedSong.difficulty = difficultyElement.classList[1]+'.osu';
var parentID = $(this).parent().closest(".song").attr("id");
var songID = parseInt(parentID.substr(5, parentID.length-1));
- _selectedSong.title = $(this).parent().closest('.song').find('.song-title').html();
- _selectedSong.folder = songID+" "+_selectedSong.title;
+ _selectedSong.title = $(this).parent().closest('.song').data('title');
+ _selectedSong.folder = songID;
bgm.pause();
new loadSong(_selectedSong);
@@ -41,6 +73,8 @@ function SongSelect(){
$(".song").click(function(e){
if (!$(e.target).parents('.difficulties').length) {
if ($(".opened").length && $(".opened").attr('id') == $(this).attr('id')) {
+ _this.endPreview();
+ bgm.play();
assets.sounds["cancel"].play();
$(".difficulty").hide();
$(".opened").removeClass("opened", 300);
@@ -59,8 +93,9 @@ function SongSelect(){
return;
}
-
+
if(!$('.opened').length) {
+ _this.startPreview($(this).data('song-id'));
assets.sounds["don"].play();
assets.sounds["song-select"].pause();
assets.sounds["song-select"].currentTime = 0;
@@ -73,6 +108,8 @@ function SongSelect(){
$('.songsel-title').animate({left:0, opacity:"show"}, 400);
});
} else {
+ _preview.pause();
+ _this.startPreview($(this).data('song-id'), false);
assets.sounds["ka"].play();
}
};
@@ -98,15 +135,15 @@ function SongSelect(){
assets.sounds["song-select"].play();
}, 200);
for(var i=0; i";
+ _code += "
";
for (var c=0; c
";
- for(var j=0; j=_nextBeat){
diff --git a/src/php/getsongs.php b/src/php/getsongs.php
deleted file mode 100644
index a5435ef..0000000
--- a/src/php/getsongs.php
+++ /dev/null
@@ -1,63 +0,0 @@
- $data){
- $row_data = explode(':', $data);
- if($row_data[0]=='OverallDifficulty'){
- $difficulty=intval($row_data[1]);
- break;
- }
- }
-
- $file = array(
- "songFile" => $songFile,
- "difficulty" => $difficulty
- );
-
- array_push($files, $file);
- }
-
- }
-
- $scale = array('easy.osu', 'normal.osu', 'hard.osu', 'oni.osu');
- usort($files, function ($a, $b) use ($scale) {
- $pos_a = array_search($a['songFile'], $scale);
- $pos_b = array_search($b['songFile'], $scale);
- return $pos_a - $pos_b;
- });
-
- $song = array(
- "songDir" => $songDir,
- "files" => $files
- );
-
- array_push($songs, $song);
-
- }
-
- }
-
- echo json_encode($songs);
-
-?>
\ No newline at end of file
diff --git a/taiko.db b/taiko.db
new file mode 100644
index 0000000..0e76b0f
Binary files /dev/null and b/taiko.db differ