/*
	パーティクル Version2.0 スクリプトコマンド
*/

#ifndef _PTCLCOM_V2_
#define _PTCLCOM_V2_


// スクリプトコマンドテーブル
enum
{
	DBGMESSAGE,
	GETFRAME,
	GETBEFOREFRAME,
	CALCFRAME,
	GETFPS,
	GETSCREENSIZE,

	SIN,
	COS,
	TAN,
	ASIN,
	ACOS,
	ATAN,
	ATAN2,
	CEIL,
	FABS,
	FLOOR,
	FMOD,
	SQRT,
	POW,
	DEG2RAD,
	RAD2DEG,
	ABS,

	ROTATE_X,
	ROTATE_Y,
	ROTATE_Z,
	TRANS,
	SCALE,

	SETPOS,
	GETPOS,
	SETTEX,

	GETBOX,
	SETBOX,

	EXIT,
	RAND,
	FRAND,
	GETREG,
	GETNOW,

	GETDISTANCE,
	PARSSCREEN,
	SETSHOW,

	GETMAX,

	LINEARINT,
	ROUND,
	TRIWAVE,

	RESETVERTEX,
	BACKUPVERTEX,

	GETATTACH,
	GETATTACHSHOW,
	GETATTACHBASE,
	GETATTACHPOS,
	SETBLENDMODE,

	PTCLCOM_MAX
};


// デバッグメッセージ送信
global DBGMESSAGE	void DbgMessage( char* mes );

// 現在のフレームカウンタ値を取得
global GETFRAME	dword GetFrame( );

// 前フレームカウンタ値を取得
global GETBEFOREFRAME	dword GetBeforeFrame( );

// 60fpsに対するフレーム数を現在の動作fpsに対するフレーム数に直す
global CALCFRAME	dword CalcFrame( dword frame );

// システムの動作FPSを取得
global GETFPS	dword GetFps( );

// スクリーンサイズ取得
global GETSCREENSIZE	void GetScreenSize( dword* x, dword* y );


// sin
global SIN	float sin( float r );

// cos
global COS	float cos( float r );

// tan
global TAN	float tan( float r );

// asin
global ASIN	float asin( float r );

// acos
global ACOS	float acos( float r );

// atan
global ATAN	float atan( float r );

// atan2
global ATAN2	float atan2( float x, float y );

// ceil
global CEIL	float ceil( float r );

// fabs
global FABS	float fabs( float r );

// floor
global FLOOR	float floor( float r );

// fmod
global FMOD	float fmod( float a, float b );

// sqrt
global SQRT	float sqrt( float r );

// pow
global POW	float pow( float a, float b );

// 度→ラジアン
global DEG2RAD	float Deg2Rad( float d );

// ラジアン→度
global RAD2DEG	float Rad2Deg( float r );

// abs
global ABS	long abs( long r );



// X回転
global ROTATE_X	void rotate_x( float* v, float r );

// Y回転
global ROTATE_Y	void rotate_y( float* v, float r );

// Z回転
global ROTATE_Z	void rotate_z( float* v, float r );

// 移動
global TRANS	void trans( float* v, float x, float y, float z );

// スケール
global SCALE	void scale( float* v, float x, float y, float z );


// 表示位置設定
global SETPOS	void SetPos( float x, float y, float z );

// 表示位置取得
global GETPOS	void GetPos( float* x, float* y, float* z );

// テクスチャ座標設定
global SETTEX	void SetTex( long x1, long y1, long x2, long y2 );


// ボックス取得
global GETBOX	void GetBox( float* v );

// ボックス設定
global SETBOX	void SetBox( float* v );


// パーティクルエフェクト終了
global EXIT		void exit( );

// 乱数取得（整数）
global RAND		dword rand( );

// 乱数取得（実数）
global FRAND	float frand( );

// 初期化レジスタ取得
global GETREG	void GetReg( float* reg );

// 現在のパーティクルNoを取得
global GETNOW	dword GetNow( );


// 2点間の距離を取得
global GETDISTANCE	float GetDistance( float x1, float y1, float z1, float x2, float y2, float z2 );


// 指定Z値の時にスクリーンに表示される矩形を取得
global PARSSCREEN	void ParsScreen( float z, float* x1, float* y1, float* x2, float* y2 );


// 表示・非表示設定
global SETSHOW	void SetShow( dword no, long show );


// 最大パーティクルNoを取得
global GETMAX	dword GetMax( );


// 線形補間 
//	as:求める範囲の最小値 ae:求める範囲の最大値
//	ns:入力値の最小値 ne:入力値の最大値 n:求める値
global LINEARINT	float LinearInt( float as, float ae, float ns, float ne, float n );

// round
global ROUND	long round( float r );

// 三角波
global TRIWAVE	float triwave( float a, float r );



// 頂点をリセット(バックアップ状態に戻す)
global RESETVERTEX	void ResetVertex( long no );

// 頂点をバックアップ
global BACKUPVERTEX	void BackupVertex( long no );

// アタッチプレーンNoを取得
global GETATTACH	long GetAttach( );

// アタッチプレーンの表示状態を取得
global GETATTACHSHOW	long GetAttachShow( );

// アタッチプレーンのベース位置を取得
global GETATTACHBASE	long GetAttachBase( float* x, float* y );

// アタッチプレーンの表示位置を取得
global GETATTACHPOS	long GetAttachPos( float* x, float* y, float* z );

// ブレンドモード変更
global SETBLENDMODE	void SetBlendMode( long mode );

#endif

