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

	FILE	: SkillDef.h

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

	量が多いので分割

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

#pragma once

// 引数code
enum{
	SKILL_CODE_INVOKE,			// 効果使用
	SKILL_CODE_GET_CONTENT,		// 効果詳細の取得
	SKILL_CODE_CHECK_COST,		// 効果コスト確認
	SKILL_CODE_CHECK_TIMING,	// 効果発動タイミング確認
	SKILL_CODE_ABORT,			// 効果の強制終了
};

// 返値ret
enum{
	SKILL_RET_NON,				// 効果なし
	SKILL_RET_END,				// 効果終了

	SKILL_RET_MIRACLE,			// 奇跡
	SKILL_RET_KEEPER,			// キーパー
	SKILL_RET_ACE,				// エース
	SKILL_RET_ALTERNATE,		// オルタネイト
	SKILL_RET_PERMANENR,		// 永続

	SKILL_RET_ALWAYS,			// 常在
	SKILL_RET_STARTUP,			// 起動
	SKILL_RET_AUTO,				// 自動
	SKILL_RET_ACTION,			// アクション

	SKILL_RET_MAIN_LINK,		// メインリンク
	SKILL_RET_ATTACK_LINK,		// アタックリンク
	SKILL_RET_GUARD_LINK,		// ガードリンク

	SKILL_RET_INVOKE,			// 発動中
	SKILL_RET_WAIT_SELECT_MY,	// 自分の選択待ち
	SKILL_RET_WAIT_SELECT_OPPO,	// 相手の選択待ち

	SKILL_RET_ERROR,			// 処理エラー
};

// 発動タイミング
enum{
	SKILL_TIMING_LINK_FIRST,	// リンクステップ開始時
	SKILL_TIMING_MAIN,			// メインフェイズ
	SKILL_TIMING_ACTION_FIRST,	// アクションに置かれた時
	SKILL_TIMING_PLAY_FIRST,	// プレイ時
	SKILL_TIMING_ALWAYS,		// 常在
	SKILL_TIMING_STARTUP,		// 起動
};

// ターン指定(数値が重要)
enum{
	TURN_NOW_BATTLE	= 0,		// そのバトル中
	TURN_MY_END		= 1,		// そのターン中
	TURN_OPPO_END	= 2,		// 相手ターンの終わりまで
};

//enum ARGTYPE{
//	ARGTYPE_NON,
//	ARGTYPE_INT,
//	ARGTYPE_STR,
//};

enum SKILLTYPE{
	SKILLTYPE_TIMING,
	SKILLTYPE_COST,
	SKILLTYPE_SKILL,
	SKILLTYPE_MAX,
};

struct FUNC_DATA{
	string	name;			// 関数名
	VecInt	argInt;			// 数値引数
	VecStr	argStr;			// 文字引数
//	VecInt	argTyp;			// 引数使用型
	int		fncNum;			// 使用関数番号(非読み込み)
};

typedef vector<FUNC_DATA*>				vecFunc;
typedef	vector<FUNC_DATA*>::iterator	iteFunc;

struct SCRIPT_DATA{
	string	serStr;		// シリーズ名
	int		serNum;		// シリーズ番号
	int		sklNum;		// スキル番号
	vecFunc	chkTmg;		// タイミング
	vecFunc	chkCst;		// コスト
	vecFunc	skill;		// 効果関数
};

typedef vector<SCRIPT_DATA*>			vecScript;
typedef	vector<SCRIPT_DATA*>::iterator	iteScript;



