
--ホストガールの定義
HG = {}
HG["AMANE"]    = 0
HG["MIO"]      = 1
HG["SETU"]     = 2
HG["REIKA"]    = 3
HG["MIAN"]     = 4
HG["RUI"]      = 5
HG["RIHO"]     = 6
HG["NAO"]      = 7
HG["MARI"]     = 8
HG["AIRI"]     = 9
HG["HARUKA"]   = 10
HG["NONONO"]   = 11
HG["ASUKA"]    = 12
HG["KARIA"]    = 13
HG["MOEGI"]    = 14
HG["SAYLA"]    = 15
HG["MIYABI"]   = 16
HG["NOKO"]     = 17
HG["OUKA"]     = 18
HG["MITSUKI"]  = 19
HG["CHIRI"]    = 20
HG["RINRIN"]   = 21
HG["ANGE"]     = 22

--表情パターンのマッピング
HostGirlFaceRemap = {}
HostGirlFaceRemap[HG["AMANE"]   ] = HG["KARIA"]
HostGirlFaceRemap[HG["MIO"]     ] = HG["MITSUKI"]
HostGirlFaceRemap[HG["SETU"]    ] = HG["CHIRI"]
HostGirlFaceRemap[HG["REIKA"]   ] = HG["MIYABI"]
HostGirlFaceRemap[HG["MIAN"]    ] = HG["NOKO"]
HostGirlFaceRemap[HG["RUI"]     ] = HG["OUKA"]
HostGirlFaceRemap[HG["RIHO"]    ] = HG["MOEGI"]
HostGirlFaceRemap[HG["NAO"]     ] = HG["SAYLA"]
HostGirlFaceRemap[HG["MARI"]    ] = HG["RINRIN"]
HostGirlFaceRemap[HG["AIRI"]    ] = HG["ANGE"]
HostGirlFaceRemap[HG["HARUKA"]  ] = HG["SAYLA"]
HostGirlFaceRemap[HG["NONONO"]  ] = HG["CHIRI"]
HostGirlFaceRemap[HG["ASUKA"]   ] = HG["NOKO"]
HostGirlFaceRemap[HG["KARIA"]   ] = HG["AMANE"]
HostGirlFaceRemap[HG["MOEGI"]   ] = HG["MIO"]
HostGirlFaceRemap[HG["SAYLA"]   ] = HG["HARUKA"]
HostGirlFaceRemap[HG["MIYABI"]  ] = HG["REIKA"]
HostGirlFaceRemap[HG["NOKO"]    ] = HG["RIHO"]
HostGirlFaceRemap[HG["OUKA"]    ] = HG["RUI"]
HostGirlFaceRemap[HG["MITSUKI"] ] = HG["ASUKA"]
HostGirlFaceRemap[HG["CHIRI"]   ] = HG["SETU"]
HostGirlFaceRemap[HG["RINRIN"]  ] = HG["MARI"]
HostGirlFaceRemap[HG["ANGE"]    ] = HG["AIRI"]

--ホストガールの代替表情を設定する
function SelectalternativeFacePatternNumber(danceShow)
	for i = 1,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].alternative_face_pattern_number = HostGirlFaceRemap[danceShow.hg_settings[i].hg_number]
	end
end

--コスチュームの一覧
Cos = {}
Cos[0 ]  = "uni01"
Cos[1 ]  = "uni02"
Cos[2 ]  = "uni03"
Cos[3 ]  = "uni04"
Cos[4 ]  = "uni05"
Cos[5 ]  = "uni06"
Cos[6 ]  = "uni07"
Cos[7 ]  = "uni08"
Cos[8 ]  = "uni09"
Cos[9 ]  = "uni10"
Cos[10]  = "uni11"
Cos[11]  = "uni12"
Cos[12]  = "uni13"
Cos[13]  = "uni15"
Cos[14]  = "uni16"
Cos[15]  = "uni17"
Cos[16]  = "uni18"
Cos[17]  = "uni19"
Cos[18]  = "uni20"
Cos[19]  = "uni21"
Cos[20]  = "uni22"
Cos[21]  = "uni23"
Cos[22]  = "uni24"

--コスチュームの一覧(色違い)
CosAnother = {}
for i = 0, #Cos do
	CosAnother[i] = Cos[i] .. "a"
end

--コスチュームの一覧(全部)
CosALL = {}
for i = 1, #Cos do
	CosALL[#CosALL+1] = Cos[i]
end
for i = 1, #CosAnother do
	CosALL[#CosALL+1] = CosAnother[i]
end

--カラオケの定義
KARAOKE_ZERO = {"YUME_MIRU", "HAN_MAMA", "OH_MAMA", "RIDE_ON", "SUNAONI", "TOKI_NO", "ZETTAI_IDOL", "GLORY_DAYS", "YOKOHAMA_RAP", "KOIWOSITE", "JEWEL", "PARADISE", "KOKORO_NO"}
KARAOKE_GOGO = {"CUTE_DE_POP", "HALLELUJAH", "I_KNOW_", "YUME_NO", "O_SHARE", "FULL_MOON", "WATASHI_NO", "ARASHI_WO", "DRAGONLADY", "UCHUJIN"}

--カラオケの一覧
KARAOKE_ALL = {}
for i = 1, #KARAOKE_ZERO do
	KARAOKE_ALL[#KARAOKE_ALL+1] = KARAOKE_ZERO[i]
end
for i = 1, #KARAOKE_GOGO do
	KARAOKE_ALL[#KARAOKE_ALL+1] = KARAOKE_GOGO[i]
end

--指定されたカラオケがGogo.かチェックする
function KaraokeIsGogo(karaoke_name)
	for i = 1, #KARAOKE_GOGO do
		if KARAOKE_GOGO[i] == karaoke_name then
			return true
		end
	end
	return false
end

--基本的な内容の初期化
function SelectBase(numHG)
	--結果の構造体
	local danceShow = {}

	--カラオケを選択する
	SelectKaraoke(danceShow)

	--ホストガールを選択する
	InitHostGirl(danceShow, numHG)

	return danceShow
end

--カラオケを選択する
function SelectKaraoke(danceShow)
	danceShow.karaoke = KARAOKE_ALL[RandomRange(1, #KARAOKE_ALL)]
end

--ZEROカラオケを選択する
function SelectKaraokeZero(danceShow)
	danceShow.karaoke = KARAOKE_ZERO[RandomRange(1, #KARAOKE_ZERO)]
end

--Gogo.カラオケを選択する
function SelectKaraokeGogo(danceShow)
	danceShow.karaoke = KARAOKE_GOGO[RandomRange(1, #KARAOKE_GOGO)]
end

--ホストガールの人数分初期化する
function InitHostGirl(danceShow, numHG)
	danceShow.hg_settings = {}
	for i = 1,numHG do
			danceShow.hg_settings[i] = {}
	end
end

--ホストガールをランダムに選択する
function ChoiceHostGirlShuffle(danceShow)
	hg_list = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22}
	hg_list = ShuffleArray(hg_list)

	for i = 1,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].hg_number = hg_list[i]
	end
end

--ZEROホストガールをランダムに選択する
function ChoiceHostGirlShuffleZero(danceShow)
	hg_list = {0,1,2,3,4,5,6,7,8,9,10,11,12}
	hg_list = ShuffleArray(hg_list)

	for i = 1,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].hg_number = hg_list[i]
	end
end

--Gogo.ホストガールをランダムに選択する
function ChoiceHostGirlShuffleGogo(danceShow)
	hg_list = {13,14,15,16,17,18,19,20,21,22}
	hg_list = ShuffleArray(hg_list)

	for i = 1,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].hg_number = hg_list[i]
	end
end


--歌えるホストガールを1番目に、それ以外を歌えないホストガールでランダムに選択する
function ChoiceHostGirlSingCenter(danceShow)
	--ZEROとGogo.のホストガールを分けてシャッフルする
	hg_list_zero = {0,1,2,3,4,5,6,7,8,9,10,11,12}
	hg_list_gogo = {                             13,14,15,16,17,18,19,20,21,22}
	hg_list_zero = ShuffleArray(hg_list_zero)
	hg_list_gogo = ShuffleArray(hg_list_gogo)

	--カラオケに応じて、歌えるホストガールをセンターに配置する
	if KaraokeIsGogo(danceShow.karaoke) then
		danceShow.hg_settings[1].hg_number = hg_list_gogo[1]
		hg_list_other = hg_list_zero
	else
		danceShow.hg_settings[1].hg_number = hg_list_zero[1]
		hg_list_other = hg_list_gogo
	end

	--残りのホストガールに歌えないホストガールを配置する
	for i = 2,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].hg_number = hg_list_other[i-1]
	end

end



--位置の調整。3人用
function SetPosition3(danceShow)
	--配置する
	danceShow.hg_settings[1].position = {0, 0, 10}
	danceShow.hg_settings[2].position = {75, 0, -65}
	danceShow.hg_settings[3].position = {-75, 0, -65}
end

--位置の調整。5人用
function SetPosition5(danceShow)
	--配置する
	danceShow.hg_settings[1].position = {0, 0, 10}
	danceShow.hg_settings[2].position = {105, 0, 10}
	danceShow.hg_settings[3].position = {-105, 0, 10}
	danceShow.hg_settings[4].position = {65, 0, -85}
	danceShow.hg_settings[5].position = {-65, 0, -85}
end

--デフォルト制服で3人。歌えないホストガールをバックダンサーとする
function SelectUni3()

	--3人で、歌えるホストガールをセンターに配置する
	local danceShow = SelectBase(3)
	ChoiceHostGirlSingCenter(danceShow)

	--デフォルトの制服を選択する
	for i = 1,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].hg_costume = COSTUME[Cos[danceShow.hg_settings[i].hg_number]]
	end

	--配置する
	SetPosition3(danceShow)

	--ホストガールの代替表情を設定する
	SelectalternativeFacePatternNumber(danceShow)

	return danceShow
end

--デフォルト制服で3人。歌えないホストガールをバックダンサーとする
function SelectUni3A()

	--3人で、歌えるホストガールをセンターに配置する
	local danceShow = SelectBase(3)
	ChoiceHostGirlSingCenter(danceShow)

	--デフォルトの制服を選択する
	for i = 1,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].hg_costume = COSTUME[CosAnother[danceShow.hg_settings[i].hg_number]]
	end

	--配置する
	SetPosition3(danceShow)

	--ホストガールの代替表情を設定する
	SelectalternativeFacePatternNumber(danceShow)

	return danceShow
end

--ランダム制服で3人。歌えないホストガールをバックダンサーとする
function SelectUniShuffle3()

	--3人で、歌えるホストガールをセンターに配置する
	local danceShow = SelectBase(3)
	ChoiceHostGirlSingCenter(danceShow)

	--制服をシャッフルする
	CosShuffle = ShuffleArray(CosALL)
	for i = 1,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].hg_costume = COSTUME[CosShuffle[i]]
	end

	--配置する
	SetPosition3(danceShow)

	--ホストガールの代替表情を設定する
	SelectalternativeFacePatternNumber(danceShow)

	return danceShow
end

--ランダム制服で5人。ホストガールの選択もランダムとする
function SelectUniShuffle5()

	--5人で、ランダムに選択する
	local danceShow = SelectBase(5)
	ChoiceHostGirlShuffle(danceShow)

	--制服をシャッフルする
	CosShuffle = ShuffleArray(CosALL)
	for i = 1,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].hg_costume = COSTUME[CosShuffle[i]]
	end

	--配置する
	SetPosition5(danceShow)

	--ホストガールの代替表情を設定する
	SelectalternativeFacePatternNumber(danceShow)

	return danceShow
end

--ZEROホストガール3人。Gogo制服をシャッフル
function SelectZero3()

	--3人で、ZEROホストガールをランダムに選択する
	local danceShow = SelectBase(3)
	ChoiceHostGirlShuffleZero(danceShow)

	--ZEROのカラオケを選択する
	SelectKaraokeZero(danceShow)

	--Gogo.の制服をシャッフルする
	local gCos = ShuffleArray({"uni15", "uni16", "uni17", "uni18", "uni19", "uni20", "uni21", "uni22", "uni23", "uni24"})
	for i = 1,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].hg_costume = COSTUME[gCos[i]]
	end

	--配置する
	SetPosition3(danceShow)

	--ホストガールの代替表情を設定する
	SelectalternativeFacePatternNumber(danceShow)

	return danceShow
end

--Gogo.ホストガール3人。ZERO制服をシャッフル
function SelectGogo3()

	--3人で、Gogo.ホストガールをランダムに選択する
	local danceShow = SelectBase(3)
	ChoiceHostGirlShuffleGogo(danceShow)

	--Gogo.のカラオケを選択する
	SelectKaraokeGogo(danceShow)

	--ZEROの制服をシャッフルする
	local zCos = ShuffleArray({"uni01", "uni02", "uni03", "uni04", "uni05", "uni06", "uni07", "uni08", "uni09", "uni10", "uni11", "uni12", "uni13"})
	for i = 1,#(danceShow.hg_settings) do
		danceShow.hg_settings[i].hg_costume = COSTUME[zCos[i]]
	end

	--配置する
	SetPosition3(danceShow)

	--ホストガールの代替表情を設定する
	SelectalternativeFacePatternNumber(danceShow)

	return danceShow
end


showList = {SelectUni3, SelectUni3A, SelectUniShuffle3, SelectZero3, SelectGogo3, SelectUniShuffle5}
showIndex = 1

-- ショーの内容を選択して返却する
function Select()
	danceShow = showList[showIndex]()
	return danceShow
end

-- 次のショーを選択する
function Next()
	--次のショーへ
	showIndex = showIndex + 1
	if showIndex > #showList then
		showIndex = 1
	end
end

-- 前のショーを選択する
function Prev()
	--次のショーへ
	showIndex = showIndex - 1
	if showIndex == 0 then
		showIndex = #showList
	end
end

