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)