reman3/Rayman_X/cpa/tempgrp/GliGlou/MultiDRV/Src/lgtloadCB.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;
}