/****************************************************************************/
/*  FILE: HND_Def.h                                                         */
/*  機能: HND-SDKの使用にあたって値の設定等に使用する定義を行う。           */
/*                                                                          */
/*  2001/06/14 Created.                                                     */
/*  2006/04/10 Modify.                                                      */
/*  Copyright (C)SEGA 2001/SYSTEM R&D DEPT                                  */
/*  Copyright (C)SEGA 2004-2006/Creative Center. Graphics Tool Section.     */
/****************************************************************************/
#ifndef __HND_DEF_H
#define __HND_DEF_H

enum {
	HND_XY   = 2,
	HND_UV   = HND_XY,
	HND_XYZ,
	HND_RGB  = HND_XYZ,
	HND_UVW  = HND_XYZ,
	HND_XYZW,
	HND_RGBA = HND_XYZW,
};

#define	HND_ROTATION_TYPE_QUATERNION		0

#define HND_TOOLNAME_SI3D					"SOFTIMAGE|3D"
#define HND_TOOLNAME_SIXSI					"SOFTIMAGE|XSI"
#define HND_TOOLNAME_LW						"LIGHTWAVE3D"
#define HND_TOOLNAME_MAX					"3ds max"
#define HND_TOOLNAME_MAYA					"MAYA"

/* バージョン定義を別ファイルで定義 */
#include "HND_Def_ToolVer.h"

/* シーン構造体：CoordinatesType用 */
#define HND_COORDINATESTYPE_RIGHT			0
#define HND_COORDINATESTYPE_LEFT			1

/* シーン構造体：AngleUnit用 */
#define HND_ANGLEUNIT_RADIAN				0	/* ver1.03.02/H00追加(デフォルト) */
#define HND_ANGLEUNIT_DEGREE				1	/* ver1.03.02/H00追加 */

/* オブジェクト構造：ScaleInheritType用 */
/* HND 0.90.05にて追加 */
#define HND_SCALEINHERITTYPE_CLASSIC		0
#define HND_SCALEINHERITTYPE_SI3D			1


/* ver0.90.00にて定義変更 */
#if 0
#define HND_ITEMTYPE_NULL					HNM_UNKNOWN
#define HND_ITEMTYPE_MODEL					HNM_MODEL
#define HND_ITEMTYPE_INSTANCEMODEL			HNM_INSTMDL
#define HND_ITEMTYPE_BONE					HNM_BONE
#define HND_ITEMTYPE_CAMERA					HNM_CAMERA
#define HND_ITEMTYPE_LIGHT					HNM_LIGHT
/* NULLと定義が重なっている為、Switch文に注意してください */
#define HND_ITEMTYPE_OTHER					HNM_UNKNOWN
#endif

/* ノード構造：回転の順番 */
#define HND_ROTATETYPE_XYZ					0
#define HND_ROTATETYPE_XZY					1
#define HND_ROTATETYPE_YZX					2
#define HND_ROTATETYPE_YXZ					3
#define HND_ROTATETYPE_ZXY					4
#define HND_ROTATETYPE_ZYX					5
#define HND_ROTATETYPE_QUATERNION			6
#define HND_ROTATETYPE_XYX					7
#define HND_ROTATETYPE_XZX					8
#define HND_ROTATETYPE_YXY					9
#define HND_ROTATETYPE_YZY					10
#define HND_ROTATETYPE_ZXZ					11
#define HND_ROTATETYPE_ZYZ					12

/* ノード構造：EnvRefNode */
#define HND_ENVREFNODE_UNKNOWN				0
#define HND_ENVREFNODE_NOTREFERENCE			1
#define HND_ENVREFNODE_REFERENCE			2


/* ポリゴン構造：PolygonType用 */
#define HND_POLYGONTYPE_R					0
#define HND_POLYGONTYPE_L					1

#if 0 // 2.00.00 廃止
#define HND_POLYGONTYPE_STRIP_R				2
#define HND_POLYGONTYPE_STRIP_L				3
#endif

/* マテリアル構造：ShadingType用 */
#define HND_SHADINGTYPE_CONSTANT			0
#define HND_SHADINGTYPE_LAMBERT				2
#define HND_SHADINGTYPE_PHONG				3
#define HND_SHADINGTYPE_BLINN				4
#define HND_SHADINGTYPE_SHADOW				5
#define HND_SHADINGTYPE_STRAUSS				6
#define HND_SHADINGTYPE_OTHERS				99

/* マテリアルクラスタ構造：VertexColor用 */
#define HND_VERTEXCOLOR_OFF					0
#define HND_VERTEXCOLOR_ON					1
#define HND_VERTEXCOLOR_BLEND_DIFFUSE		2

/* マテリアルクラスタ構造：VertexSpecularColor用 */
#define HND_VERTEXSPECULARCOLOR_OFF			0
#define HND_VERTEXSPECULARCOLOR_ON			1

/* テクスチャ構造：TextureType用 */
#define HND_TEXTURETYPE_AMBIENTCOLOR		0
#define HND_TEXTURETYPE_DIFFUSECOLOR		1
#define HND_TEXTURETYPE_SPECULARCOLOR		2
#define HND_TEXTURETYPE_SPECULARLEVEL		3
#define HND_TEXTURETYPE_OPACITY				4
#define HND_TEXTURETYPE_BUMPMAP				5
#define HND_TEXTURETYPE_REFLECTION			6
#define HND_TEXTURETYPE_DISPLACEMENT		7
#define HND_TEXTURETYPE_INTENSITY			8
#define HND_TEXTURETYPE_NORMALMAP			9
#define HND_TEXTURETYPE_TRANSPARENCY		10
#define HND_TEXTURETYPE_EMISSIVE			11
#define HND_TEXTURETYPE_SPECULARGLOSSINESS	12	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_DUALPARABOLOID		13	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_MASK_ENVIRONMENT	14	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_USER1				70	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_USER2				71	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_USER3				72	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_USER4				73	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_USER5				74	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_USER6				75	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_USER7				76	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_USER8				77	/* ver1.03.01/H00追加 */
#define HND_TEXTURETYPE_OTHERS				99

/* テクスチャ構造：TextureBlendType用 */
#define HND_TEXTUREBLENDTYPE_NONE				0
#define HND_TEXTUREBLENDTYPE_OVER				1
#define HND_TEXTUREBLENDTYPE_IN					2
#define HND_TEXTUREBLENDTYPE_OUT				3
#define HND_TEXTUREBLENDTYPE_ADD				4
#define HND_TEXTUREBLENDTYPE_ADD_BOUNDED		5
#define HND_TEXTUREBLENDTYPE_SUBTRACT			6
#define HND_TEXTUREBLENDTYPE_MULTIPLY			7
#define HND_TEXTUREBLENDTYPE_MULTIPLY_BOUNDED	8
#define HND_TEXTUREBLENDTYPE_DIFFERENCE			9
#define HND_TEXTUREBLENDTYPE_LIGHTEN			10
#define HND_TEXTUREBLENDTYPE_DARKEN				12
#define HND_TEXTUREBLENDTYPE_SATURATE			13
#define HND_TEXTUREBLENDTYPE_DESATURATE			14
#define HND_TEXTUREBLENDTYPE_ILLUMINATE			15
#define HND_TEXTUREBLENDTYPE_HARDLIGHT			16
#define HND_TEXTUREBLENDTYPE_SOFTLIGHT			17
#define HND_TEXTUREBLENDTYPE_SCREEN				18
#define HND_TEXTUREBLENDTYPE_OVERLAY			19
#define HND_TEXTUREBLENDTYPE_BLEND				20

/* テクスチャ構造：TextureMethod用 */
#define HND_TEXTUREMETHOD_UV				3
#define HND_TEXTUREMETHOD_ENVIRONMENTMAP	7
#define HND_TEXTUREMETHOD_OTHERS			99

/* テクスチャ構造：UVDirection用 */
#define HND_UVDIRECTION_TYPE1				0
#define HND_UVDIRECTION_TYPE2				1
#define HND_UVDIRECTION_TYPE3				2	/* ver0.80.07/H02追加 max用 中央が原点 */

/* テクスチャ構造：ClampType */
#define HND_CLAMPTYPE_IGNORE				0
#define HND_CLAMPTYPE_UVCLAMP				1
#define HND_CLAMPTYPE_UCLAMP				2
#define HND_CLAMPTYPE_VCLAMP				3

/* テクスチャ構造：SpaceType用 */
#define HND_SPACETYPE_TANGENT				0
#define HND_SPACETYPE_OBJECT				1
#define HND_SPACETYPE_WORLD					2

/* カメラ構造：CameraType */
#define HND_CAMERATYPE_VECTOR				0
#define HND_CAMERATYPE_TARGET_ROLL			1	/* ver0.80.00 TARGET-> TARGET_ROLL 変更 */
#define HND_CAMERATYPE_TARGET_UPTARGET		2	/* ver0.80.00 追加 */
#define HND_CAMERATYPE_VECTOR_ROLL			3	/* ver1.03.02/H00追加 */

/* カメラ構造：FovType ver1.03.02/H00 追加 */
#define HND_FOVTYPE_VERTICAL				0 // 垂直（HNDデフォルト）
#define HND_FOVTYPE_HORIZONTAL				1 // 水平

/* ライト構造：LightType */
#define HND_LIGHTTYPE_POINT					0
#define HND_LIGHTTYPE_AMBIENT				5
#define HND_LIGHTTYPE_DIRECTION				1
#define HND_LIGHTTYPE_SPOT					3
#define HND_LIGHTTYPE_OTHER					99

/* ライト構造：VectorType */
#define HND_LIGHTVECTYPE_VECTOR				0
#define HND_LIGHTVECTYPE_TARGET				1
#define HND_LIGHTVECTYPE_ZAXIS				2
#define HND_LIGHTVECTYPE_NONE				3
#define HND_LIGHTVECTYPE_OTHER				4

/* ライト構造：DeclineType */
#define HND_LIGHTDECLINETYPE_NONE			0
#define HND_LIGHTDECLINETYPE_REV			1
#define HND_LIGHTDECLINETYPE_REVPOW2		2
#define HND_LIGHTDECLINETYPE_REVPOW3		3

/* ライト構造：OuterRange,InnerRange */
#define HND_LIGHTRANGE_INFINITY				-1

/* ピクチャ構造：PictureType用 */
#define HND_PICTURETYPE_2D					0
#define HND_PICTURETYPE_3D					1

/* ピクチャ構造：AlphaType用 ver0.80.05追加 */
#define HND_ALPHATYPE_UNKNOWN				0
#define HND_ALPHATYPE_OPACITY				1
#define HND_ALPHATYPE_TRANSPARENCY			2
#define HND_ALPHATYPE_PUNCHTHROUGH			3

/* ティピカルフロートキー構造：Type用 */
#define SI_LINEAR							0x0000000101
#define SI_BEZIER							0x0000000102
#define SI_CONSTANT							0x0000000103
#define SI_LASTKEY							0x0000000104
#define SI_SPLINE							0x0000000105	/* 0.90.02 追加 */
#define SI_ONESHOT							0x0000000106	/* 0.90.04 追加 */

#define XSI_LINEAR							0x0000000201
#define XSI_BEZIER							0x0000000202
#define XSI_CONSTANT						0x0000000203
#define XSI_LASTKEY							0x0000000204
#define XSI_ONESHOT							0x0000000206	/* 0.90.04 追加 */

#define MAX_LINEAR							0x0000000401
#define MAX_BEZIER							0x0000000402
#define MAX_CONSTANT						0x0000000403
#define MAX_LASTKEY							0x0000000404
#define MAX_ONESHOT							0x0000000406	/* 0.90.04 追加 */

#define MAYA_LINEAR							0x0000000801
#define MAYA_BEZIER							0x0000000802
#define MAYA_CONSTANT						0x0000000803
#define MAYA_LASTKEY						0x0000000804
#define MAYA_ONESHOT						0x0000000806	/* 0.90.04 追加 */

/* モーション関連(Motion,LightMotion,CameraMotion等)の構造体：xxxDataType */
#define HND_KEYTYPE_STANDARD				HNM_FLOATKEY		/* ver0.90.00にて定義変更 */
#define HND_KEYTYPE_TYPICAL					HNM_TFLOATKEY		/* ver0.90.00にて定義変更 */
#define HND_KEYTYPE_QUATERNION				HNM_QUATERNIONKEY	/* ver0.90.00にて定義変更 */

#define HND_ERR_ERROR_START		0x00000000
#define HND_ERR_WARNING_START	0x01000000

#define HND_NOLENGTH						-1

typedef enum {
	HND_SUCCESS=HND_ERR_ERROR_START,
	HND_ERR_OUTOFMEMORY,		/*1		メモリ不足 */
	HND_ERR_NOALLOCATE,			/*		HNDメモリテーブルに存在しない(HnFree時) */
	HND_ERR_HANDLE_NULL,		/*		ハンドル自体のアドレスがNULLになっている */
	HND_ERR_HANDLE_NULLPOINTING,/*		管理領域がNULLアドレスになっている */
	HND_ERR_HANDLE_TYPE,		/*5		ハンドルが持つデータはこの関数では処理出来ない */
	HND_ERR_HANDLE_COUNT,		/*		指定した配列番号が０以下、又はハンドルの要素数を越えている */
	HND_ERR_WRONG_COUNT,		/*		要求された数と実際の数が違う */
	HND_ERR_SET_HANDLE_NULL,	/*		セットする側のハンドル自体のアドレスがNULLになっている */
	HND_ERR_SET_HANDLE_NULLPOINTING,/*	セットする側の管理領域がNULLアドレスになっている */
	HND_ERR_SET_HANDLE_TYPE,	/*10	セットする側のハンドルタイプが不正 */
	HND_ERR_SET_HANDLE_COUNT,	/*		セットする側のハンドルの要素数が不正 */
	HND_ERR_MEMBER_TYPE,		/*		渡されたメンバの型に関数が対応していない */
	HND_ERR_MEMBER_READONLY,	/*		渡されたメンバの型は読取専用である */
	HND_ERR_NOTFOUNDTARGET,		/*		対象は見つからなかった */
	HND_ERR_MISSMATCH_MEMBER,	/*		指定のメンバの属する構造のIDと処理対象ハンドルの構造IDが一致しない */
	HND_ERR_ARRAYPOSITION,		/*15	配列データの一部のみの参照が行われたが範囲を超えている */
	HND_ERR_STRING_NULL	,		/*		指定の文字列はNULLでした			*/
	HND_ERR_SYSTEM,				/*		システムエラー			*/
	HND_ERR_BUFFER_NULL,		/*		データを格納するバッファのアドレスがNULLになっている */

	/* HND_ERROR で値は返されるがLAST_ERROR扱いにはならないもの(code16777216以上) */
	HND_ERR_NODATA=HND_ERR_WARNING_START	/* データは無い(セットされていない) */

} HND_ERROR;



#endif
