/*
	画面スクリプトサンプル
	MUSICモード
*/

#INCLUDE
	motion.h


///////////////////////////////////////
// 先読みファイル定義 (イメージのみ)
#PRELOAD
	sys_musicmode	// メイン画像


///////////////////////////////////////
// オブジェクト作成
#DEFINE
	CPLANE		topmask			// ホワイトIN/OUT用の真っ白プレーン
	CIMAGE		bg_white		// 他画面との切り替えの際に白画面で繋ぐための白画像

	PLANE		pl				// 表示用プレーン

	IMAGE		img_bg			// 背景画像

	BUTTON		btn_track[12]	// トラックリストボタン

	BUTTON		btn_ctrl[4]		// コントロールパネルボタン
	BUTTON		btn_repeat		// リピートボタン
	BUTTON		btn_all_repeat	// オールリピートボタン
	BUTTON		btn_shuffle		// シャッフルボタン

	IMAGE		img_ctrl_track	// コントロールパネル内の再生中トラック名

	BUTTON		btn_sys[5]		// システム系ボタン
	IMAGE		img_help		// ヘルプ文章画像

	SNDTABLE	bgm				// サウンドテーブル

	SLIDER		vol				// ボリュームスライダー



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

// 真っ白プレーン
#OBJECT		COLOR		PRI		SIZE		DISP
topmask		0xffffffff	20000	1280,720	1

// 真っ白画像
#OBJECT		COLOR		PRI		SIZE		DISP	PL
bg_white	0xffffffff	1000	1280,720	0		pl

// 表示用プレーン
#OBJECT	SIZE		VRAM	PRI		DISP
pl		1280,720	0,0		5000	0

// 背景
#OBJECT		FILE			ID.0	PRI	DISP
img_bg		sys_musicmode	0		10	1

// トラックリストボタン
#OBJECT		FILE			PRI	DISP	PL	ENABLE
btn_track	sys_musictrack	200	1		pl	0

#OBJECT			POS2				ID.0	ID.1	ID.2	ID.3
btn_track[0]	sys_musicmode:1000	0		100		200		300
btn_track[1]	sys_musicmode:1001	1		101		201		301
btn_track[2]	sys_musicmode:1002	2		102		202		302
btn_track[3]	sys_musicmode:1003	3		103		203		303
btn_track[4]	sys_musicmode:1004	4		104		204		304
btn_track[5]	sys_musicmode:1005	5		105		205		305
btn_track[6]	sys_musicmode:1006	6		106		206		306
btn_track[7]	sys_musicmode:1007	7		107		207		307
btn_track[8]	sys_musicmode:1008	8		108		208		308
btn_track[9]	sys_musicmode:1009	9		109		209		309
btn_track[10]	sys_musicmode:1010	10		110		210		310
btn_track[11]	sys_musicmode:1011	11		111		211		311

// コントロールパネルボタン
#OBJECT			FILE			PRI	PL	ENABLE	DISP
btn_ctrl		sys_musicmode	300	pl	0		1
btn_repeat		sys_musicmode	310	pl	0		1
btn_all_repeat	sys_musicmode	320	pl	0		1
btn_shuffle		sys_musicmode	330	pl	0		1

#OBJECT			ID.0	ID.1	ID.2	ID.3
btn_ctrl[0]		610		611		612		613		// 前へ
btn_ctrl[1]		620		621		622		623		// 停止
btn_ctrl[2]		630		631		632		633		// 再生
btn_ctrl[3]		640		641		642		643		// 次へ
btn_repeat		650		651		652		653		// リピート
btn_all_repeat	660		661		662		663		// オールリピート
btn_shuffle		670		671		672		673		// シャッフル

// コントロールパネル内の再生中トラック名
#OBJECT			FILE			POS2				PRI	DISP	PL
img_ctrl_track	sys_musictrack	sys_musicmode:600	400	0		pl


// システム系ボタン
#OBJECT	FILE			PRI	PL	ENABLE	DISP
btn_sys	sys_musicmode	50	pl	0		1

#OBJECT		ID.0	ID.1	ID.2	ID.3
btn_sys[0]	100		200		300		400
btn_sys[1]	101		201		301		401
btn_sys[2]	102		202		302		402
btn_sys[3]	103		203		303		403
btn_sys[4]	104		204		304		404

// ヘルプ文章画像
#OBJECT		FILE			ID.0	PRI	PL	DISP
img_help	sys_musicmode	510		100	pl	0


#OBJECT		GROUP	STYPE	SIZE	TYPE
bgm			bgm		0		12		1

#OBJECT		FILE			POS2				PRI
vol			sys_ex_slider	sys_musicmode:601	70



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

#OBJECT			KEYBLOCK	// (block,x,y)
btn_ctrl[0]		0,0,0		// コントロールパネルボタン
btn_ctrl[1]		0,1,0
btn_ctrl[2]		0,2,0
btn_ctrl[3]		0,3,0

btn_repeat		1,0,0		// リピートボタン
btn_all_repeat	1,0,1		// オールリピートボタン
btn_shuffle		1,0,2		// シャッフルボタン

btn_track[0]	2,0,0		// トラックリストボタン
btn_track[1]	2,0,1
btn_track[2]	2,0,2
btn_track[3]	2,0,3
btn_track[4]	2,0,4
btn_track[5]	2,0,5

btn_track[6]	2,1,0
btn_track[7]	2,1,1
btn_track[8]	2,1,2
btn_track[9]	2,1,3
btn_track[10]	2,1,4
btn_track[11]	2,1,5

btn_sys[0]		3,0,0
btn_sys[1]		3,1,0
btn_sys[2]		3,2,0
btn_sys[3]		3,3,0

btn_sys[4]		4,0,0


////////////////////////////////
// スクリプトスタート
#START
	////////////////////////////////
	// 各種設定
	////////////////////////////////

	// サウンドテーブルを設定
	bgm sndtbl 00 bgm01 1
	bgm sndtbl 01 bgm01 1
	bgm sndtbl 02 bgm01 1
	bgm sndtbl 03 bgm01 1
	bgm sndtbl 04 bgm01 1
	bgm sndtbl 05 bgm01 1
	bgm sndtbl 06 bgm01 1
	bgm sndtbl 07 bgm01 1
	bgm sndtbl 08 bgm01 1
	bgm sndtbl 09 bgm01 1
	bgm sndtbl 10 bgm01 1
	bgm sndtbl 11 bgm01 1

	// 選択中のトラックNo
	\200 = 0			// 初期値は0(Track_01)
	bgm setid \200		// 現在のトラックNoをテーブルに設定

	// ボリューム値を取得
	config 850 vol_bgm
	\400 = $850			// \400 = ボリューム値

	// ボリュームスライダーを設定
	vol page 0 100		// ボリューム値は0〜100
	vol pos \400		// 現在の位置を設定
	vol disp 1			// スライダーを表示

	// 『MUSICモード』ボタンの表示を押下状態にする
	btn_sys[2] setid 3

	// カーソルがボタン以外の場所にあった時に矢印キーが押された場合の
	// 移動先ボタンの設定
	btn_track[0] noact

	// キー入力による演出スキップをOFF
	keyskip off
	wait

	// 表示処理へ
	next DISP


////////////////////////////////
// 表示処理
#DISP
	// 画面を表示
	pl disp 1				// 表示用プレーンを表示して
	topmask fade 30 255 0	// 上に被せていた白プレーンをフェードアウト
	wait

	// 他画面からの切り替え時に黒画面にならないように敷いていたベースイメージを
	// リセット（消す）
	baseimg

	// 選曲中のトラックを押下状態に設定
	btn_track[\200] setid 3


	// 各種ボタンを有効化
	btn_track enable 1		// トラックリストボタン
	btn_ctrl enable 1		// コントロールパネルボタン
	btn_repeat enable 1		// リピートボタン
	btn_all_repeat enable 1	// オールリピートボタン
	btn_shuffle enable 1	// シャッフルボタン
	btn_sys enable 1		// システム系ボタン
	btn_sys[2] enable 0		// MUSICモードボタンは無効にする

	next SEL_WAIT	// 入力待ちへ


////////////////////////////////
// 入力待ちループ
#SEL_WAIT
	// 右クリックされたら終了
	if( _CLICK_R_ != 0 )		next EXIT


///////////////////////////
// 全てのボタンを無効化
#DISABLE_BUTTON
	btn_track enable 0		// トラックリストボタン
	btn_ctrl enable 0		// コントロールパネルボタン
	btn_repeat enable 0		// リピートボタン
	btn_all_repeat enable 0	// オールリピートボタン
	btn_shuffle enable 0	// シャッフルボタン
	btn_sys enable 0		// システム系ボタン


///////////////////////////
// MUSICモード終了
#EXIT
	// 全てのボタンを無効化
	call DISABLE_BUTTON

	// ホワイトアウト
	topmask disp 1
	topmask fade 30 0 255
	wait
	
	// 画面切り替え時に画面が黒くなるのを防ぐため、ベースイメージを設定
	baseimg bg_white

	// 終了（タイトルに戻る）
	exit -2
	next SLEEP


///////////////////////////
// ゲーム終了（終了ボタン）
#QUIT
	// 終了確認ダイアログを実行
	$860 = 0
	execfes conf
	next QUIT_WAIT


///////////////////////////
// ゲーム終了確認待ち
#QUIT_WAIT
	if( _EXITCODE_ == 1 )
		call DISABLE_BUTTON		// すべてのボタンを無効化
		endfes		// ダイアログスクリプト終了
		next QUIT2	// ゲーム終了処理へ
	endif
	if( _EXITCODE_ == 0 )
		endfes			// ダイアログスクリプト終了
		resetactive		// ボタン再アクティブ化
		next SEL_WAIT	// 入力待ちへ戻る
	endif


///////////////////////////
// ゲーム終了2
#QUIT2
	// フェードアウトしてゲーム終了
	pl fade 30 255 0
	wait

	// 終了コード-3でゲーム終了
	exit -3
	next SLEEP


///////////////////////////
// スクリプト終了後の空ループ
#SLEEP


///////////////////////////
// ヘルプを表示  \0=ID
#HELP
	img_help settbl 0 \0		// ID.0 を書き換えて・・・
	img_help setid 0			// ID.0 に変更
	img_help disp 1				// ヘルプを表示


///////////////////////////
// 選曲中のトラックをコントロールパネルに表示
#TRACK
	img_ctrl_track settbl 0 \200	// テーブル0(ID.0)を書き換えて
	img_ctrl_track setid 0			// 表示IDを再設定
	img_ctrl_track disp 1			// そして表示


///////////////////////////
// 現在のトラックをハイライト表示
#SEL_TRACK
	// 前のトラックを通常の画像に変更
	btn_track[\200] setid 0

	// 押された時の画像に変更
	btn_track[\0] setid 3

	// 選択中トラックを更新
	\200 = \0


////////////////////////////////////////////////////////////
// モード変更各種

///////////////////////////
// CGモードへ
#GO_CG
	// 全てのボタンを無効化
	call DISABLE_BUTTON
	wait

	// ホワイトアウト
	topmask fade 30 0 255
	wait

	// 画面切り替え時に画面が黒くなるのを防ぐため、ベースイメージを設定
	baseimg bg_white
	wait

	// 終了コードを『CGモードへ移行』に設定して終了
	exit 10
	next SLEEP


///////////////////////////
// 回想モードへ
#GO_SCENE
	// 全てのボタンを無効化
	call DISABLE_BUTTON
	wait

	// ホワイトアウト
	topmask fade 30 0 255
	wait

	// 画面切り替え時に画面が黒くなるのを防ぐため、ベースイメージを設定
	baseimg bg_white
	wait

	// 終了コードを『回想モードへ移行』に設定して終了
	exit 11
	next SLEEP


////////////////////////////////////////////////////////////
// 再生制御

///////////////////////////
// 再生
#PLAY
	bgm setid \200	// 再生するトラックを設定
	bgm play 1		// 再生
	\300 = 1		// 再生中フラグを立てる

	btn_ctrl[2] setid 3		// 再生ボタンを押下状態に変更

	call TRACK		// 『再生中の曲名』にトラック名を表示


///////////////////////////
// 停止
#STOP
	bgm stop		// 再生停止
	\300 = 0		// 再生中フラグをOFF

	btn_ctrl[2] setid 0		// 再生ボタンを通常状態に変更

	img_ctrl_track disp 0	// 『再生中の曲名』のトラック名を消す


///////////////////////////
// １つ前のトラック
#PREV
	bgm rev			// 前に戻す

	bgm getid 850	// トラックNoを取得
	\0 = $850
	call SEL_TRACK	// トラックリストを選択

	// 再生中の場合
	if( \300 )
		bgm play 1	// 再生
		call TRACK	// 『再生中の曲名』にトラック名を表示
	endif


///////////////////////////
// 次のトラック
#NEXT
	bgm next		// 次に進む

	bgm getid 850	// トラックNoを取得
	\0 = $850
	call SEL_TRACK	// トラックリストを選択

	// 再生中の場合
	if( \300 )
		bgm play 1	// 再生
		call TRACK	// 『再生中の曲名』にトラック名を表示
	endif


///////////////////////////
// １曲リピート
#REPEAT
	// リピートON ⇔ OFF 入れ替え
	\301 = 1 - \301


///////////////////////////
// オールリピート
#ALL_REPEAT
	// オールリピートON ⇔ OFF 入れ替え
	\302 = 1 - \302
	// リピート設定をオブジェクトに設定
	bgm repeat \302


///////////////////////////
// シャッフル
#SHUFFLE
	// シャッフルON ⇔ OFF 入れ替え
	\303 = 1 - \303
	if( \303 )
		// シャッフルONの場合
		if( \300 )
			// 再生中の場合は現在のトラックが先頭になるようにシャッフル
			bgm shuffle 1 \200
		else
			// 停止中の場合は先頭トラックを指定しない(-1)でシャッフル
			bgm shuffle 1 -1
			// 現在のトラックNoを取得
			bgm getid 850
			\200 = $850
			call TRACK	// トラックリスト選択を現在のものに変更
		endif
	else
		// シャッフルOFF
		bgm shuffle 0
	endif


////////////////////////////////////////////////////////////
// ボタンまわりの処理

///////////////////////////
// システム系ボタン

// カーソルが乗った時の処理
#btn_sys.FOCUS
	// フォーカス用画像に切り替え
	@ setid 2
	
	// ヘルプ表示
	\0 = 500+@
	call HELP

// カーソルが離れた時の処理
#btn_sys.UNFOCUS
	// フォーカス用画像から元に戻す
	@ setid 0
	
	// ヘルプを消す
	img_help disp 0

// 押された時の処理
#btn_sys.PUSH_L
	// 押された時の画像に変更
	@ setid 3
	if( @ == 0 )	next GO_CG		// [GRAPHIC]ボタン
	if( @ == 1 )	next GO_SCENE	// [SCENE]ボタン
	if( @ == 3 )	next EXIT	// 戻るボタン
	if( @ == 4 )	next QUIT	// 終了ボタン


///////////////////////////
// トラックボタン

// カーソルが乗った時の処理
#btn_track.FOCUS
	if( \200 != @ )
		// フォーカス用画像に切り替え
		@ setid 2
	endif
	
	// ヘルプ表示
	\0 = 523
	call HELP

// カーソルが離れた時の処理
#btn_track.UNFOCUS
	if( \200 != @ )
		// フォーカス用画像から元に戻す
		@ setid 0
	endif
	
	// ヘルプを消す
	img_help disp 0

// 押された時の処理
#btn_track.PUSH_L
	// 『再生中の曲名』にトラック名を表示
	\0 = @		// \0はトラックNo
	call SEL_TRACK

	// 再生する
	call PLAY


///////////////////////////
// コントロールパネルボタン

// カーソルが乗った時の処理
#btn_ctrl.FOCUS
	// フォーカス用画像に切り替え
	if( @ == 2 && \300 )
		@ setid 3	// [PLAY]ボタンでかつ再生中の時は押下状態のままにする
	else
		@ setid 2	// それ以外はフォーカス画像にする
	endif

	// ヘルプ表示
	\0 = 525+@
	call HELP

// カーソルが離れた時の処理
#btn_ctrl.UNFOCUS
	// フォーカス用画像から元に戻す
	if( @ == 2 && \300 )
		@ setid 3	// [PLAY]ボタンでかつ再生中の時は押下状態のままにする
	else
		@ setid 0	// それ以外は戻す
	endif
	
	// ヘルプを消す
	img_help disp 0

// 押された時の処理
#btn_ctrl.PUSH_L
	// 押された時の画像に変更
	@ setid 3

	// 押されたボタンによって処理を変える
	if( @ == 0 )	call PREV	// 前に戻る
	if( @ == 1 )	call STOP	// 停止
	if( @ == 2 )	call PLAY	// 再生
	if( @ == 3 )	call NEXT	// 次に進む

// 離された時の処理
#btn_ctrl.RELEASE_L
	// ボタン画像から元に戻す
	if( @ == 2 && \300 )
		@ setid 3	// [PLAY]ボタンでかつ再生中の時は押下状態のままにする
	else
		@ setid 2	// それ以外は戻す
	endif


///////////////////////////
// リピートボタン

// カーソルが乗った時の処理
#btn_repeat.FOCUS
	// フォーカス用画像に切り替え
	if( \301 == 0 )	@ setid 2

	// ヘルプ表示
	\0 = 520
	call HELP

// カーソルが離れた時の処理
#btn_repeat.UNFOCUS
	// フォーカス用画像から元に戻す
	if( \301 == 0 )	@ setid 0
	
	// ヘルプを消す
	img_help disp 0

// 押された時の処理
#btn_repeat.PUSH_L
	// 押された時の画像に変更
	@ setid 3
	call REPEAT	// リピート処理実行

// 離された時の処理
#btn_repeat.RELEASE_L
	// 離された時の画像に変更
	if( \301 == 0 )	@ setid 2


///////////////////////////
// オールリピートボタン

// カーソルが乗った時の処理
#btn_all_repeat.FOCUS
	// フォーカス用画像に切り替え
	if( \302 == 0 )	@ setid 2

	// ヘルプ表示
	\0 = 521
	call HELP

// カーソルが離れた時の処理
#btn_all_repeat.UNFOCUS
	// フォーカス用画像から元に戻す
	if( \302 == 0 )	@ setid 0
	
	// ヘルプを消す
	img_help disp 0

// 押された時の処理
#btn_all_repeat.PUSH_L
	// 押された時の画像に変更
	@ setid 3
	call ALL_REPEAT		// オールリピート処理実行

// 離された時の処理
#btn_all_repeat.RELEASE_L
	// 離された時の画像に変更
	if( \302 == 0 )	@ setid 2


///////////////////////////
// シャッフルボタン

// カーソルが乗った時の処理
#btn_shuffle.FOCUS
	// フォーカス用画像に切り替え
	if( \303 == 0 )	@ setid 2

	// ヘルプ表示
	\0 = 522
	call HELP

// カーソルが離れた時の処理
#btn_shuffle.UNFOCUS
	// フォーカス用画像から元に戻す
	if( \303 == 0 )	@ setid 0
	
	// ヘルプを消す
	img_help disp 0

// 押された時の処理
#btn_shuffle.PUSH_L
	// 押された時の画像に変更
	@ setid 3

	call SHUFFLE	// シャッフル処理実行

// 離された時の処理
#btn_shuffle.RELEASE_L
	// 離された時の画像に変更
	if( \303 == 0 )	@ setid 2


///////////////////////////
// ボリュームスライダー
#vol.SCRL_P
	vol getpos 850	// 現在のスライダーの位置を取得
	\400 = $850

	bgm blend \400	// ボリュームを変更


////////////////////////////////////////////////////////////
// サウンドテーブルオブジェクトから呼ばれる処理

///////////////////////////
// 停止（曲が最後まで再生された時に呼ばれる）
#bgm.STOP
	if( \301 )
		// １曲リピートの場合
		bgm play 1	// もう一度再生する
	else
		// それ以外の場合
		bgm next		// 次の曲へ
		bgm getid 850	// トラックNoを取得
		if( $850 == \200 && \302 == 0 )
			// 同じトラックでオールリピートでは無い場合 ＝ 最後まで再生された
			// → 再生を停止
			call STOP
		else
			// 最後まで再生していない、又はオールリピートの場合は再生
			\0 = $850
			call SEL_TRACK	// トラックリストの選択状態を次のトラックに変更
			call PLAY		// 再生
		endif
	endif



