/// <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; } }
public ScriptUpdateSettingViewModel(IScriptUpdateSetting setting) { UpdateEnabled = setting.UpdateEnabled; PropertyChanged += (_, __) => setting.UpdateEnabled = UpdateEnabled; PropertyChangedEventManager.AddHandler( setting, (_, __) => UpdateEnabled = setting.UpdateEnabled, nameof(UpdateEnabled) ); }