
/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

	FILE	: CardData.h

+ ------ Explanation of file --------------------------------------------------------------------------

	カードデータ、ルールデータ、デッキデータの管理

+ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

#pragma once

//! カード
struct CARD_DATA{
	string	serStr;		// シリーズ名
	int		serNum;		// シリーズ番号
	string	name;		// 名前
	int		color;		// 色
	int		power;		// パワー
	int		guard;		// ガード
	int		level;		// レベル
	int		strike;		// ストライク
	int		frame;		// フレーム
	int		boost;		// ブースト
	int		type;		// タイプ
	string	race;		// 種族
	int		serNo;		// 累計番号(非読込)
};

typedef vector<CARD_DATA*>				vecCard;
typedef	vector<CARD_DATA*>::iterator	iteCard;

//! テキスト
struct TEXT_DATA{
	string	serStr;		// シリーズ名
	int		serNum;		// シリーズ番号
	string	text;		// テキスト
	int		serNo;		// 累計番号(非読込)
};

typedef vector<TEXT_DATA*>				vecText;
typedef	vector<TEXT_DATA*>::iterator	iteText;

//! 禁止
struct PROH_DATA{
	string	serStr;		// シリーズ名
	int		serNum;		// シリーズ番号
	int		serNo;		// 累計番号(非読込)
};

typedef vector<PROH_DATA*>				vecProh;
typedef	vector<PROH_DATA*>::iterator	iteProh;

//! 制限
struct REST_DATA{
	string	serStr;		// シリーズ名
	int		serNum;		// シリーズ番号
	int		num;		// 枚数
	int		serNo;		// 累計番号(非読込)
};

typedef vector<REST_DATA*>				vecRest;
typedef	vector<REST_DATA*>::iterator	iteRest;

//! コンビ
struct COMB_DATA{
	string	serStr[2];	// シリーズ名
	int		serNum[2];	// シリーズ番号
	int		serNo[2];	// 累計番号(非読込)
};

typedef vector<COMB_DATA*>				vecComb;
typedef	vector<COMB_DATA*>::iterator	iteComb;

//! デッキ
struct DECK_DATA{
	string	serStr;		// シリーズ名
	int		serNum;		// シリーズ番号
	int		serNo;		// 累計番号(非読込)
};

class CardData
{
	private:
		vecCard		m_cardList;						// カードリスト
		vecText		m_textList;						// テキストリスト
		vecProh		m_prohList;						// 禁止リスト
		vecRest		m_restList;						// 制限リスト
		vecComb		m_combList;						// コンボリスト
		DECK_DATA	m_deckList[PLY_NUM][DECK_MAX];	// デッキリスト

	private:
		void release(void);

	public:
		CardData();
		~CardData();

		void readBinary(void);													// バイナリ読み込み
		void readDeck(int ply, const char* fileName);							// デッキ読み込み
		void getCardData(int serNo, CARD_INFO* pCI);							// カードデータ取得
		void getCardText(int serNo, char* pStr);								// カードテキスト取得
		DECK_DATA* getDeck(int ply, int num){return(&m_deckList[ply][num]); }	// デッキ取得
};

