/// <summary> /// Initializes a new instance of the <see cref="T:UnityNRuntime"/> class. /// </summary> /// <param name="assets">スクリプト アセット。</param> /// <param name="errorCommand">エラー時の出力に使用するNovel コマンド。</param> public UnityNRuntime(IEnumerable <TextAsset> assets, UnityNCommand errorCommand) { commands = new Dictionary <string, UnityNCommand>(); // combined text asset Reload(assets); outErr = errorCommand; goSubStack = new Stack <int>(); #region 組み込みコマンド登録 commands["goto"] = Goto; commands["debug"] = Debug; commands["wait"] = Wait; commands["end"] = End; commands["gosub"] = Gosub; commands["return"] = Return; #endregion }
/// <summary> /// Novel コマンドの登録を行います. /// </summary> /// <returns>このインスタンスをそのまま返します.これによってメソッドチェーンが可能です.</returns> /// <param name="name">Name.</param> /// <param name="command">Command.</param> public UnityNRuntime Register(string name, UnityNCommand command) { // 申し訳ないが重複はNG. if (commands.ContainsKey(name)) { throw new ArgumentException($"The command name {name} is duplicated."); } #region NullCheck NullCheck(name); NullCheck(command); // 通る場合,それは通常ならありえない挙動.クラスのバグか,リフレクション等の不正アクセス,またはランタイムのバグ. if (commands == null) { throw new InvalidOperationException("bug: Command Dictionary is null"); } #endregion commands.Add(name, command); return(this); }