/// <summary> /// 起動後にモデルの動作を開始します。 /// NOTE: エントリポイント的に動作する /// </summary> private void Initialize(IMainWindow mainWindow) { string characterName = CommonSettingRecord.Load().CharacterName; CharacterSetting = CharacterSetting.Load(characterName); _characterOperator = new HarrietCharacterOperator( characterName, mainWindow, CharacterSetting.CharacterAppearance ); _scriptingOperator = new ScriptingOperator( characterName, mainWindow, _characterOperator.Character, CharacterSetting ); Observable.FromEventPattern <EventArgs>(_scriptingOperator, nameof(_scriptingOperator.Initialized)) .Take(1) .Subscribe(_ => _timer.Start()); Observable.FromEventPattern <EventArgs>(_scriptingOperator, nameof(_scriptingOperator.Closed)) .Take(1) .Subscribe(_ => mainWindow.Close()); _scriptingOperator.Start(); //タイマーは初期化スクリプトが読み終わってから稼働開始するのでここでは放置 //_timer.Start(); }
/// <summary>APIの処理を実際に担当できるサブモジュールを用いてインスタンスを初期化します。</summary> /// <param name="window">キャラ表示ウィンドウ</param> /// <param name="character">実際のキャラクター</param> /// <param name="voiceOperator">発声処理器</param> /// <param name="chatWindow">チャット枠</param> /// <param name="requestor">スクリプト実行要求器</param> /// <param name="setting">設定事項</param> /// <param name="characterName">キャラクター名</param> public ScriptApi( IMainWindow window, IHarrietCharacter character, IVoiceOperator voiceOperator, IChatWindowModel chatWindow, IScriptRequestor requestor, CharacterSetting setting, IScriptApiSetting scriptApiSetting, string characterName ) { this.Window = window; this.Character = character; this._voiceOperater = voiceOperator; this.ChatWindow = chatWindow; this.CharacterName = characterName; this.Setting = new SettingWindowViewModel(setting); this.ScriptRequest = requestor; _keyboardHook = new KeyboardHook(OnKeyboardUpDown); ////プラグインがあったら拾い、無かったら無視 //try //{ // TextConverter = TextToPronounceConverterLoader.Load().FirstOrDefault() ?? // new ImeTextConverter(); //} //catch(Exception) //{ // TextConverter = new ImeTextConverter(); //} _scriptApiSetting = scriptApiSetting; }
/// <summary> /// 起動後にモデルの動作を開始します。 /// NOTE: エントリポイント的に動作する /// </summary> private void Initialize(IMainWindow mainWindow) { string characterName = CommonSettingRecord.Load().CharacterName; CharacterSetting = CharacterSetting.Load(characterName); _characterOperator = new HarrietCharacterOperator( characterName, mainWindow, CharacterSetting.CharacterAppearance ); _scriptingOperator = new ScriptingOperator( characterName, mainWindow, _characterOperator.Character, CharacterSetting ); Observable.FromEventPattern<EventArgs>(_scriptingOperator, nameof(_scriptingOperator.Initialized)) .Take(1) .Subscribe(_ => _timer.Start()); Observable.FromEventPattern<EventArgs>(_scriptingOperator, nameof(_scriptingOperator.Closed)) .Take(1) .Subscribe(_ => mainWindow.Close()); _scriptingOperator.Start(); //タイマーは初期化スクリプトが読み終わってから稼働開始するのでここでは放置 //_timer.Start(); }
public ScriptingOperator( string characterName, IMainWindow mainWindow, IHarrietCharacter character, CharacterSetting setting) { _characterName = characterName; _mainWindow = mainWindow; _character = character; _setting = setting; Initialize(); }
/// <summary>モデルの設定一覧から設定画面のビューモデルを初期化します。</summary> /// <param name="modelSetting">モデル側の設定</param> public SettingWindowViewModel(CharacterSetting setting) { Voice = new VoiceViewModel(setting.Voice); ChatWindowText = new ChatWindowTextViewModel(setting.ChatWindowText); ChatWindowColor = new ChatWindowColorViewModel(setting.ChatWindowColor); ChatWindowLayout = new ChatWindowLayoutViewModel(setting.ChatWindowLayout); ShownCharacterName = new ShownCharacterNameViewModel(setting.ShownCharacterName); CharacterAppearance = new CharacterAppearanceViewModel(setting.CharacterAppearance); ScriptApi = new ScriptApiSettingViewModel(setting.ScriptApi); ScriptUpdate = new ScriptUpdateSettingViewModel(setting.ScriptUpdate); ScriptRoutine = new ScriptRoutineSettingViewModel(setting.ScriptRoutine); Nadenade = new NadeSettingViewModel(setting.Nadenade); CharacterName = setting.CharacterName; }
/// <summary>ファイルから設定を読み込むか、既定の設定を取得します。</summary> /// <returns>設定一覧</returns> internal static CharacterSetting Load(string characterName) { string path = GetSettingFilePath(characterName); try { using (var xr = XmlReader.Create(path)) { var serializer = new DataContractSerializer(typeof(CharacterSetting)); CharacterSetting result = serializer.ReadObject(xr) as CharacterSetting; result.CharacterName = characterName; return(result); } } catch (Exception) { //例外はファイルが無い、またはセーブ時のなんかの不具合によって生じる return(CreateDefault(characterName)); } }
/// <summary>デフォルト設定を生成します。</summary> /// <param name="characterName">生成対象となるキャラの名前</param> /// <returns>キャラ名を包含したデフォルト設定</returns> internal static CharacterSetting CreateDefault(string characterName) { var result = new CharacterSetting(); result.CharacterName = characterName; result.CharacterAppearance = new CharacterAppearanceSetting(); result.Voice = new VoiceSetting(); result.ChatWindowText = new ChatWindowTextSetting(); result.ChatWindowColor = new ChatWindowColorSetting(); result.ChatWindowLayout = new ChatWindowLayoutSetting(); result.ShownCharacterName = new ShownCharacterNameSetting(); result.ScriptApi = new ScriptApiSetting(); result.ScriptRoutine = new ScriptRoutineSetting(); result.ScriptUpdate = new ScriptUpdateSetting(); result.Nadenade = new NadeSetting(); return(result); }
/// <summary>デフォルト設定を生成します。</summary> /// <param name="characterName">生成対象となるキャラの名前</param> /// <returns>キャラ名を包含したデフォルト設定</returns> internal static CharacterSetting CreateDefault(string characterName) { var result = new CharacterSetting(); result.CharacterName = characterName; result.CharacterAppearance = new CharacterAppearanceSetting(); result.Voice = new VoiceSetting(); result.ChatWindowText = new ChatWindowTextSetting(); result.ChatWindowColor = new ChatWindowColorSetting(); result.ChatWindowLayout = new ChatWindowLayoutSetting(); result.ShownCharacterName = new ShownCharacterNameSetting(); result.ScriptApi = new ScriptApiSetting(); result.ScriptRoutine = new ScriptRoutineSetting(); result.ScriptUpdate = new ScriptUpdateSetting(); result.Nadenade = new NadeSetting(); return result; }