--モーションライブラリのデータを配列に展開します（パイロット版）

char_name = {"霊夢" , "魔理沙" , "咲夜" , "アリス" , "パチュリー" , "妖夢" , "レミリア" , "幽々子" , "紫" , "萃香" , "優曇華" , "文" , "小町" , "衣玖" , "天子" }

enemy_frame_C = {}
enemy_frame_A = {}
enemy_frame_M = {}


function set_my_motion()


--	print(char_name[my_char+1].."のモーション情報を読み込みました");

end


function set_enemy_motion()
	enemy_frame_C[enemy_char] = {};
	enemy_frame_A[enemy_char] = {};
	enemy_frame_M[enemy_char] = {};

	for j=-700,700 do

		enemy_frame_C[enemy_char][j] = {};
		enemy_frame_A[enemy_char][j] = {};
		enemy_frame_M[enemy_char][j] = {};
		for k=0,4 do
			local lv=k;
			local lv_C=k;
			local lv_A=k;
			local lv_M=k;
			for l=k,0 do
				if(frame_C[enemy_char][j][lv] ~= nil)then
					lv_C = k;
				end
				if(frame_A[enemy_char][j][lv] ~= nil)then
					lv_A = k;
				end
				if(frame_M[enemy_char][j][lv] ~= nil)then
					lv_M = k;
				end

			end
			enemy_frame_C[enemy_char][j][k] = frame_C[enemy_char][j][lv_C];
			enemy_frame_A[enemy_char][j][k] = frame_A[enemy_char][j][lv_A];
			enemy_frame_M[enemy_char][j][k] = frame_M[enemy_char][j][lv_M];
				if(type(enemy_frame_C[enemy_char][j][k]) == "table")then
					for i=1,4 do
						if(frame_C[enemy_char][j][lv_C][i] == nil)then
							break;
						end
						enemy_frame_C[enemy_char][j][k][i] = frame_C[enemy_char][j][lv_C][i];
					end
				end
				if(type(enemy_frame_A[enemy_char][j][k]) == "table")then
					for i=1,4 do
						if(frame_A[enemy_char][j][lv_A][i] == nil)then
							break;
						end
						enemy_frame_A[enemy_char][j][k][i] = frame_A[enemy_char][j][lv_A][i];
					end
				end
				if(type(enemy_frame_M[enemy_char][j][k]) == "table")then
					for i=1,4 do
						if(frame_M[enemy_char][j][lv_M][i] == nil)then
							break;
						end
						enemy_frame_M[enemy_char][j][k][i] = frame_M[enemy_char][j][lv_M][i];
					end
				end
		end
	end


	print(char_name[enemy_char+1].."のモーション情報を読み込みました");
end


---モーションデータdataの識別子、開始フレーム及び終了フレームを配列にして返す関数（仮
--player(0で自分、1で相手)はデータが配列の場合のみ使用。省略可能。省略した場合相手(1)になります
function expand_motion_library(data,player)
--データが空の場合はnil値を返す
	if(data == nil)then
		return nil;
	end
--データが配列（セクション制の動作）の場合

	if(type(data) == "table")then
		local section=1;
		if(player==0)then
			for i=1,3 do
				section=i;
				if(my_preact[i]~=my_preact[0] or data[section+1]==nil)then
					break;
				end
				section=i+1;
			end
		else
			player=1;
			for i=1,3 do
				section=i;
				if(enemy_preact[i]~=enemy_preact[0] or data[section+1]==nil)then
					break;
				end
				section=i+1;
			end
		end
		data = data[section];
	end
	local framedata = {};
--データを")"で区切る
	if(data == nil)then
		return nil;
	end
	for w in string.gmatch(data, ".-%)") do
--区切ったデータのアルファベットを戻り値用に配列に入れる
		local x = string.gsub(w, "[^%a+]" , "");
		framedata[#framedata+1] = x;
		if(x ~= nil)then
--区切ったデータの数値部分を戻り値用に配列に入れていく
			for y in string.gmatch(w, "[0-9]+") do
				framedata[#framedata+1] = y-0;
			end
		end
	end
return framedata;
end


--敵の攻撃フレーム中(及び10F前まで)なら識別子を返す
--
--第2引数でフレーム先読み。ただし過度な信頼はしない事（セクション制の物に完全には対応できてない）
function check_enemy_frameA(actID,add)
	local enemy_act = enemy_act;
	if(actID~=nil and actID~=false)then
		enemy_act=actID
	end
	local value = expand_motion_library(enemy_frame_A[enemy_char][enemy_act][0]);
		local i = 1;
		local frame_add = add;
		if(add==nil)then
			frame_add =0;
		end
		while(value ~= nil)do
			if(value ~= nil and value[i]~=nil and value[i+1]~=nil and value[i+2]~=nil)then
				local difference = 0;
				if((enemy_frame+frame_add)<value[i+1])then
					difference = value[i+1]-(enemy_frame+frame_add);
				elseif(value[i+2]<(enemy_frame+frame_add))then
					difference = (enemy_frame+frame_add)-value[i+2];
				end
--攻撃フレーム終了後でも、ガード中なら5フレーム余分に見る
				if(value[i+1]<=(enemy_frame+frame_add)+10 and value[i+2]>(enemy_frame+frame_add)-BtoN(my_act>=150 and my_act<160)*5)then
--攻撃種別を第1値、発生までのフレーム差を第2値として返す
					return value[i],difference;
				end
			else
				break;
			end
		i = i+3;
		end
	return false,difference;
end

--最初に呼ばれた時に自動でデータを読む
set_my_motion();	--自モーションデータを読み込む
set_enemy_motion();	--敵モーションデータを読み込む
