オリジナルコマンドの作成
独自のコマンドを作成して任意の処理を追加することができます
using System;
using System.Collections;
using Newtonsoft.Json;
// 必須定義
[Serializable]
[JsonConverter(typeof(JNJsondConverter))]
//JNCommandを継承
public class SampleCommand : JNCommand
{
//オリジナルパラメーター
public string originalParam = String.Empty;
//コンストラクタはマクロ定義からの読み込み処理でコールされないケースがあるので使用しないこと
//コマンド実行直前の初期化
public override void Awake(IJNView view)
{
//Engineに登録しているViewが渡されるので、キャストで独自のViewが利用可能
var originalView = view as OriginalView;
}
//リソースの読み込み等を行う
public override IEnumerator AwakeCoroutine()
{
yield break;
}
//コマンドの本処理
public override void Execute()
{
//コルーチンを使用したい場合はJNCommandではなくJNCoroutineCommandを継承することで
//public virtual IEnumerator ExecuteCoroutine()が使用できる
JNDebugLog.Log("Executed the command");
}
//コマンドの終了処理
public override void End()
{
}
}
エンジンとの連携について
こちらにある各種インターフェースをコマンドクラスに実装することで
エンジンとの連携や、コマンドにTweenパラメータを付与することができます。
コンバーターの作成
Newtonsoft.Jsonの仕様に沿って、Jsonコンバーターを作成する
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class SampleConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(IJNJsonConvert);
}
public override bool CanRead { get { return true; } }
public override bool CanWrite { get { return false; } }
// JSONデータからインスタンスを作成
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// JSON Read
JObject jobject = JObject.Load(reader);
var targetType = jobject[JNConst.COMMAND_TYPE_PARAM_KEY].ToString();
//targetTypeから変換する型を特定して、デシリアライズして返却する
switch (targetType)
{
//Jsonにおける定義名称は自由に設定
case nameof(SampleCommand):
case "TestCommand":
return jobject.ToObject();
//独自コマンドを増やす場合は、定義を増やす
case nameof(SampleCommand2):
case "TestCommand2":
return jobject.ToObject();
default:
throw new NotSupportedException("コンバート失敗");
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
コンバーターの省略
次項のコンバーターの登録に記載してあるように、簡易的にデリゲートでコンバートを定義する場合、
このコンバータークラスの作成は不要になります
コンバーターの登録
作成したコンバーターをエンジンに登録する
void Start()
{
//独自のコマンドのコンバーターを登録する
JNJsonConverter.OriginalConverter = new SampleConverter();
//Engine SetUp...
//Engine Start...
}
void Start()
{
//コンバータークラスを作らず、簡易的にデリゲートでコンバートを定義できる
//JNJsonConverter.OriginalConverter = new SampleConverter();
JNJsonConverter.OriginalConvertDelegate = (str, obj) =>
{
switch (str)
{
case "TestCommand":
return obj.ToObject();
default:
return null;
}
};
//Engine SetUp...
//Engine Start...
}
シナリオで使用する
作成したコマンドをシナリオファイルで定義し、使用する
{
"name" : "sample_original",
"scenario":[
{
"commands": [
{
/* Original Param */
"originalParam": "value",
"type": "TestCommand"
}
]
}
]
}