/*
	画面スクリプト　選択肢

	最大選択肢数 6 個

	【入力情報】
	\0 : 選択肢数
	\100〜: ID列
	\200〜: 選択文字列を数値化した列

	$str700〜: 選択文字列

*/


////////////////////////////////
// マクロ（定数）定義
#MACRO
// 使用する変数番号
SELCNT		300		// 選択肢数
m_i			10		// ループカウンタ
m_pos		11		// セルY位置
m_size		20		// フォントサイズ
m_act		21		// フォーカス状態のセル番号(無ければ-1)
m_ec		30		// 終了コード(選択された番号)
m_sel		40		// セル位置・選択肢文字列位置を設定する選択肢No
m_reset		50		// 表示リセット状態(0:初期状態 1:表示完了 2:リセット(再描画)実行)
m_strpos	60		// 選択肢文字列のYずらし幅
m_wait		100		// 入力待ち状態(0:描画処理中 1:入力待ち状態)

// その他
SSIZE		24		// フォントサイズ
MARGIN		60		// セル間のピクセル数


////////////////////////////////
// 他スクリプトを挿入
#INCLUDE
	motion.h	// 各種オブジェクトモーションの定義


////////////////////////////////
// 予め読んでおく画像
#PRELOAD
	$str920		// セル画像


////////////////////////////////
// オブジェクト定義
#DEFINE
	PLANE	pl[6]		// 表示用プレーン（最大5個）
	BUTTON	fr1[6]		// 選択肢ボタン＆選択セル通常時画像
	STRING	str[6]		// 選択肢文字列
	IMAGE	uf			// ユーザーフォント
	IMAGE	focus[6]	// フォーカス時選択セル
	IMAGE	push[6]		// 押下時選択セル


////////////////////////////////
// オブジェクト初期化

// 基本プレーン
#OBJECT	SIZE2		PRI		DISP
pl		$str920:0	55000	0

#OBJECT	VRAM
pl[0]	1024,0
pl[1]	1024,100
pl[2]	1024,200
pl[3]	1024,300
pl[4]	1024,400
pl[5]	1024,500

// ボタン
#OBJECT	FILE	ID.0	PRI		DISP	ENABLE
fr1		$str920	100		10000	0		0

#OBJECT	FILE	ID.0	PRI		DISP	ENABLE
focus	$str920	102		11000	0		0

#OBJECT	FILE	ID.0	PRI		DISP	ENABLE
push	$str920	103		12000	0		0

#OBJECT		PL
fr1[0]		pl[0]
focus[0]	pl[0]
push[0]		pl[0]
fr1[1]		pl[1]
focus[1]	pl[1]
push[1]		pl[1]
fr1[2]		pl[2]
focus[2]	pl[2]
push[2]		pl[2]
fr1[3]		pl[3]
focus[3]	pl[3]
push[3]		pl[3]
fr1[4]		pl[4]
focus[4]	pl[4]
push[4]		pl[4]
fr1[5]		pl[5]
focus[5]	pl[5]
push[5]		pl[5]

// 選択肢文字列
#OBJECT	SIZE2		PRI		DISP
str		$str920:0	60000	0

#OBJECT		VRAM
str[0]		0,2424
str[1]		0,2524
str[2]		0,2624
str[3]		0,2724
str[4]		0,2824
str[5]		0,2924

// ユーザーフォント
#OBJECT	FILE			IDN
uf		sys_userfont	-1


// キーボード・ジョイパッド入力設定
#KEYBLOCK	1	//(w,h)	上,下,左,右
0				1,6		-1,-1,-1,-1

#OBJECT		KEYBLOCK	// (block,x,y)
fr1[0]		0,0,0
fr1[1]		0,0,1
fr1[2]		0,0,2
fr1[3]		0,0,3
fr1[4]		0,0,4
fr1[5]		0,0,5


///////////////////////////////////
// スクリプト開始
#START
	// キー入力による演出スキップOFF
	keyskip off

	// ボタン上にカーソルが無いときにキー操作が行われた時の移動先ボタン
	fr1[0] noact 0

	// 選択肢文字列レイアウト設定
	call STRLAYOUT

	// 選択肢数をセット
	// 選択肢(fselect)が実行されこのスクリプトが実行されると\0に選択肢数が入っています
	// また文字列変数$str700以降に選択肢文字列が入っています。
	// （700という数値はadv.xmlで設定されています）
	\SELCNT = \0

	// リセット状態を初期化
	\m_reset = 0

	// 選択肢位置のYシフト量
	\m_strpos = 2

	// フォントサイズ
	\m_size = SSIZE

	// フォーカスされているセル番号をセットする変数を初期化（何もフォーカスされていない）
	\m_act = -1

	// セルサイズ等の取得のため、一旦decode
	decode

	// ユーザーフォント設定
	str userfontobj	uf
	str userfont 0x8740 1
	str userfont 0x8741 2
	str userfont 0x8742 3
	str userfont 0x8743 4
	str userfont 0x8744 5
	str userfont 0x8745 6
	str userfont 0x8746 7
	str userfont 0x8747 8
	str userfont 0x8748 9

	// 選択肢設定ループ
	\m_i = 0	// ループカウンタ初期化
	next SETSEL


///////////////////////////////////
// リセット（再描画）を行う
#RESET
	str clear		// 選択肢クリア
	\m_wait = 0		// 入力待ち状態ではないので0を設定
	\m_size = SSIZE	// フォントサイズ
	\m_act = -1		// フォーカスセル無し
	\m_reset = 2	// リセット処理（最初の表示演出を行わないですぐに表示）
	wait 1

	// 選択肢設定ループ
	\m_i = 0	// ループカウンタ初期化
	next SETSEL


///////////////////////////////////
// セル設定ループ（選択肢の数だけループ）
#SETSEL
	\m_sel = \m_i	// SELPOS/SELSTR がどのセルを処理するかを設定する変数に番号をセット
	call SELPOS		// セル位置を調整
	call SELSTR		// 選択肢文字列位置調整

	// カウンタを+1
	\m_i++
	if( \SELCNT <= \m_i )	// 選択肢数分処理した場合
		wait 1
		\m_i = 0	// 次の表示処理でもループを行うので、カウンタを0に戻す
		next DISP	// 表示処理へ移行
	endif
	next SETSEL


///////////////////////////////////
// 表示処理
#DISP
	if( \m_reset == 2 )
		// リセットの場合は演出無し
		
		// セル・文字列の回転・αをリセットして表示
		str[\m_i] disp 1
		str[\m_i] rot 0 0 0
		str[\m_i] blend 255
		pl[\m_i] disp 1
		pl[\m_i] rot 0 0 0
		pl[\m_i] blend 255

		// フォーカス・押下状態画像は非表示
		focus[\m_i] disp 0
		push[\m_i] disp 0

		// 文字列描画
		str[\m_i] draw -1
		
	endif
	if( \m_reset == 0 )
		// 初回表示時

		// セル・文字列を表示
		str[\m_i] disp 1
		str[\m_i] draw -1
		pl[\m_i] disp 1

		// 横軸を中心に45度回転させて透明にしておく
		str[\m_i] rot 45 0 0
		str[\m_i] blend 0
		pl[\m_i] rot 45 0 0
		pl[\m_i] blend 0
		wait 1

		// フェードインしながら回転を元に戻す
		str[\m_i] fade 30 0 255
		str[\m_i] mrot 30 0 0 0
		pl[\m_i] fade 30 0 255
		pl[\m_i] mrot 30 0 0 0

		wait 15
	endif

	// ループ
	\m_i++
	if( \SELCNT > \m_i )	next DISP

	next DISP_END


///////////////////////////////////
// 表示終了後の処理
#DISP_END
	wait	// 表示演出が終了するまで待つ

	// 初回時は一番上のセルにカーソルを自動移動
	if( \m_reset == 0 )	automove fr1[0]

	// 表示し終わったので、リセット状態を1に
	\m_reset = 1

	// ボタン有効化
	call ENABLE_BUTTON

	// 入力待ち状態フラグをセット
	\m_wait = 1

	// 入力待ちへ
	next WAIT


///////////////////////////////////
// 入力待ち
#WAIT


///////////////////////////////////
// 選択後の終了処理
#EXIT
	// ボタン無効化
	fr1 enable 0

	// ちょっとだけ待つ
	wait 16

	// フェードアウト
	pl fade 16 255 0
	str fade 16 255 0
	wait

	// カーソルを選択肢前の元の位置に移動
	restoremove

	// 終了
	exit \m_ec
	next SLEEP


///////////////////////////////////
// 終了後のからループ
#SLEEP



///////////////////////////////////
// ボタン処理

#fr1.FOCUS
	// フォーカスセル番号退避
	\m_act = @

	// フォーカス画像が(UNFOCUSでの動作等で)まだ動いている可能性があるので強制停止
	focus[@] stop

	// フォーカスセル画像を上に被せる
	focus[@] disp 1
	focus[@] fade 10 0 255
	
	// フォントサイズを少し大きくする
	\m_size = SSIZE+3
	\m_sel = @		// SELSTRが処理するセル番号
	call SELSTR

	// 選択肢文字列を再描画
	str[\m_sel] disp 1
	str[\m_sel] draw -1


#fr1.UNFOCUS
	// フォーカスセル番号リセット
	\m_act = -1

	// フォーカス画像が(FOCUSでの動作等で)まだ動いている可能性があるので強制停止
	focus[@] stop

	// フォーカス画像をフェードアウト
	focus[@] fade 10 255 0

	// フォントサイズを元に戻す
	\m_size = SSIZE
	\m_sel = @		// SELSTRが処理するセル番号
	call SELSTR

	// 選択肢文字列を再描画
	str[\m_sel] disp 1
	str[\m_sel] draw -1


#fr1.PUSH_L
	// 選択されたセル番号
	\m_ec = @

	// 押下状態画像をフェードイン（上から被せる）
	push[@] disp 1
	push[@] fade 8 0 255

	// ボタンを無効化
	fr1 enable 0

	// 終了処理へ
	next EXIT


///////////////////////////////////
// 文字列レイアウト
#STRLAYOUT
	str reset					// まずはデフォルト設定でリセット
	str layout vdraw 1			// VRAM(文字列用プレーン)に描画する場合は1
	str layout size SSIZE		// フォントサイズ
	str layout margin 0 0 0 0	// 文字表示領域内のマージン(左,上,右,下)
	str layout frame 0			// 文字スクロールスピード（スクロール無し）


///////////////////////////////////
// セル位置を設定
#SELPOS
	// とりあえずセルを表示
	fr1[\m_sel] disp 1

	// セルの位置を計算
	\m_pos = (\SELCNT * MARGIN) / 2
	\m_pos = 200 - \m_pos
	\m_pos = \m_pos + \m_sel * MARGIN

	// セルプレーンのベース位置をセルの中心にする
	// 演出で回転を使う為
	pl[\m_sel] getsize 850 851
	pl[\m_sel] base $850/2 $851/2

	// ベース位置を設定したので、それに合わせて表示位置も設定
	pl[\m_sel] pos 800/2 \m_pos+$851/2

	// 矢印キー等が押された時などに動くカーソルの位置を設定
	fr1[\m_sel] keypos 1 100 0


///////////////////////////////////
// 選択肢文字列位置を設定
#SELSTR
	// フォントサイズ変更
	str[\m_sel] layout size \m_size

	// 文字列の位置を計算（セルの時の計算と同じ）
	\m_pos = (\SELCNT * MARGIN) / 2
	\m_pos = 200 - \m_pos
	\m_pos = \m_pos + \m_sel * MARGIN

	// 文字列プレーンのベース位置をセルの中心にする
	// 演出で回転を使う為
	str[\m_sel] getsize 850 851
	str[\m_sel] base $850/2 $851/2

	// ベース位置を設定したので、それに合わせて表示位置も設定
	str[\m_sel] pos 800/2 \m_pos+\m_strpos+$851/2

	// 選択肢文字列を$str799に取得
	// 文字列を設定するstr命令では変数番号指定に演算が使えない(+700という指定が出来ない)為
	// 799番を作業用に使用
	strvar get 799 \m_sel+700
	// そして設定
	str[\m_sel] str \pc$str799


///////////////////////////////////
// ボタン有効化
#ENABLE_BUTTON
	if( \SELCNT >= 1 )	fr1[0] enable 1
	if( \SELCNT >= 2 )	fr1[1] enable 1
	if( \SELCNT >= 3 )	fr1[2] enable 1
	if( \SELCNT >= 4 )	fr1[3] enable 1
	if( \SELCNT >= 5 )	fr1[4] enable 1
	if( \SELCNT >= 6 )	fr1[5] enable 1



/////////////////////////////////////////////////////////////////
// 以下はシステムから呼ばれる

///////////////////////////////////
// 表示リセット
#SEL_RESET
	fr1 enable 0
	\m_wait = 0
	next RESET

///////////////////////////////////
// ボタン有効・無効設定
// in : \0	0なら無効化 1なら有効化
#SEL_ENABLE
	if( \m_wait )
		if( \0 )
			call ENABLE_BUTTON
		else
			fr1 enable 0
		endif
	endif

///////////////////////////////////
// 選択中に履歴が開かれた時に呼ばれる
#SEL_ENTER_HIST
	pl stop		// 演出中止
	str stop

