Ejemplo n.º 1
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            Scores = new List <HighScore>();
            // Get played game highscore
            personalScore = e.Parameter as HighScore;

            Scores.Add(personalScore);
            // Get saved highscores

            try
            {
                Scores.AddRange(await ScoreDB.loadScores());
            }
            catch (NullReferenceException ex)
            {
                Debug.Write(ex.Message);
            }

            if (Scores.Where(sc => sc.Difficulty.Equals(personalScore.Difficulty)).Max(sc => sc.Score) <= personalScore.Score)
            {
                Notification.sendNote(Notification.standardNotification("Highscore", "Congratulations, you're leading with " + personalScore.Score + " Points on " + personalScore.Difficulty));
            }

            ScoreDB.saveScores(Scores);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     現状の ScoreDB と ScorePropertiesDB(ともに現行化前)を読み込んで反映する。
        /// </summary>
        public async Task ノードにDBを反映するAsync()
        {
            //using var _ = new LogBlock( Log.現在のメソッド名 );

            this._進捗カウンタ = 0;

            await Task.Run(() => {
                // 全レコード抽出
                using var scoredb           = new ScoreDB();
                using var scorePropertiesdb = new ScorePropertiesDB();
                using var query             = new SqliteCommand("SELECT * FROM Scores", scoredb.Connection);
                var result = query.ExecuteReader();
                while (result.Read())
                {
                    Interlocked.Increment(ref this._進捗カウンタ);

                    var record = new ScoreDBRecord(result);

                    // レコードに記載されているパスが全譜面リストに存在していれば、レコードの内容で更新する。
                    foreach (var score in Global.App.全譜面リスト.Where((s) => s.譜面.ScorePath == record.ScorePath))
                    {
                        score.譜面.UpdateFrom(record);
                    }
                }
            });
        }
Ejemplo n.º 3
0
        // ツリーと全譜面リストの構築


        /// <summary>
        ///     標準の曲ツリーを構築する。
        /// </summary>
        /// <remarks>
        ///     曲ツリーは、曲検索フォルダを検索した結果に、現状の(現行前の)ScoreDB の内容を反映したものとなる。
        ///     曲ツリーを構築すると同時に、全譜面リストも構築する。
        /// </remarks>
        public void 構築する(IEnumerable <VariablePath> 曲検索フォルダパスリスト, Dictionary <string, Score> 全譜面リスト)
        {
            using var _ = new LogBlock(Log.現在のメソッド名);


            // (1) 曲検索フォルダパスをスキャンして、曲ツリー(と全譜面リスト)を構築する。

            // ルートノードの子ノードリストの先頭に「ランダムセレクト」を追加する。
            this.ルートノード.子ノードリスト.Add(new RandomSelectNode()
            {
                親ノード = this.ルートノード
            });

            // 曲検索パスに従って構築する。
            foreach (var path in 曲検索フォルダパスリスト)
            {
                this._構築する(path, this.ルートノード);
            }


            // (2) 現状の(まだ現行化されていない)ScoreDB を読み込んで全譜面リストに反映する。

            using var scoredb = new ScoreDB();
            using var query   = new SqliteCommand("SELECT * FROM Scores", scoredb.Connection);
            var result = query.ExecuteReader();

            while (result.Read())
            {
                var record = new ScoreDBRecord(result);

                if (全譜面リスト.ContainsKey(record.ScorePath))
                {
                    全譜面リスト[record.ScorePath].譜面.UpdateFrom(record);        // 上書き
                }
            }


            // (3) 文字列画像のみ生成する。


            foreach (var score in 全譜面リスト.Values)
            {
                score.タイトル文字列画像   = 現行化.タイトル文字列画像を生成する(score.譜面.Title);
                score.サブタイトル文字列画像 = 現行化.サブタイトル文字列画像を生成する(score.譜面.Artist);
            }


            // (4) 最初の子ノードをフォーカスする。

            this.フォーカスリスト.SelectFirst();
        }
Ejemplo n.º 4
0
        private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            statusLabel.Text = "Reconstructing Scores.db From scratch, Please wait...";
            if (true)
            {
                //if it exists make a backup in backup folder
                string[] files = Directory.GetFiles(osuFolder + "data\\r", "*.osr");

                for (int i = 0; i < files.Length; i++)
                {
                    string hash = files[i].Substring(osuFolder.Length + 7, 32);
                    if (ScoreDB.Maps.ContainsKey(hash))
                    {
                        Replay rr = ScoreDB.readReplay(files[i]);
                        if (rr.replayhash.Length >= 1)
                        {
                            ScoreDB.Maps[hash].replays.Add(rr);
                        }
                    }
                    else
                    {
                        Replay rr = ScoreDB.readReplay(files[i]);
                        if (rr.replayhash.Length >= 1)
                        {
                            ScoreDB.Maps.Add(hash, new ScoreDB.Map(rr));
                        }
                    }
                }
                bool backup = true;
                int  count  = 0;
                while (backup)
                {
                    if (!Directory.Exists(osuFolder + "collection backups"))
                    {
                        Directory.CreateDirectory(osuFolder + "collection backups");
                    }
                    if (!File.Exists(osuFolder + "collection backups\\scores" + count + ".db"))
                    {
                        File.Copy(osuFolder + "scores.db", osuFolder + "collection backups\\scores" + count + ".db");
                        backup = false;
                    }
                    else
                    {
                        count++;
                    }
                }
                ScoreDB.writeScoresDB(osuFolder + "scores.db");
            }
        }
Ejemplo n.º 5
0
    //Saves all score to local json and sql db
    void SaveAll()
    {
        DefineValues();
        Score score = new Score();

        score.CC            = CC;
        score.CPS           = CPS;
        score.BossHappiness = BossHappiness;
        score.TimeQuit      = DateTime.Now;

        ScoreDB scoredb = new ScoreDB();

        scoredb.AndroidID = AndroidID;
        scoredb.Score     = CC;

        File.WriteAllText(spath, JsonConvert.SerializeObject(score));

        WebClient webclient = new WebClient();

        webclient.Headers.Add("Content-Type", "application/json");
        webclient.UploadString(apiHost + "api/score", "PUT", JsonConvert.SerializeObject(scoredb));
    }
Ejemplo n.º 6
0
    string apiHost = "http://bossclickerapi.azurewebsites.net/"; // http://bossclickerapi.azurewebsites.net/

    // Use this for initialization
    void Start()
    {
        DefineValues();

        if (!File.Exists(spath))
        {
            gameObject.GetComponent <SpriteRenderer>().sprite = happy;
            BossHappiness = 100;
            GoDown        = true;

            Score score = new Score();
            try
            {
                string    ScoreData = "";
                WebClient webclient = new WebClient();
                ScoreDB   scoredb;
                try
                {
                    ScoreData = webclient.DownloadString(apiHost + "api/score/" + AndroidID);
                    scoredb   = JsonConvert.DeserializeObject <ScoreDB>(ScoreData);
                }
                catch
                {
                    scoredb = new ScoreDB {
                        AndroidID = AndroidID, Score = 0
                    };
                    webclient.Headers.Add("Content-Type", "application/json");
                    webclient.UploadString(apiHost + "api/score", "POST", JsonConvert.SerializeObject(scoredb));
                }

                score.CC       = scoredb.Score;
                score.CPS      = 0;
                score.TimeQuit = DateTime.Now;
            }
            catch
            {
                Application.Quit();
            }

            output = JsonConvert.SerializeObject(score);
            File.WriteAllText(spath, output);
        }

        if (!File.Exists(ppath))
        {
            List <Product> product = new List <Product>();

            Product productA = new Product();
            productA.name           = "Pirat Cola";
            productA.browniePrice   = 250;
            productA.happinessPrice = 0;
            productA.owned          = 0;
            productA.modifier       = 1;
            productA.ID             = 0;

            Product productB = new Product();
            productB.name           = "Kage";
            productB.browniePrice   = 2500;
            productB.happinessPrice = 0;
            productB.owned          = 0;
            productB.modifier       = 2;
            productB.ID             = 1;

            Product productC = new Product();
            productC.name           = "Frugt";
            productC.browniePrice   = 10000;
            productC.happinessPrice = 10;
            productC.owned          = 0;
            productC.modifier       = 4;
            productC.ID             = 2;

            Product productD = new Product();
            productD.name           = "Bordfodbold";
            productD.browniePrice   = 20000;
            productD.happinessPrice = 10;
            productD.owned          = 0;
            productD.modifier       = 8;
            productD.ID             = 3;

            Product productE = new Product();
            productE.name           = "Fredagsbar";
            productE.browniePrice   = 100000;
            productE.happinessPrice = 20;
            productE.owned          = 0;
            productE.modifier       = 12;
            productE.ID             = 4;

            Product productF = new Product();
            productF.name           = "Lønforhøjelse";
            productF.browniePrice   = 250000;
            productF.happinessPrice = 65;
            productF.owned          = 0;
            productF.modifier       = 0;
            productF.ID             = 5;


            product.Add(productA);
            product.Add(productB);
            product.Add(productC);
            product.Add(productD);
            product.Add(productE);
            product.Add(productF);


            output = JsonConvert.SerializeObject(product);
            File.WriteAllText(ppath, output);
        }

        List <Product> DeProduct = JsonConvert.DeserializeObject <List <Product> >(File.ReadAllText(ppath));

        foreach (Product p in DeProduct)
        {
            mod += p.modifier * p.owned;
        }

        Score    cscore    = LoadAll();
        TimeSpan TimeSpent = DateTime.Now - cscore.TimeQuit;

        CC += Convert.ToInt64(Math.Floor(TimeSpent.TotalSeconds) * mod);
        SubHap((float)Math.Ceiling(TimeSpent.TotalSeconds * 0.0005555555555f));
        lastCC = CC;
    }
Ejemplo n.º 7
0
 public static void Clean()
 {
     ScoreDB.Close();
     BeatmapDB.Close();
 }
Ejemplo n.º 8
0
 public static void Initialize()
 {
     // Setup DBs
     ScoreDB   = new ScoreDB();
     BeatmapDB = new BeatmapDB();
 }
Ejemplo n.º 9
0
        private void _ノードを現行化する(Node node, ユーザ設定 userConfig)
        {
            #region " 1. ノードが持つ譜面の現行化 "
            //----------------
            if (node is SongNode snode)
            {
                using var scoredb = new ScoreDB();

                using (var cmd = new SqliteCommand("BEGIN", scoredb.Connection))
                    cmd.ExecuteNonQuery();

                // すべての譜面について……

                for (int i = 0; i < 5; i++)
                {
                    var score = snode.曲.譜面リスト[i];
                    if (score is null)
                    {
                        continue;
                    }

                    if (!File.Exists(score.譜面.ScorePath))
                    {
                        Log.ERROR($"ファイルが存在しません。[{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す( score.譜面.ScorePath )}]");
                        snode.曲.譜面リスト[i] !.Dispose();
                        snode.曲.譜面リスト[i] = null;
                        continue;
                    }

                    // 1.1. 譜面と画像 の現行化

                    if (!score.譜面と画像を現行化済み)
                    {
                        #region " ファイルの更新を確認し、ScoreDB と score を現行化する。"
                        //----------------
                        try
                        {
                            using var query = new SqliteCommand("SELECT * FROM Scores WHERE ScorePath = @ScorePath", scoredb.Connection);
                            query.Parameters.Add(new SqliteParameter("@ScorePath", score.譜面.ScorePath));
                            var result = query.ExecuteReader();
                            if (!result.Read())
                            {
                                // (A) ScoreDB に既存のレコードがない場合

                                #region " ScoreDBの レコードを新規追加し score を更新する。"
                                //----------------
                                var レコード = new ScoreDBRecord(score.譜面.ScorePath, userConfig);

                                // レコードを ScoreDB に新規追加する。
                                レコード.ReplaceTo(scoredb);

                                // score にも反映する。
                                score.譜面.UpdateFrom(レコード);

                                // 完了。
                                Log.Info($"ScoreDBに曲を追加しました。{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す( score.譜面.ScorePath )}");
                                //----------------
                                #endregion
                            }
                            else
                            {
                                // (B) ScoreDB に既存のレコードがある場合

                                var    レコード          = new ScoreDBRecord(result);
                                string 譜面ファイルの最終更新日時 = File.GetLastWriteTime(score.譜面.ScorePath).ToString("G");

                                if (レコード.LastWriteTime != 譜面ファイルの最終更新日時)
                                {
                                    #region " (B-a) 譜面ファイルの最終更新日時が更新されている → ScoreDB のレコードと score を更新する。"
                                    //----------------
                                    レコード = new ScoreDBRecord(score.譜面.ScorePath, userConfig);

                                    // ScoreDB のレコードを置換する。
                                    レコード.ReplaceTo(scoredb);

                                    // score にも反映する。
                                    score.譜面.UpdateFrom(レコード);

                                    // 完了。
                                    Log.Info($"最終更新日時が変更されているため、曲の情報を更新しました。{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す( score.譜面.ScorePath )}");
                                    //----------------
                                    #endregion
                                }
                                else
                                {
                                    #region " (B-b) それ以外 → 何もしない "
                                    //----------------
                                    //----------------
                                    #endregion
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Log.ERROR($"譜面の現行化に失敗しました。[{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す( e.Message )}][{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す( score.譜面.ScorePath )}]");
                            // 続行
                        }
                        //----------------
                        #endregion

                        #region " 画像を現行化する。"
                        //----------------
                        try
                        {
                            if (score.タイトル文字列画像 is null || score.タイトル文字列画像.表示文字列 != score.譜面.Title)
                            {
                                score.タイトル文字列画像?.Dispose();
                                score.タイトル文字列画像 = タイトル文字列画像を生成する(score.譜面.Title);
                            }
                            if (score.サブタイトル文字列画像 is null || score.サブタイトル文字列画像.表示文字列 != score.譜面.Artist)
                            {
                                score.サブタイトル文字列画像?.Dispose();
                                score.サブタイトル文字列画像 = サブタイトル文字列画像を生成する(string.IsNullOrEmpty(score.譜面.Artist) ? null : score.譜面.Artist);
                            }
                            score.プレビュー画像?.Dispose();
                            score.プレビュー画像 = ノード画像を生成する(
                                string.IsNullOrEmpty(score.譜面.PreImage) ?
                                null :
                                new VariablePath(Path.Combine(Path.GetDirectoryName(score.譜面.ScorePath) ?? @"\", score.譜面.PreImage)));
                        }
                        catch (Exception e)
                        {
                            Log.ERROR($"譜面画像の現行化に失敗しました。[{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す( e.Message )}][{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す(score.譜面.ScorePath)}]");
                            // 続行
                        }
                        //----------------
                        #endregion

                        // 現行化の成否によらず完了。
                        score.譜面と画像を現行化済み = true;
                    }

                    // 1.2. 属性 の現行化

                    if (!score.譜面の属性を現行化済み)
                    {
                        #region " 譜面の属性を現行化する。"
                        //----------------
                        try
                        {
                            using var scorepropdb = new ScorePropertiesDB();
                            using var cmd         = new SqliteCommand("SELECT * FROM ScoreProperties WHERE ScorePath = @ScorePath AND UserId = @UserId", scorepropdb.Connection);
                            cmd.Parameters.AddRange(new[] {
                                new SqliteParameter("@ScorePath", score.譜面.ScorePath),
                                new SqliteParameter("@UserId", userConfig.ID),
                            });
                            var result = cmd.ExecuteReader();
                            if (result.Read())
                            {
                                score.譜面の属性 = new ScorePropertiesDBRecord(result);

                                Log.Info($"譜面の属性を現行化しました。[{score.譜面.ScorePath}]");
                            }
                        }
                        catch (Exception e)
                        {
                            Log.ERROR($"譜面の属性の現行化に失敗しました。[{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す( e.Message )}][{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す( score.譜面.ScorePath )}]");
                            // 続行
                        }

                        // 現行化の成否によらず完了。
                        score.譜面の属性を現行化済み = true;
                        //----------------
                        #endregion
                    }

                    // 1.3. 最高記録 の現行化

                    if (!score.最高記録を現行化済み)
                    {
                        #region " 最高記録を現行化する。"
                        //----------------
                        try
                        {
                            using var recorddb = new RecordDB();
                            using var cmd      = new SqliteCommand("SELECT * FROM Records WHERE ScorePath = @ScorePath AND UserId = @UserId", recorddb.Connection);
                            cmd.Parameters.AddRange(new[] {
                                new SqliteParameter("@ScorePath", score.譜面.ScorePath),
                                new SqliteParameter("@UserId", userConfig.ID),
                            });
                            var result = cmd.ExecuteReader();
                            if (result.Read())
                            {
                                score.最高記録 = new RecordDBRecord(result);

                                Log.Info($"最高記録を現行化しました。[{score.譜面.ScorePath}]");
                            }
                        }
                        catch (Exception e)
                        {
                            Log.ERROR($"最高記録の現行化に失敗しました。[{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す( e.Message )}][{Folder.絶対パスをフォルダ変数付き絶対パスに変換して返す( score.譜面.ScorePath )}]");
                            // 続行
                        }

                        // 現行化の成否によらず完了。
                        score.最高記録を現行化済み = true;
                        //----------------
                        #endregion
                    }
                }

                using (var cmd = new SqliteCommand("END", scoredb.Connection))
                    cmd.ExecuteNonQuery();
            }
            //----------------
            #endregion

            #region " 2. ノードの現行化 "
            //----------------
            if (!node.現行化済み)
            {
                if (node is SongNode)
                {
                    // SongNode は生成不要。
                    // → App.全譜面リスト の構築時に、タイトル文字列画像とサブタイトル文字列画像だけ先に生成済み。
                }
                else
                {
                    // SongNode 以外は生成する。
                    node.タイトル文字列画像   = タイトル文字列画像を生成する(node.タイトル);
                    node.サブタイトル文字列画像 = サブタイトル文字列画像を生成する(node.サブタイトル);
                    node.ノード画像       = ノード画像を生成する(node.ノード画像ファイルの絶対パス);
                }

                // 生成の成否によらず完了。
                node.現行化済み = true;
            }
            //----------------
            #endregion
        }
Ejemplo n.º 10
0
 private void LoadScores()
 {
     var scoreDB = new ScoreDB(OsuPath + "/" + _dbFileScores);
     scoreDB.getScores();
     scores = scoreDB.listScores;
 }