/*
 ******************************************************************************
 *              
 *      エフェクトＢＧ（倒れる木のエフェクト）
 *	Program: Yositaka Takesita
 *	2000/6/12
 *	$Id: ac_effectbg.h,v 1.1 2003/06/06 00:15:11 tong Exp $
 *
 ******************************************************************************
 */
#ifndef AC_EFFECTBGh
#define AC_EFFECTBGh

#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif
#include "m_basic.h"
#include "c_keyframe.h"

/*
 ************************************************
 *						*
 *		クラス設定			*
 *						*
 ************************************************
 */
#define EFBG_JOINT_MAX		4
#define EFBG_MODEL_MAX		6
#define EFBG_COUNT_MAX		3
#if 0
#define EFBG_BANK_SIZE		15040
#else
#define EFBG_BANK_SIZE		13632   
#endif
typedef struct __effectbg_class__ {
    cKF_SkeletonInfo_R_c 	skeleton;
					/*アニメーションスケルトンクラス*/
    Mtx				mtx[2][EFBG_MODEL_MAX];
					/*アニメーションマトリックス	*/
    xyz_t			pos;		/*ポジション		*/
    xyz_t			ef_pos;
					/*エフェクト発生ポジション	*/
    s_xyz			joint[EFBG_JOINT_MAX];
						/*ジョイント		*/
    s_xyz			morph[EFBG_JOINT_MAX];
						/*補完ジョイント	*/
    short			timer;		/*存在時間		*/
    short			end_timer;	/*トータル存在時間	*/
    short			type;		/*エフェクトＢＧのタイプ*/
    short			level;		/*エフェクトＢＧの大きさ*/
    short			cycle;		/*木が揺れる用の変数	*/
    short			leaf_angle;	/*木が揺れる用の変数	*/
    unchar			status;		/*領域使用フラグ	*/
    int				block_pos_x;
    int				block_pos_z;
}EFBG_CL;
typedef struct Effectbg_actor_s {
    ACTOR		actor_cl;		/* 基底クラス		*/
    EFBG_CL		efbg[EFBG_COUNT_MAX];
						/*エフェクトＢＧ領域	*/
#if 0
    u64			dummy;
    unchar		bank[EFBG_BANK_SIZE];	/*バンク転送領域	*/
#else
    unchar		*bank;
#endif
    unshort		*tree_pal;		/*木のパレットポインタ	*/
}EFBG_ACTOR;
typedef struct Effectbg_actor_s	EFFECTBG_ACTOR;

/*
 *
 *	プロファイル
 *
 */
extern Actor_profile	Effectbg_Profile;
/*クリップに登録する関数の型宣言*/
typedef void (*efBG_CLIP_c)(GAME *, short, short, xyz_t *);

/*エフェクトＢＧ生成関数（必ずこのマクロを使って下さい）*/
#define Make_EffectBG_Call(game, efbgtype, efbg_level, pos_p) \
(ZCommonGet(clip.efBG_clip))(game, efbgtype, efbg_level, pos_p)
/*エフェクトＢＧ生成チェック関数*/
#define EFBG_MKPROC_CHECK (ZCommonGet(clip.efBG_clip) != NULL)
/*
 *	エフェクトＢＧ名前テーブル
 */
enum {
    EFBG_TREE_SHAKE,
    EFBG_TREE_CUTL,
    EFBG_TREE_CUTR,
    EFBG_TREE_SHAKE_S,
    EFBG_TREE_SHAKE_L,
    EFBG_NAMETBL_END
};
enum {
    EFBG_LEVEL_2 = -1,
    EFBG_LEVEL_3,
    EFBG_LEVEL_4,
    EFBG_LEVEL_5,
    EFBG_LEVEL_END,
    EFBG_LEVEL_X = 3
};
#define EFBG_STAT_USE		0x01
#define EFBG_STAT_COLLISION	0x02
#define EFBG_STAT_XMAS_TREE	0x04

#include "m_common_data.h"
#ifdef _LANGUAGE_C_PLUS_PLUS
} /* extern "C" */
#endif

#endif
/*** ac_effectbg.h ***/


