140 lines
3.7 KiB
C
140 lines
3.7 KiB
C
/*****************
|
|
loadCB.c
|
|
Ver 1.0
|
|
|
|
LDT version of
|
|
physical objects
|
|
loading
|
|
*****************/
|
|
|
|
#include "ldt.h"
|
|
|
|
#define PostProcessPriority_PO 10
|
|
|
|
/*****************************************************************
|
|
Name:
|
|
Description: Create callback for LDT
|
|
Author: Mircea Petrescu
|
|
Date: 6/29/98
|
|
Modified:
|
|
*****************************************************************/
|
|
int PO_iCreateGeneral( LDT_tdst_Link *pLink )
|
|
{
|
|
PO_tdxHandleToPhysicalObject _hPhysicalObject;
|
|
|
|
_hPhysicalObject = PO_fn_hAllocPhysicalObject();
|
|
|
|
pLink->pObject=(void *)_hPhysicalObject;
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*****************************************************************
|
|
Name:
|
|
Description: Load callback for LDT
|
|
Author: Mircea Petrescu
|
|
Date: 6/29/98
|
|
Modified:
|
|
*****************************************************************/
|
|
HREF g_hRefPO;
|
|
|
|
#define iPOGeneral_VS 0
|
|
#define iCSGeneral_ZDR 1
|
|
|
|
|
|
int PO_iLoadGeneral( LDT_tdst_Link *pLink )
|
|
{
|
|
LDT_tdeParseResult result=ParseResult_BeginSection;
|
|
PO_tdxHandleToPhysicalObject _hPhysicalObject=( PO_tdxHandleToPhysicalObject )pLink->pObject;
|
|
|
|
char sFile[MAX_PATH], sParent[MAX_PATH], sAction[MAX_PATH], sIdent[MAX_PATH];
|
|
char sz_SectionNameForCS[MAX_PATH];
|
|
|
|
char sz_LongPathForLinkTable[MAX_PATH];
|
|
int iLen=LDT_ComputeSectionName(pLink,sz_LongPathForLinkTable);
|
|
SCR_M_v_Link_SetAdditionalLong(SCR_fnp_st_Link_SetValue(&PO_g_stLinkTable,sz_LongPathForLinkTable,(unsigned long)_hPhysicalObject),1,iLen);
|
|
|
|
while( result!=ParseResult_EndSection )
|
|
{
|
|
result=LDT_GetNextEntry();
|
|
switch( result )
|
|
{
|
|
case ParseResult_Entry: /* an entry */
|
|
{
|
|
char *szEntry=LDT_szGetEntryName();
|
|
switch (*(short *)szEntry)
|
|
{
|
|
case 'SV' : /* VS */
|
|
{
|
|
_hPhysicalObject->_hVisualSet = (GEO_tdxHandleToVisualSet)LDT_LoadSection( LDT_szGetParam( 1 ) );
|
|
|
|
LDT_AddToRefsTable( g_hRefPO, (void *)pLink, iPOGeneral_VS, 0 );
|
|
}
|
|
break;
|
|
case 'SC' : /* CS */
|
|
{
|
|
LDT_SplitSectionName( LDT_szGetParam( 1 ), sFile, sParent, sAction, sIdent);
|
|
strcpy(sz_SectionNameForCS,sFile);
|
|
strcat(sz_SectionNameForCS,"^");
|
|
strcat(sz_SectionNameForCS,C_Section_AllCollideSets);
|
|
strcat(sz_SectionNameForCS,":^");
|
|
if( sParent[0] )
|
|
{
|
|
strcat(sz_SectionNameForCS,sParent);
|
|
strcat(sz_SectionNameForCS,":");
|
|
}
|
|
strcat(sz_SectionNameForCS,sAction);
|
|
strcat(sz_SectionNameForCS,":");
|
|
strcat(sz_SectionNameForCS,sIdent);
|
|
|
|
_hPhysicalObject->_hCollideSet = (PCS_tdxHandleToPhysicalCollSet)LDT_LoadSection( sz_SectionNameForCS );
|
|
}
|
|
break;
|
|
case 'VB' : /* BV -bounding volume */
|
|
{
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void PO_vPostProcessLDT( 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 )
|
|
{
|
|
switch( iType )
|
|
{
|
|
case iPOGeneral_VS:
|
|
{
|
|
PO_tdxHandleToPhysicalObject _hPhysicalObject=( PO_tdxHandleToPhysicalObject )pObject->pObject;
|
|
HIE_fn_vComputeOnePoBoundingVolume(_hPhysicalObject);
|
|
}
|
|
break;
|
|
case iCSGeneral_ZDR:
|
|
{
|
|
ACP_tdxHandleOfObject _hGeometricObject=(ACP_tdxHandleOfObject)pGetFrom->pObject;
|
|
PCS_tdxHandleToPhysicalCollSet _hCollideSet=(PCS_tdxHandleToPhysicalCollSet)pObject->pObject;
|
|
COL_fn_bCreateOctree(_hGeometricObject,10,5,4);
|
|
PCS_fn_vSetZdrGeoObjOfPhysicalCollSet(_hCollideSet,_hGeometricObject);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void PO_fn_vRegisterAllScriptSections(void)
|
|
{
|
|
LDT_RegisterType( C_Section_POGeneral, PO_iCreateGeneral, PO_iLoadGeneral, LDT_REG_SECTION );
|
|
g_hRefPO=LDT_RegisterSolver( PO_vPostProcessLDT, PostProcessPriority_PO );
|
|
}
|