Managed Extension Managerを用いるキャラクターのローダーを表します。
        /// <summary>キャラ名によってキャラをロードします。</summary>
        /// <param name="characterName">読み込み対象のキャラ名</param>
        private void LoadCharacter(string characterName)
        {
            string errorMessage = string.Empty;

            try
            {
                Character = IronPythonCharacterLoader.LoadCharacter(characterName);
            }
            catch (Exception ex1)
            {
                errorMessage += "IronPython: " + ex1.Message + "\n\n";
                try
                {
                    Character = MEFCharacterLoader.Load(characterName);
                }
                catch (Exception ex2)
                {
                    errorMessage += "MEF: " + ex2.Message + "\n\n";
                    MessageBox.Show(
                        "キャラクターのロードに失敗したためアプリケーションが起動できません。アプリケーションを終了します。\n" + errorMessage,
                        "Harriet キャラクターの初期化に失敗しました",
                        MessageBoxButton.OK,
                        MessageBoxImage.Error
                        );
                    Environment.Exit(1);
                }
            }

            SyncSizeSetting(_setting);
        }
Esempio n. 2
0
        /// <summary>キャラをロードし、インスタンスを返します。</summary>
        /// <param name="characterName">キャラの名前</param>
        /// <returns>キャラのインスタンス</returns>
        public static IHarrietCharacter Load(string characterName)
        {
            var loader = new MEFCharacterLoader();

            string path = DirectoryNames.GetCharacterLoadedDirectory(characterName);

            var catalog = new DirectoryCatalog(path);
            var container = new CompositionContainer(catalog);
            container.ComposeParts(loader);
            return loader.character;
        }
Esempio n. 3
0
        /// <summary>キャラをロードし、インスタンスを返します。</summary>
        /// <param name="characterName">キャラの名前</param>
        /// <returns>キャラのインスタンス</returns>
        public static IHarrietCharacter Load(string characterName)
        {
            var loader = new MEFCharacterLoader();

            string path = DirectoryNames.GetCharacterLoadedDirectory(characterName);

            var catalog   = new DirectoryCatalog(path);
            var container = new CompositionContainer(catalog);

            container.ComposeParts(loader);
            return(loader.character);
        }
Esempio n. 4
0
        /// <summary>キャラ変更をして問題ないかを確認し、問題がある場合はメッセージボックスによる通知を行います。</summary>
        /// <param name="newCharacterName">変更したいキャラの名前</param>
        /// <returns>キャラ変更して大丈夫な場合はtrue、そうでない場合はfalse</returns>
        public static bool CheckChangeCharacterValidity(string newCharacterName)
        {
            string errorMessage    = string.Empty;
            Action showErrorAction = () => MessageBox.Show(
                "指定したキャラの読み込み中にエラーが発生しました。スクリプトかMEFライブラリのうち意図した方のエラーを確認してください:\n\n" + errorMessage,
                "Harriet キャラロード失敗",
                MessageBoxButton.OK,
                MessageBoxImage.Error
                );

            bool ironPythonLoadValid = true;

            try
            {
                IronPythonCharacterLoader.CheckCharacterValidity(newCharacterName);
            }
            catch (Exception ex)
            {
                ironPythonLoadValid = false;
                errorMessage       += $"--IronPython:{ex.Message}--\n\n";
            }

            bool mefLoadValid = true;

            try
            {
                MEFCharacterLoader.CheckValidity(newCharacterName);
            }
            catch (Exception ex)
            {
                mefLoadValid  = false;
                errorMessage += $"--MEF:{ex.Message}--\n\n";
            }

            if (!(ironPythonLoadValid || mefLoadValid))
            {
                showErrorAction();
                return(false);
            }
            else
            {
                return(true);
            }
        }