Tutorial: タグの作り方

タグの作り方

タグの作り方というより、タグが実行する「コマンド」の作り方の方が正しいです。タグが実行する実際の動きは TagAction オブジェクトで指定します。そのコマンドを作るってことは TagAction のオブジェクトを作ることです。それは actionrules が含まれてるオブジェクトです。

アクションを作る

すごい簡単な [hello] タグを作ってみましょう。

// plugin/hello.js
Tag.actions.hello = new TagAction({
	action: function(args) {
		// ここの `args` は KAG 側の属性が入ってるオブジェクトです
		console.log("Hello from JS! "+args.name);
		return 0;
	}
});

こういう風に実行できます:

[o2_loadplugin module="hello.js"]
[hello name="Foo"] ; こういう風に属性をJSに渡します

コンソールから Hello from JS! Foo が見えるはずです。

アクションは必ず数字を返さないといけないです、上のサンプルでは return 0; をしましたが、それはタグはすぐ終わるという意味です、他の数字だと他の意味があります。

  • 0 - タグはすぐ終わる
  • 1 - タグはすぐ終わらない、終わった時システムに教えます。
  • 2 - タグは永遠に終わらない、[s]タグとか。

return 1; をしたら、システムに「このタグは終わりました」と伝える必要があります。方法は action 内で this.done() を実行することです。

例えばこれは1秒を待ったせてから進むタグです。

Tag.actions.wait_1_second = new TagAction({
	action: function(){
		setTimeout(()=> this.done(), 1000);
		return 1;
	}
});
before
[wait_1_second]
after

"before" と "after" の間に一秒がかかるはずです。

属性を設定

TagActionrules を設定したら、属性は action に渡す前にチェックと変換されます。rules をしていするメリットは変換が便利だけではなく、チェックが通さなかった場合、自動的にエラーメッセージが表示されるから、デバッグしやすいです。

例えばこれは何秒間指定されたレイヤーを隠して、そして復元するタグです。

Tag.actions.hide_then_show = new TagAction({
	rules: {

		// "LAYER" タイプにすると、属性は Layer object が入ってるオブジェクトに変わります。
		layer: {type:"LAYER", required:true},

		// 正規表現も使えます。
		page: {type:/fore|layer/, required:true},

		// デフォルトの値も指定できます。
		time: {type:"TIME", defaultValue: 1000 }
	},
	action: function(args) {
		args.layer[args.page].visible = false;

		setTimeout(()=> {
			args.layer[args.page].visible = true;
			this.done();
		}, args.time);

		return 1;
	}
});

こういう風に使えます:

[hide_then_show layer=0 page=fore]
; 問題ない

[hide_then_show layer=99999 page=blah time=2000]
; エラー、`layer` が見つからない, `page` が合わない

[hide_then_show layer=base page=back time="1:00"]
; 問題ない、"TIME" タイプは属性を"1:00"から 60000 (ms) に変換できます

o2engineがサポートしてる type は以下通りですが、自分で追加することも可能です:

  • STRING
  • BOOLEAN - "true", "false" を true/false に変換
  • INT
  • FLOAT
  • LAYER
  • IMAGE_LAYER
  • MESSAGE_LAYER
  • COLOR - "0x112233" を "#112233" に変換
  • TIME - "1:22:33" とか "1:22" を ms に変換
  • OBJECT
  • RUNNABLE (function あるいは eval される string)