$KCODE = 'SJIS'

require 'win32ole'
require 'nkf'


# ======== 概要 ========

=begin
	「ポロックケース仕様.xlsx」から、実際にコードで使うデータを作成するコンバータです。

	元となる仕様書がコンバートされることを前提とはしていないため、一部のデータは決め打ちになっています。

	出力されるデータは「コードからincludeして使えるもの」であり、いわゆる「バイナリデータ」ではありません。
	（最終的なデータはせいぜい数キロByteなので、組み込んでしまって問題ないという判断）
=end




# ======== 定数 ========

# ポロックの種類
POROC_ID_RED			= 0
POROC_ID_BLUE			= 1
POROC_ID_PINK			= 2
POROC_ID_GREEN			= 3
POROC_ID_YELLOW			= 4
POROC_ID_RAINBOW		= 5
POROC_ID_GREAT_RED		= 6
POROC_ID_GREAT_BLUE		= 7
POROC_ID_GREAT_PINK		= 8
POROC_ID_GREAT_GREEN	= 9
POROC_ID_GREAT_YELLOW	= 10
POROC_ID_GREAT_RAINBOW	= 11

# パラメータの種類
PARAM_STYLE		= 0
PARAM_BEAUTIFUL	= 1
PARAM_CUTE		= 2
PARAM_CLEVER	= 3
PARAM_STRONG	= 4
PARAM_NUM		= 5


# ======== 開始処理 ========

# Excel : Start
excel = WIN32OLE.new('Excel.Application')

# File : Src : Open
#- こっちのパス指定は"C:\〜"という形式じゃないとエラーが出る
workbook = excel.workbooks.open(WIN32OLE.new('Scripting.FileSystemObject').GetAbsolutePathName('ポロックケース仕様.xlsx'))

# File : Dst : Open
#- こっちのパス指定は"/cygdrive/〜"という形式じゃないとWarningが出る
$dst_file = File.open(Dir.getwd + '/poroc_data.inc', "w")


# 出力用関数
# - 本番用（ファイル出力）とデバッグ用（コンソール出力）を切り替えるための関数
def print_dst(str)
	$dst_file.print str		#本番用：ファイル出力
#	print str				#デバッグ用：コンソール出力
end


# ======== タブ：きのみブレンダー計算式 ========

$sheet = excel.worksheets.Item("きのみブレンダー計算式")
$use_range = $sheet.UsedRange
$row_num = $use_range.rows.count
$col_num = $use_range.columns.count


# - s_BerryColorの出力 -

print_dst "static const u8 s_BerryColor[BERRY_ITEM_NUM] = {\n"

c = 6
4.upto(70) do |r|
	case $use_range.cells(r, c).value
	when "あか"
		print_dst "\t0,\n"
	when "あお"
		print_dst "\t1,\n"
	when "ももいろ"
		print_dst "\t2,\n"
	when "みどり"
		print_dst "\t3,\n"
	when "きいろ"
		print_dst "\t4,\n"
	end
end

print_dst "};\n\n"


# - s_GreatPercent_Berryの出力 -

print_dst "static const u8 s_GreatPercent_Berry[] = {\n"

c = 1
4.upto(70) do |r|
#	great_percent = $use_range.cells(r, c+6).value.to_i						#半角数字による指定版
	great_percent = NKF::nkf( '-Ssxm0Z0', $use_range.cells(r, c+6).value )	#全角数字による指定版
	
	print_dst "\t"
	print_dst great_percent
	print_dst ",\n"
end

print_dst "};\n\n"


# - s_GreatPercent_Countの出力 -

# 本来はエクセルの指定から取りたいが、仕様書からだと取りづらいので決め打ち

print_dst "static const u8 s_GreatPercent_Count[] = {\n"
print_dst "\t0,\n"
print_dst "\t0,\n"
print_dst "\t5,\n"
print_dst "\t10,\n"
print_dst "\t15,\n"
print_dst "};\n\n"




# ======== タブ：ポロック効果法則 ========

$sheet = excel.worksheets.Item("ポロック効果法則")
$use_range = $sheet.UsedRange
$row_num = $use_range.rows.count
$col_num = $use_range.columns.count


# - s_ParamOffsetの出力 -

# Local関数
def print_poroc_param(poroc_id, r, c)
	print_dst "\t{\n"
	print_dst "\t\t"

	(c+2).upto($col_num) do |c_|
		print_dst "{"

		0.upto(PARAM_NUM-1) do |p|
			#該当パラメータの上昇値を決定
			val = 0
			case $use_range.cells(r, c+1).value
			when "かっこよさ"
				if p == PARAM_STYLE
					val = $use_range.cells(r, c_).value.to_i
				end
			when "うつくしさ"
				if p == PARAM_BEAUTIFUL
					val = $use_range.cells(r, c_).value.to_i
				end
			when "かわいさ"
				if p == PARAM_CUTE
					val = $use_range.cells(r, c_).value.to_i
				end
			when "かしこさ"
				if p == PARAM_CLEVER
					val = $use_range.cells(r, c_).value.to_i
				end
			when "たくましさ"
				if p == PARAM_STRONG
					val = $use_range.cells(r, c_).value.to_i
				end
			when "全てのコンディション"
				val = $use_range.cells(r, c_).value.to_i
			end

			#「値」＋「必要ならカンマ」の出力
			print_dst val
			if p < PARAM_NUM-1
				print_dst ","
			end
		end

		print_dst "},"
	end

	print_dst "\n\t},\n"
end

print_dst "static const PorocManager::StatusUpInfo s_StatusUpInfo[POROC_ITEM_NUM][POROC_PHASE_NUM] = {\n"
1.upto($row_num) do |r|
	1.upto($col_num) do |c|
		case $use_range.cells(r, c).value
		when "あかいポロック"
			print_poroc_param(POROC_ID_RED,		r, c)
		when "あおいポロック"
			print_poroc_param(POROC_ID_BLUE,	r, c)
		when "ももいろポロック"
			print_poroc_param(POROC_ID_PINK,	r, c)
		when "みどりのポロック"
			print_poroc_param(POROC_ID_GREEN,	r, c)
		when "きいろのポロック"
			print_poroc_param(POROC_ID_YELLOW,	r, c)
		when "にじいろポロック"
			print_poroc_param(POROC_ID_RAINBOW,	r, c)
		when "すごいあかのポロック"
			print_poroc_param(POROC_ID_RED,		r, c)
		when "すごいあおのポロック"
			print_poroc_param(POROC_ID_BLUE,	r, c)
		when "すごいももいろポロック"
			print_poroc_param(POROC_ID_PINK,	r, c)
		when "すごいみどりのポロック"
			print_poroc_param(POROC_ID_GREEN,	r, c)
		when "すごいきいろのポロック"
			print_poroc_param(POROC_ID_YELLOW,	r, c)
		when "すごいにじいろポロック"
			print_poroc_param(POROC_ID_RAINBOW,	r, c)
		end
	end
end
print_dst "};\n\n"


# - SUM_TO_PHASEの出力 -

# 本来はエクセルの全角数字から取りたいが、面倒なので決め打ち

print_dst "static u8 SUM_TO_PHASE(u32 in_OldSum){\n"
print_dst "\tif(in_OldSum <= 255){return 0;}\n"
print_dst "\tif(in_OldSum <= 510){return 1;}\n"
print_dst "\tif(in_OldSum <= 765){return 2;}\n"
print_dst "\tif(in_OldSum <= 1020){return 3;}\n"
print_dst "\tif(in_OldSum <= 1170){return 4;}\n"
print_dst "\treturn 5;\n"
print_dst "}\n\n"


# ======== 終了処理 ========

# File : Dst : Close
$dst_file.close

# File : Src : Close
workbook.close

# Excel : End
excel.quit
