/// <summary>ファイル名にディレクトリ位置を付与し、パスとしてスクリプトを指定できる文字列を取得します。</summary> /// <param name="scriptName">スクリプト名("main.py"など)</param> /// <returns>実行ファイルから見たスクリプトへのパス</returns> private string GetScriptPath(string scriptName) { return(Path.Combine( DirectoryNames.GetCharacterScriptDirectory(this._characterName), scriptName )); }
/// <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); }