/*---------------------------------------------------------------------------

    NN Light library for DXG20

    Copyright (C) 2002, 2003 SEGA Corporation Creative Center Graphics Sect.
    All Rights Reserved.

    Module  : NN Light Library for DXG20
    File    : nnlightxe.h
    Create  : 2003/06/05
    Modify  : 2003/06/05
    Modify  : 2003/07/14 Xbox,PC共通化向けの修正
    Modify  : 2003/11/13 ライトパラメータ管理情報を追加
    Modify  : 2003/11/21 Xbox用減衰パラメータ設定関数 nnSetLightAttnDX を追加
                         減衰パラメータ保持用のメンバ変数を追加
    Modify  : 2004/06/22 nngLightMtx変数をnndobjectxe.hから移動
    Modify  : 2004/08/05 nnSetLightSpotAngleDX関数追加
    Modify  : 2004/09/10 nnSetLightRangeDX関数を削除してnnSetLightFallOff関数に統合
    Modify  : 2009/05/12 ヘッダ整理
    Version : 1.16.51
    Note    :

---------------------------------------------------------------------------*/
#ifndef __NNLIGHTDXG20_H__
#define __NNLIGHTDXG20_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#define	NND_LIGHT_MAX_BUFFER_SIZE	(sizeof( NNS_LIGHT_ROTATION_SPOT ))

typedef struct {
    D3DLIGHTTYPE    Type;
    D3DCOLORVALUE   Diffuse;
    D3DCOLORVALUE   Specular;
    D3DCOLORVALUE   Ambient;
    D3DVECTOR       Position;
    D3DVECTOR       Direction;
    float           Range;
    float           Falloff;
    float           Attenuation0;
    float           Attenuation1;
    float           Attenuation2;
    float           Theta;
    float           Phi;
} NNS_D3DLIGHT;

typedef struct {
	NNE_BOOL		Enable;
	NNF_LIGHTTYPE	fType;
	NNS_VECTOR		Position;
	NNS_VECTOR		Direction;
	NNS_RGBA		LightColor;
	NNS_VECTOR		Target;
	NNS_ROTATE_A32	Rotate;
	NNE_ROTATETYPE	RotType;
	Float			Intensity;
	Float			InnerRange;
	Float			OuterRange;
	Float			FallOffStart;
	Float			FallOffEnd;
	NNS_D3DLIGHT	D3DLight;
} NNS_DX_LIGHT_DATA;

typedef struct{
	Sint32			DirLightNum;			// 現在登録かつ有効になっている平行光源の数
	Sint32			PointLightNum;			// 現在登録かつ有効になっている点光源の数
	Sint32			TgtSpotLightNum;		// 現在登録かつ有効になっているターゲットスポット光源の数
	Sint32			RotSpotLightNum;		// 現在登録かつ有効になっているローテーションスポット光源の数
	NNS_RGBA		AmbientColor;
#if 0 /* 2008.01.28(使ってない) */
	Uint32			Ambient;
#endif
	NNS_DX_LIGHT_DATA	LightData[NNE_LIGHT_MAX];
} NNS_DX_LIGHT;


/* 標準シェーダーライト定数構造体 */
typedef struct{
	NNS_RGBA		ambient;
	NNS_RGBA		diffuse;
	NNS_RGBA		specular;
	NNS_VECTOR4D	position;
	NNS_VECTOR4D	halfVector;
	NNS_VECTOR4D	spotDirection;
	Float			spotExponent;
	Float			spotCutoff;
	Float			spotCosCutoff;
	Float			constantAttenuation;
	Float			linearAttenuation;
	Float			quadraticAttenuation;
} NNS_STDSHADER_LIGHT_SOURCE_PARAMETERS;

extern NNS_DX_LIGHT	nngLight;

extern	NNS_MATRIX	nngLightMtx;

extern NNS_STDSHADER_LIGHT_SOURCE_PARAMETERS	nngStdShaderLight[NNE_LIGHT_MAX];
extern Sint32									nngNumParallelLight;
extern Sint32									nngNumPointLight;
extern Sint32									nngNumSpotLight;
extern Float									nngPointLightFallOffEnd[NNE_LIGHT_MAX];
extern Float									nngPointLightFallOffScale[NNE_LIGHT_MAX];
extern Float									nngSpotLightFallOffEnd[NNE_LIGHT_MAX];
extern Float									nngSpotLightFallOffScale[NNE_LIGHT_MAX];
extern Float									nngSpotLightAngleScale[NNE_LIGHT_MAX];


void nnSetLightAttnDXG20( NNE_LIGHT no, Float att0, Float att1, Float att2 );
void nnSetLightSpotAngleDXG20( NNE_LIGHT no, Angle32 theta, Angle32 phi, Float falloff );
void nnSetLightDiffuseColorDXG20( NNE_LIGHT no, Float r, Float g, Float b, Float a );
void nnSetLightSpecularColorDXG20( NNE_LIGHT no, Float r, Float g, Float b, Float a );
void nnSetLightAmbientColorDXG20( NNE_LIGHT no, Float r, Float g, Float b, Float a );


#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __NNLIGHTDXG20_H__ */

/* End of file */
