;=============================================================================== ;ループ表示処理プラグイン ;                        制作 : タカスガタイキ ;                        所属 : ゲーム制作サークル「LR」 ;                       サイト : http://lrlr.client.jp/ ;                       更新日 : 2014/04/18 ;                         ver : 1.0.3 ;  2014/02/05 1.0.0 作成。 ;  2014/03/06 1.0.1 loopsetに任意の引数を渡せるように改良。 ;  2014/04/18 1.0.2 count属性が、list属性で指定した配列の長さより大きい場合、 ;           配列の長さを優先してループするよう改良。 ;           親ループ内で子ループ呼び出し後、 ;           IDとvalueが子ループのものになってしまう不具合を修正。 ;        1.0.3 ↑上記親子ループの修正の結果、デグレった部分の修正。 ;=============================================================================== ;=============================================================================== ; マクロ ;=============================================================================== [macro name="loopset"] ; [dummy a=%list b=%storage c=%main d=%header e=%footer f=%index g=%count] ;このプラグインの様々な変数を格納するtf.loopsetの宣言 [eval cond="tf.loopset == void" exp="tf.loopset = %[]"] ;mp.listには、ネストすると「tf.loopset.value」が入ってくる ;なので、posの詰め替えする前に、listだけ詰めておく [if exp="mp.list == void"] [eval exp="tf.loopset.list = [];"] [eval exp="tf.loopset.list.count = mp.count;"] [else] [eval exp="&'tf.loopset.list = '+mp.list"] [endif] [eval cond="tf.loopset.ネスト管理 == void" exp="tf.loopset.ネスト管理 = []"] ;tf.loopset.posには、その階層に関する諸々の情報が入る [eval exp="tf.loopset.pos = tf.loopset.ネスト管理[tf.loopset.ネスト管理.add(new Dictionary())]"] [eval cond="tf.loopset.IDlist == void" exp="tf.loopset.IDlist = []"] [eval exp="tf.loopset.IDlist.add(0)"] [eval exp="tf.loopset.pos.配列 = tf.loopset.list"] [eval cond="mp.index == void" exp="tf.loopset.pos.index = 0"] [eval cond="mp.index != void" exp="tf.loopset.pos.index = mp.index"] [if exp="mp.count != void && mp.count <= tf.loopset.pos.配列.count"] [eval exp="tf.loopset.pos.count = mp.count"] [else] [eval exp="tf.loopset.pos.count = tf.loopset.pos.配列.count"] [endif] [eval cond="mp.storage != void" exp="tf.loopset.pos.storage = mp.storage"] [eval cond="mp.storage == void" exp="tf.loopset.pos.storage = kag.conductor.curStorage"] [eval exp="tf.loopset.pos.main = mp.main"] [eval exp="tf.loopset.pos.header = mp.header"] [eval exp="tf.loopset.pos.footer = mp.footer"] [eval exp="tf.loopset.pos.text = mp.text"] [call storage="loopset.ks" target="*top"] [endmacro] [macro name="looplink"] [eval exp=mp.str="tf.loopset.target='"+mp.target+"';"] [eval cond="mp.storage != void" exp=mp.str+="tf.loopset.storage='"+mp.storage+"';"] [eval cond="mp.storage == void" exp=mp.str+="tf.loopset.storage='"+kag.conductor.curStorage+"';"] [eval exp=mp.str+="tf.loopset.ID='"+tf.loopset.pos.ID+"';"] [eval exp=mp.str+="tf.loopset.IDsStr='"+tf.loopset.IDlist.join("_")+"';"] [eval exp=mp.str+="tf.loopset.value='"+tf.loopset.value+"';"] [eval exp="mp.target='*ID判別クッション'"] [eval exp="mp.storage='loopset.ks'"] [link * exp="&mp.str"] [endmacro] ;内部で使うマクロなので、気にしないでください [macro name="setAfterCall"] [if exp="tf.loopset.ネスト管理.count != 0"] [eval exp="tf.loopset.pos = tf.loopset.ネスト管理[tf.loopset.ネスト管理.count - 1]"] [eval exp="tf.loopset.value = tf.loopset.pos.配列[tf.loopset.pos.ID]"] [eval exp="tf.loopset.ID = tf.loopset.pos.ID"] [endif] [endmacro] [return] ;=============================================================================== ; サブルーチン ;=============================================================================== *top [eval exp="tf.loopset.pos.ID = tf.loopset.pos.index"] *header [call cond="tf.loopset.pos.storage != void && tf.loopset.pos.header != void" storage="&tf.loopset.pos.storage" target="&tf.loopset.pos.header"] [setAfterCall] [jump cond="tf.loopset.pos.配列.count == 0" target="*footer"] *loop [eval exp="tf.loopset.ID = tf.loopset.pos.ID"] [eval exp="tf.loopset.value = tf.loopset.pos.配列[tf.loopset.pos.ID]"] [emb exp="tf.loopset.pos.text"] [call cond="tf.loopset.pos.storage != void && tf.loopset.pos.main != void" storage="&tf.loopset.pos.storage" target="&tf.loopset.pos.main"] [setAfterCall] ;inc [eval exp="tf.loopset.pos.ID++"] [eval exp="tf.loopset.IDlist[tf.loopset.IDlist.count-1] = tf.loopset.pos.ID"] [jump cond="tf.loopset.pos.ID < tf.loopset.pos.count" target="*loop"] *footer [call cond="tf.loopset.pos.storage != void && tf.loopset.pos.footer != void" storage="&tf.loopset.pos.storage" target="&tf.loopset.pos.footer"] [eval exp="tf.loopset.ネスト管理.pop()"] [eval exp="tf.loopset.IDlist.erase(tf.loopset.IDlist.count -1)"] [setAfterCall] [return] *ID判別クッション [eval exp="tf.loopset.IDs = (new Array()).split('_',tf.loopset.IDsStr)"] [jump storage="&tf.loopset.storage" target="&tf.loopset.target"]