202 lines
6.8 KiB
C
202 lines
6.8 KiB
C
#include "ldt.h"
|
|
|
|
HREF g_hRefLight;
|
|
|
|
void fn_vPostProcessLight ( HREF hRef )
|
|
{
|
|
LDT_tdst_Link *pObject;
|
|
LDT_tdst_Link *pGetFrom;
|
|
int iType;
|
|
short xCount;
|
|
long *pVal;
|
|
|
|
while( LDT_GetRefFromTable( hRef, &pObject, &pGetFrom, &iType, &xCount, &pVal )==0 )
|
|
{
|
|
POS_tdstCompletePosition * p_stMatrix = (POS_tdstCompletePosition *)pGetFrom->pObject;
|
|
LGT_tdxHandleToLight hLight=(LGT_tdxHandleToLight)pObject->pObject;
|
|
|
|
GLI_xSetLightMatrix(hLight,p_stMatrix);
|
|
|
|
/* ATTENTION : dans light il y a une matrix et non un pointeur sur matrix*/
|
|
/* La matrice est donc (sauvagement) recopiée.*/
|
|
/* En toute rigueur je devrais libérer p_stMatrix, mais, à terme,*/
|
|
/* je pense que light contiendra un pointeur (sigh...)*/
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*****************************************************************
|
|
Name:
|
|
Description: Create callback for LDT
|
|
Author: Mircea Petrescu
|
|
Date: 8/25/98
|
|
Modified:
|
|
*****************************************************************/
|
|
int fn_iCreateLight( LDT_tdst_Link *pLink )
|
|
{
|
|
LGT_tdxHandleToLight hLight;
|
|
|
|
GLI_xCreateLight(&hLight, 0);
|
|
|
|
pLink->pObject=(void *)hLight;
|
|
return 0;
|
|
}
|
|
|
|
/*****************************************************************
|
|
Name:
|
|
Description: Load callback for LDT
|
|
Author: Mircea Petrescu
|
|
Date: 8/26/98
|
|
Modified:
|
|
*****************************************************************/
|
|
int fn_iLoadLight( LDT_tdst_Link *pLink )
|
|
{
|
|
LDT_tdeParseResult result=ParseResult_BeginSection;
|
|
LGT_tdxHandleToLight hLight=(LGT_tdxHandleToLight)pLink->pObject;
|
|
POS_tdstCompletePosition *p_stMatrix;
|
|
long lOnOff;
|
|
GEO_tdstColor stColor;
|
|
long lTypeOfLight;
|
|
char a255_cLongName[255];
|
|
MTH3D_tdstVector myGetVector;
|
|
char *szName=LDT_szGetParam(1);
|
|
int iLen;
|
|
|
|
if(stricmp(szName,"Parallel")==0) lTypeOfLight=GLI_C_lParallelLight;
|
|
else if(stricmp(szName,"Spherical")==0) lTypeOfLight=GLI_C_lSphericalLight;
|
|
else if(stricmp(szName,"HotSpot")==0) lTypeOfLight=GLI_C_lHotSpotLight;
|
|
else if(stricmp(szName,"Ambient")==0) lTypeOfLight=GLI_C_lAmbientLight;
|
|
else if(stricmp(szName,"ParallelBox")==0) lTypeOfLight=GLI_C_lParallelLight_With_Limit;
|
|
else if(stricmp(szName,"Fog")==0) lTypeOfLight=GLI_C_lFogLight;
|
|
|
|
GLI_vSetLightType( hLight, lTypeOfLight );
|
|
|
|
iLen=LDT_ComputeSectionName(pLink,a255_cLongName);
|
|
SCR_M_v_Link_SetAdditionalLong(SCR_fnp_st_Link_SetValue(LGT_fn_p_stGetLightLinkTable(), a255_cLongName, (unsigned long)hLight), 1, iLen);
|
|
|
|
while( result!=ParseResult_EndSection )
|
|
{
|
|
result=LDT_GetNextEntry();
|
|
switch( result )
|
|
{
|
|
case ParseResult_Entry: /* an entry */
|
|
{
|
|
char *szEntry=LDT_szGetEntryName();
|
|
switch (*(long*)szEntry)
|
|
{
|
|
case 'SteS' : /* SetState */
|
|
{
|
|
lOnOff=atoi( LDT_szGetParam( 1 ) );
|
|
GLI_xSetLightState(hLight, lOnOff);
|
|
}
|
|
break;
|
|
case 'CteS' : /* SetColor */
|
|
{
|
|
stColor.xR=(GEO_tdxColorValue)atof( LDT_szGetParam( 1 ) );
|
|
stColor.xG=(GEO_tdxColorValue)atof( LDT_szGetParam( 2 ) );
|
|
stColor.xB=(GEO_tdxColorValue)atof( LDT_szGetParam( 3 ) );
|
|
stColor.xA=(GEO_tdxColorValue)atof( LDT_szGetParam( 4 ) );
|
|
|
|
GLI_xSetLightColor(hLight,&stColor);
|
|
}
|
|
break;
|
|
case 'NteS' : /* SetNearFar */
|
|
{
|
|
GLI_vSetLightNearFar( hLight, MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 1 ) )), MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 2 ) )));
|
|
}
|
|
break;
|
|
case 'AteS' : /* SetAlphas */
|
|
{
|
|
GLI_vSetLightAlphas( hLight, MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 1 ) )), MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 2 ) )));
|
|
}
|
|
break;
|
|
case 'MteS' : /* SetMatrix */
|
|
{
|
|
p_stMatrix = (POS_tdstCompletePosition *)LDT_LoadSection( LDT_szGetParam(1) );
|
|
|
|
LDT_AddToRefsTable( g_hRefLight, pLink, 0, 0 );
|
|
|
|
}
|
|
break;
|
|
case 'ejbO' : /* ObjectLighted */
|
|
{
|
|
GLI_vSetObjectLighted(hLight,(unsigned char)atoi( LDT_szGetParam( 1 ) ));
|
|
}
|
|
break;
|
|
case 'niaP' : /* PaintLight */
|
|
{
|
|
GLI_vSetPaintLight(hLight);
|
|
}
|
|
break;
|
|
case 'lAoN' : /* NoAlphaLight */
|
|
{
|
|
GLI_vSetAlphaLightFlag (hLight, 2);
|
|
}
|
|
break;
|
|
case 'hplA' : /* AlphaLight */
|
|
{
|
|
GLI_vSetAlphaLight(hLight);
|
|
}
|
|
break;
|
|
case 'IteS' :
|
|
switch( *(long *)(szEntry+8) )
|
|
{
|
|
case 'PniM' : /* SetInterMinPos */
|
|
{
|
|
myGetVector.xX = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 1 ) ));
|
|
myGetVector.xY = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 2 ) ));
|
|
myGetVector.xZ = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 3 ) ));
|
|
GLI_vSetLight_Inter_Min_Pos( hLight,myGetVector );
|
|
}
|
|
break;
|
|
case 'PxaM' : /* SetInterMaxPos */
|
|
{
|
|
myGetVector.xX = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 1 ) ));
|
|
myGetVector.xY = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 2 ) ));
|
|
myGetVector.xZ = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 3 ) ));
|
|
GLI_vSetLight_Inter_Max_Pos( hLight,myGetVector );
|
|
}
|
|
break;
|
|
case 'ytis' : /* SetIntensityMinMax */
|
|
{
|
|
GLI_vSetLight_Intensity_Min_Max( hLight, MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 1 ) )), MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 2 ) )));
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case 'EteS' :
|
|
if( szEntry[9]=='i' ) /* SetExterMinPos */
|
|
{
|
|
myGetVector.xX = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 1 ) ));
|
|
myGetVector.xY = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 2 ) ));
|
|
myGetVector.xZ = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 3 ) ));
|
|
GLI_vSetLight_Exter_Min_Pos( hLight,myGetVector );
|
|
}
|
|
else /* SetExterMaxPos */
|
|
{
|
|
myGetVector.xX = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 1 ) ));
|
|
myGetVector.xY = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 2 ) ));
|
|
myGetVector.xZ = MTH_M_xFloatToReal((float)atof( LDT_szGetParam( 3 ) ));
|
|
GLI_vSetLight_Exter_Max_Pos( hLight,myGetVector );
|
|
}
|
|
break;
|
|
case 'kcaB' : /* BackgroundColor */
|
|
{
|
|
stColor.xR=(GEO_tdxColorValue)atof( LDT_szGetParam( 1 ) );
|
|
stColor.xG=(GEO_tdxColorValue)atof( LDT_szGetParam( 2 ) );
|
|
stColor.xB=(GEO_tdxColorValue)atof( LDT_szGetParam( 3 ) );
|
|
stColor.xA=(GEO_tdxColorValue)atof( LDT_szGetParam( 4 ) );
|
|
|
|
GLI_xSetLightBackgroundColor(hLight,&stColor);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|