Пример #1
0
        public static void 最新版にバージョンアップする()
        {
            using var _ = new LogBlock(Log.現在のメソッド名);

            var path    = new VariablePath(@"$(AppData)\Configuration.yaml");
            int version = 0;

            if (!File.Exists(path.数なしパス))
            {
                return;
            }

            #region " YAML階層のルートノード 'Version' を検索し、バージョン値を取得する。"
            //----------------
            {
                var yamlText   = File.ReadAllText(path.数なしパス);
                var yamlStream = new YamlStream();
                yamlStream.Load(new StringReader(yamlText));
                var rootMapping = (YamlMappingNode)yamlStream.Documents[0].RootNode;
                var versionNode = new YamlScalarNode("Version");
                if (rootMapping.Children.ContainsKey(versionNode))
                {
                    var versionValue = rootMapping.Children[versionNode] as YamlScalarNode;
                    version = int.Parse(versionValue?.Value ?? "1");    // 取得
                }
            }
            //----------------
            #endregion

            while (version < SystemConfig.VERSION)
            {
                switch (version)
                {
                case 1:
                {
                    break;      // 存在しない
                }

                case 2:
                {
                    #region " 2 → 3 "
                    //----------------
                    var v2 = old.SystemConfig.v002_システム設定.読み込む(path);
                    var v3 = new old.SystemConfig.v003_システム設定(v2);
                    v3.保存する(path);
                    version = v3.Version;
                    break;
                    //----------------
                    #endregion
                }

                case 3:
                {
                    #region " 3 → 4 "
                    //----------------
                    var v3 = old.SystemConfig.v003_システム設定.読み込む(path);
                    var v4 = new old.SystemConfig.v004_SystemConfig(v3);
                    v4.保存する();
                    version = v4.Version;
                    break;
                    //----------------
                    #endregion
                }

                case 4:
                {
                    #region " 4 → 5 "
                    //----------------
                    var v4 = old.SystemConfig.v004_SystemConfig.読み込む(path);
                    var v5 = new old.SystemConfig.v005_SystemConfig(v4);
                    v5.保存する();
                    version = v5.Version;
                    break;
                    //----------------
                    #endregion
                }

                case 5:
                {
                    #region " 5 → 6 "
                    //----------------
                    var v5 = old.SystemConfig.v005_SystemConfig.読み込む(path);
                    var v6 = new old.SystemConfig.v006_SystemConfig(v5);
                    v6.保存する();
                    version = v6.Version;
                    break;
                    //----------------
                    #endregion
                }

                case 6:
                {
                    #region " 6 → 最新版 "
                    //----------------
                    var v6 = old.SystemConfig.v006_SystemConfig.読み込む(path);
                    var v7 = new SystemConfig(v6);
                    v7.保存する();
                    version = v7.Version;
                    break;
                    //----------------
                    #endregion
                }
                }
            }
        }
Пример #2
0
        // 生成と終了


        public ドラム入力(SystemConfig config, KeyboardHID keyboard, GameControllersHID gameControllers, MidiIns midiIns, int 最大入力履歴数 = 32)
        {
            using var _ = new LogBlock(Log.現在のメソッド名);

            this._Config         = new WeakReference <SystemConfig>(config);
            this.Keybaord        = new WeakReference <KeyboardHID>(keyboard);
            this.GameControllers = new WeakReference <GameControllersHID>(gameControllers);
            this.MidiIn          = new WeakReference <MidiIns>(midiIns);
            this._最大入力履歴数        = 最大入力履歴数;

            this.ポーリング結果 = new List <ドラム入力イベント>();
            this._入力履歴   = new List <ドラム入力イベント>(this._最大入力履歴数);

            // MIDI入力デバイスの可変IDへの対応を行う。
            if (0 < midiIns.DeviceName.Count)
            {
                var デバイスリスト = new Dictionary <int, string>();    // <デバイスID, デバイス名>

                #region " (1) 先に列挙された実際のデバイスに合わせて、デバイスリスト(配列番号がデバイス番号)を作成する。"
                //----------------
                for (int i = 0; i < midiIns.DeviceName.Count; i++)
                {
                    デバイスリスト.Add(i, midiIns.DeviceName[i]);
                }
                //----------------
                #endregion

                #region " (2) キーバインディングのデバイスリストとマージして、新しいデバイスリストを作成する。"
                //----------------
                foreach (var kvp in config.MIDIデバイス番号toデバイス名)
                {
                    var キーバインディング側のデバイス名 = kvp.Value;

                    if (デバイスリスト.ContainsValue(キーバインディング側のデバイス名))
                    {
                        // (A) 今回も存在しているデバイスなら、何もしない。
                    }
                    else
                    {
                        // (B) 今回は存在していないデバイスなら、末尾(=未使用ID)に登録する。
                        デバイスリスト.Add(デバイスリスト.Count, キーバインディング側のデバイス名);
                    }
                }
                //----------------
                #endregion

                #region " (3) キーバインディングのデバイスから新しいデバイスへ、キーのIDを付け直す。"
                //----------------
                var 中間バッファ = new Dictionary <SystemConfig.IdKey, ドラム入力種別>();

                foreach (var kvp in config.MIDItoドラム)
                {
                    var キーのデバイスID = kvp.Key.deviceId;

                    // キーバインディングのデバイス番号 から、デバイスリストのデバイス番号 へ付け替える。
                    if (config.MIDIデバイス番号toデバイス名.TryGetValue(キーのデバイスID, out string?キーのデバイス名))
                    {
                        キーのデバイスID = デバイスリスト.First((kvp2) => (kvp2.Value == キーのデバイス名)).Key;          // マージしたので、必ず存在する。
                    }

                    中間バッファ.Add(new SystemConfig.IdKey(キーのデバイスID, kvp.Key.key), kvp.Value);        // デバイスID以外は変更なし。
                }

                config.MIDItoドラム.Clear();

                for (int i = 0; i < 中間バッファ.Count; i++)
                {
                    var kvp = 中間バッファ.ElementAt(i);
                    config.MIDItoドラム.Add(new SystemConfig.IdKey(kvp.Key.deviceId, kvp.Key.key), kvp.Value);
                }
                //----------------
                #endregion

                #region " (4) 新しいデバイスリストをキーバインディングに格納して、保存する。"
                //----------------
                config.MIDIデバイス番号toデバイス名.Clear();

                for (int i = 0; i < デバイスリスト.Count; i++)
                {
                    config.MIDIデバイス番号toデバイス名.Add(i, デバイスリスト[i]);
                }

                config.保存する();
                //----------------
                #endregion
            }
            else
            {
                // 列挙されたMIDI入力デバイスがまったくないなら、キーバインディングは何もいじらない。
            }
        }