Ejemplo n.º 1
0
 /// <summary>ファイル名にディレクトリ位置を付与し、パスとしてスクリプトを指定できる文字列を取得します。</summary>
 /// <param name="scriptName">スクリプト名("main.py"など)</param>
 /// <returns>実行ファイルから見たスクリプトへのパス</returns>
 private string GetScriptPath(string scriptName)
 {
     return(Path.Combine(
                DirectoryNames.GetCharacterScriptDirectory(this._characterName),
                scriptName
                ));
 }
Ejemplo n.º 2
0
        /// <summary>APIの設定を用いてインスタンスを初期化します。 </summary>
        /// <param name="api">IronPython用APIの何らかの実装</param>
        /// <param name="setting">更新処理の設定</param>
        /// <param name="dictionary">キャラに対応するグローバル変数用にディクショナリ</param>
        public IronPythonUpdateProcessor(IScriptApi api, IScriptUpdateSetting setting, PythonDictionary dictionary)
        {
            _setting = setting;

            var engine = Python.CreateEngine();

            //名前参照にexeのディレクトリとキャラのディレクトリを追加
            var paths = engine.GetSearchPaths();

            paths.Add(Environment.CurrentDirectory);
            paths.Add(DirectoryNames.GetCharacterScriptDirectory(api.CharacterName));
            engine.SetSearchPaths(paths);

            //可視領域を限界まで広く取るためビルトインスコープにぶち込んでおく
            ScriptScope builtin = engine.GetBuiltinModule();

            builtin.SetVariable(IronPythonCommonVariableNames.ApiVariableName, api);
            builtin.SetVariable(IronPythonCommonVariableNames.ApiGlobalDictionaryName, dictionary);

            string path = Path.Combine(DirectoryNames.GetCharacterScriptDirectory(api.CharacterName), UpdateScriptName);

            //高スピードで読むので先にコンパイル
            try
            {
                _updateCode = engine.CreateScriptSourceFromFile(path).Compile();
                IsValid     = true;
            }
            catch (Exception)
            {
                IsValid = false;
            }
        }
        /// <summary> スクリプティングAPIの設定にもとづいて初期化を行う </summary>
        /// <param name="api">APIとなるインスタンス</param>
        /// <param name="globals">グローバル変数</param>
        private void InitializeEngine(IScriptApi api, PythonDictionary globals)
        {
            _ironPythonEngine = Python.CreateEngine();
            //名前参照にexeのディレクトリとキャラのディレクトリを追加
            var paths = _ironPythonEngine.GetSearchPaths();

            paths.Add(Environment.CurrentDirectory);
            paths.Add(DirectoryNames.GetCharacterScriptDirectory(api.CharacterName));
            _ironPythonEngine.SetSearchPaths(paths);

            //可視領域を限界まで広く取るためビルトインスコープにぶち込んでおく
            ScriptScope builtin = _ironPythonEngine.GetBuiltinModule();

            builtin.SetVariable(IronPythonCommonVariableNames.ApiVariableName, api);
            builtin.SetVariable(IronPythonCommonVariableNames.ApiGlobalDictionaryName, globals);
        }