kagにsetMessageLayersState()関数を追加する はじめに: 吉里吉里/KAGで、メッセージレイヤを非表示にするのをトランジションで やろっと!と思ったら、[hidemessage]タグもkag.hideMessageLayerByUser()も 表画面しか非表示にしてくれないよ!使ってるメッセージレイヤを一枚一枚 非表示にするのは面倒だよ! と思ったので、ページごとにsetMessageLayerHiddenState()を実行できる 関数をkagに追加することにしたというそんな。 使用方法: 本スクリプトはプラグインではなく寄生虫である。だもんで、まず Override.tjs 中で以下のようにして呼び出すこと。 Scripts.execStorage("setMessageLayersState.tjs"); その後、トランジションでメッセージレイヤを消すには、以下のように 実行する。 [backlay] [eval exp="kag.setMessageLayersState(%[page:'back', visible:false])"] [trans method=crossfade time=1000] [wt] メッセージレイヤを再表示するには、以下のように実行する。 [backlay] [eval exp="kag.setMessageLayersState(%[page:'back', visible:true])"] [trans method=crossfade time=1000] [wt] 非表示→再表示の間でメッセージレイヤにキー入力・マウスクリックすること は考えられていない。右クリックルーチンを作るときは、キー入力・マウス クリックをメッセージレイヤに届かないように確実に拾うよう作ること。 やってること: この寄生虫がやってることは以下四点。 簡単には、[hidemessage]タグをページごとに実行する、みたいなことを やってるんだと思っていただければ。 1. MessageLayer/CharacterLayerクラスのassign()/store()/restore()関数で メンバ変数visibleBeforeUserInvisibleとinvisibleByUserも コピーするように変更 2. MessageLayer/CharacterLayerクラスのsetHiddenStateByUser()を、 invisibleByUserフラグにあわせて隠したり表示したりするよう変更 3. KAGWindowクラスに、ページを指定してメッセージレイヤを非表示にできる setMessageLayerHiddenStatePerPage()関数を追加 これで、トランジション(=裏→表画面へのコピー)しても表示状態を保持した ままになるメッセージレイヤができた(はずな)ので、hiddenStateを変更した ままトランジションできるようになった(はず)。 関数詳細: KAGWindowクラスに以下のメンバ関数を追加する。 setMessageLayerHiddenStatePerPage(hiddenflg, page='fore', call=true) 説明: setMessageLayerHiddenState()は表裏両画面のメッセージレイヤを 非表示にするが、本関数は「裏画面のみ・表画面のみ非表示にする」。 ことが可能。ページおよびcallが指定できること以外は、本関数の 動作は既存のsetMessageLayerHiddenState()と同一である。 通常こちらはユーザからは使わない。 引数:([]は省略時のデフォルト値) hiddenflg = true|false メッセージレイヤ(とそれに付随する画像レイヤ)を非表示に するかどうか page = ['fore']|'back'|'both' どのページを非表示にするか。 call = [true]|false KAGPluginのonMessageHiddenStateChanged()を呼ぶかどうか setMessageLayersState(elm) 説明: setMessageLayerHiddenStatePerPage()を、kag.messageLayerHiding を設定したりkag.setMenuAccessibleAll()を呼んだりする、などの 副作用と共にラップする関数。通常はこちらを使う。 引数:([]は省略時のデフォルト値) elm.page = ['fore']|'back'|'both' 対象ページを指定する elm.hidden = [!elm.visible]|true|false 表示状態を指定する。elm.visibleが指定されていればその逆。 elm.visible = true|false 表示状態を指定する。 elm.hidingflag = true|false kag.messageLayerHidingフラグを設定するかどうか。 省略時は変更しない elm.callplugin = true|[false] KAGPluginの関数onMessageHiddenStateChanged()を呼ぶか どうか。デフォルトでは呼ばない。 ※elm.hidden/elm.visible=が指定された時のみ有効。 elm.callrclick = true|[false] rclickルーチンを呼ぶかどうか。デフォルトでは呼ばない。 elm.setmenu = true|[false] kag.setMenuAccessibleAll()を呼ぶかどうか。デフォルトでは 呼ばない。 その他: ・ExtSystemButton使用中なら、それも一緒に表示・非表示にする。 ・krclickのような右クリックルーチンを作るときに、メッセージレイヤが  表示されてると邪魔だなぁ、と思って、消えるときにトランジション使って  消えてくれるとカッコいい、というのが開発動機だったりする。 ・フツーに一枚一枚visible=を指定して消去・表示できるなら、そちらを  使った方がよい。ただ、この関数を使うと、「以前の表示状態を覚えた  まま」「autoHideなレイヤも一緒に」表示・非表示にできるので、あんま  考えなくて済んで楽。