プログラム中で使っているディレクトリ名関連のサポートを提供します。
コード例 #1
0
ファイル: CharacterSetting.cs プロジェクト: malaybaku/harriet
        /// <summary>キャラ名を指定して設定ファイルへのパスを取得します。</summary>
        /// <param name="characterName">キャラ名</param>
        /// <returns>設定ファイルへのパス文字列</returns>
        private static string GetSettingFilePath(string characterName)
        {
            string dir = Path.Combine(
                DirectoryNames.GetCharacterDirectory(characterName),
                SettingFileDirectory
                );

            Directory.CreateDirectory(dir);

            return(Path.Combine(dir, SettingFileName));
        }
コード例 #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);
        }
コード例 #3
0
        /// <summary>キャラを定められた仕様にもとづいてロードする。失敗すると例外が飛んでくる</summary>
        public static IHarrietCharacter LoadCharacter(string characterName)
        {
            var engine = Python.CreateEngine();
            //名前参照にexeのディレクトリとキャラのディレクトリを追加
            var paths = engine.GetSearchPaths();

            paths.Add(Environment.CurrentDirectory);
            paths.Add(DirectoryNames.GetCharacterScriptDirectory(characterName));
            paths.Add(DirectoryNames.GetCharacterLoadedDirectory(characterName));
            engine.SetSearchPaths(paths);

            string path = GetInitializeScriptPath(characterName);

            if (!File.Exists(path))
            {
                throw new FileNotFoundException($"file '{path}' was not found: this is needed to load character data");
            }
            engine.ExecuteFile(path, engine.Runtime.Globals);

            dynamic loadFunction;
            bool    result = engine.Runtime.Globals.TryGetVariable(CharacterLoadFunction, out loadFunction);

            if (!result)
            {
                throw new InvalidOperationException($"'{CharacterLoadFunction}' function does not exist in '{path}'");
            }
            PythonFunction function = loadFunction as PythonFunction;

            if (function == null)
            {
                throw new InvalidOperationException($"'{CharacterLoadFunction}' defined in '{path}' is not function");
            }

            IHarrietCharacter character = loadFunction() as IHarrietCharacter;

            if (character == null)
            {
                throw new InvalidOperationException($"{CharacterLoadFunction} result does not implements IHarrietCharacter");
            }

            return(character);
        }
コード例 #4
0
 private static string GetInitializeScriptPath(string characterName)
 {
     return(Path.Combine(DirectoryNames.GetCharacterLoadedDirectory(characterName), InitializeScriptName));
 }