373 lines
11 KiB
C
373 lines
11 KiB
C
/* (c) Ubi Studios 1998*/
|
|
|
|
/*For game material*/
|
|
#include "GMT/GmtHandl.h"
|
|
|
|
#include "ACP_base.h"
|
|
/*memory management of geometry.*/
|
|
#include "GEO.h"
|
|
#include "GLI.h"
|
|
#include "SCR.h"
|
|
|
|
/*Include For "Sector.h"*/
|
|
#include "MTH.h"
|
|
#include "COL.h"
|
|
#include "SPO.h"
|
|
#include "LST.h"
|
|
|
|
#include "VIG.h"
|
|
|
|
/*For the sound*/
|
|
#include "SND.h"
|
|
|
|
#include "SCT.h"
|
|
|
|
/*PATH NAME*/
|
|
#include "DPT.h"
|
|
|
|
#include "SNA.h"
|
|
|
|
#include "ldt.h"
|
|
|
|
extern SCR_tdst_Link_Table SECT_stLinkTable;
|
|
|
|
#define lTagMinPointOfBorder 'PniM'
|
|
#define lTagMaxPointOfBorder 'PxaM'
|
|
#define lTagZmaxOfBorder 'xamZ'
|
|
|
|
#define lTagAddLst 'LddA'
|
|
#define lTagAddLstActivity 'itcA'
|
|
#define lTagAddLstGraphic 'parG'
|
|
#define lTagAddLstCollision 'lloC'
|
|
#define lTagAddLstSound 'nuoS'
|
|
#define lTagVirtual 'triV'
|
|
#define lTagCameraType 'emaC'
|
|
#define lTagZFar 'raFZ'
|
|
|
|
|
|
/*****************************************************************
|
|
Function name : fn_iCreateSector
|
|
Description :
|
|
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
|
|
Creation Date : 14-Oct-98
|
|
Modified :
|
|
Return type : int
|
|
Argument : LDT_tdst_Link *pLink
|
|
*****************************************************************/
|
|
int fn_iCreateSector( LDT_tdst_Link *pLink )
|
|
{
|
|
/* new Sector for that section*/
|
|
pLink->pObject = (void*)SECT_fn_hCreateSector();
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/*****************************************************************
|
|
Function name : fn_iLoadSector
|
|
Description :
|
|
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
|
|
Creation Date : 14-Oct-98
|
|
Modified :
|
|
Return type : int
|
|
Argument : LDT_tdst_Link *pLink
|
|
*****************************************************************/
|
|
int fn_iLoadSector( LDT_tdst_Link *pLink )
|
|
{
|
|
LDT_tdeParseResult result=ParseResult_BeginSection;
|
|
char a255_cLinkKey[255];
|
|
SECT_tdxHandleOfSectorObject hNewSector = (SECT_tdxHandleOfSectorObject)pLink->pObject;
|
|
int nLen;
|
|
|
|
VIG_fn_vAddToProgressBar(1);
|
|
nLen = LDT_ComputeSectionName( pLink, a255_cLinkKey );
|
|
#ifdef _DEBUG
|
|
strcpy(hNewSector->szSectorName, a255_cLinkKey);
|
|
#endif /* _DEBUG */
|
|
|
|
SCR_M_v_Link_SetAdditionalLong(
|
|
SCR_fnp_st_Link_SetValue(&SECT_stLinkTable, a255_cLinkKey, (unsigned long)hNewSector),
|
|
1, nLen) ;
|
|
|
|
do{
|
|
result=LDT_GetNextEntry();
|
|
if( result== ParseResult_BeginSection )
|
|
LDT_LoadSection( NULL );
|
|
}while ( result!=ParseResult_EndSection );
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/*****************************************************************
|
|
Function name : fn_iLoadSectorBorder
|
|
Description :
|
|
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
|
|
Creation Date : 14-Oct-98
|
|
Modified :
|
|
Return type : int
|
|
Argument : LDT_tdst_Link *pLink
|
|
*****************************************************************/
|
|
int fn_iLoadSectorBorder( LDT_tdst_Link *pLink )
|
|
{
|
|
LDT_tdeParseResult result=ParseResult_BeginSection;
|
|
SECT_tdxHandleOfSectorObject hSector = (SECT_tdxHandleOfSectorObject)pLink->pParent->pObject;
|
|
MTH3D_tdstVector stMaxPoint, stMinPoint;
|
|
|
|
|
|
while( result!=ParseResult_EndSection )
|
|
{
|
|
result=LDT_GetNextEntry();
|
|
switch( result )
|
|
{
|
|
case ParseResult_Entry: /* an entry */
|
|
{
|
|
char *szEntry=LDT_szGetEntryName();
|
|
switch (*(long*)szEntry)
|
|
{
|
|
|
|
case lTagMinPointOfBorder : /* */
|
|
{
|
|
MTH3D_M_vSetVectorElements(&stMinPoint,
|
|
GLI_M_FloatToValue(atof(LDT_szGetParam(1))),
|
|
GLI_M_FloatToValue(atof(LDT_szGetParam(2))),
|
|
GLI_M_FloatToValue(atof(LDT_szGetParam(3))));
|
|
SECT_fn_vSetMinPointInBorder(hSector, &stMinPoint);
|
|
|
|
}
|
|
break;
|
|
case lTagMaxPointOfBorder : /* */
|
|
{
|
|
MTH3D_M_vSetVectorElements(&stMaxPoint,
|
|
GLI_M_FloatToValue(atof(LDT_szGetParam(1))),
|
|
GLI_M_FloatToValue(atof(LDT_szGetParam(2))),
|
|
GLI_M_FloatToValue(atof(LDT_szGetParam(3))));
|
|
SECT_fn_vSetMaxPointInBorder(hSector, &stMaxPoint);
|
|
}
|
|
break;
|
|
case lTagZmaxOfBorder : /* */
|
|
{
|
|
stMaxPoint.xX = stMaxPoint.xY = MTH_C_InfinitMinus;
|
|
stMaxPoint.xZ = GLI_M_FloatToValue(atof(LDT_szGetParam(1)));
|
|
SECT_fn_vSetMaxPointInBorder(hSector, &stMaxPoint);
|
|
|
|
#ifdef ACTIVE_EDITOR
|
|
SECT_fn_vSetZmaxOfBorder(hSector, GLI_M_FloatToValue(atof(LDT_szGetParam(1))));
|
|
#endif /*ACTIVE_EDITOR*/
|
|
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/*****************************************************************
|
|
Function name : fn_iLoadSectorsLink
|
|
Description :
|
|
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
|
|
Creation Date : 14-Oct-98
|
|
Modified :
|
|
Return type : int
|
|
Argument : LDT_tdst_Link *pLink
|
|
*****************************************************************/
|
|
int fn_iLoadSectorsLink( LDT_tdst_Link *pLink )
|
|
{
|
|
LDT_tdeParseResult result=ParseResult_BeginSection;
|
|
SECT_tdxHandleOfSectorObject hSector = (SECT_tdxHandleOfSectorObject)pLink->pParent->pObject;
|
|
SECT_tdxHandleOfElementLstGraphicInteraction hGElement;
|
|
SECT_tdxHandleOfElementLstCollisionInteraction hColElement;
|
|
SECT_tdxHandleOfElementLstActivityInteraction hActElement;
|
|
SECT_tdxHandleOfElementLstSoundInteraction hSoundElement;
|
|
SCT_tdxHandleOfLstSoundEvent hSoundEventElement;
|
|
|
|
while( result!=ParseResult_EndSection )
|
|
{
|
|
result=LDT_GetNextEntry();
|
|
switch( result )
|
|
{
|
|
case ParseResult_Entry: /* an entry */
|
|
{
|
|
char *szEntry=LDT_szGetEntryName();
|
|
switch (*(long*)szEntry)
|
|
{
|
|
|
|
case lTagAddLst : /* */
|
|
{
|
|
switch (*(long*)(szEntry+6))
|
|
{
|
|
|
|
case lTagAddLstActivity : /* */
|
|
{
|
|
HIE_tdxHandleToSuperObject hSPO = (HIE_tdxHandleToSuperObject)LDT_LoadSection(LDT_szGetParam(1));
|
|
if (hSPO)
|
|
{
|
|
hActElement=SECT_fn_hCreateElementLstActivityInteraction();
|
|
SECT_fn_vSetSectorPointedElementLSTActivityInt(hActElement, hSPO);
|
|
LST2_M_StaticAddTail(&(hSector->stListOfSectorsInActivityInteraction),hActElement);
|
|
|
|
}
|
|
|
|
}
|
|
break;
|
|
case lTagAddLstGraphic : /* */
|
|
{
|
|
HIE_tdxHandleToSuperObject hSPO = (HIE_tdxHandleToSuperObject)LDT_LoadSection(LDT_szGetParam(1));
|
|
if (hSPO)
|
|
{
|
|
hGElement=SECT_fn_hCreateElementLstGraphicInteraction();
|
|
SECT_fn_vSetSectorPointedElementLSTGraphicInt(hGElement, hSPO);
|
|
SECT_fn_vSetLevelElementLSTGraphicInt(hGElement, (short)atoi(LDT_szGetParam(2)));
|
|
LST2_M_StaticAddTail(&(hSector->stListOfSectorsInGraphicInteraction),hGElement);
|
|
}
|
|
|
|
}
|
|
break;
|
|
case lTagAddLstCollision : /* */
|
|
{
|
|
HIE_tdxHandleToSuperObject hSPO = (HIE_tdxHandleToSuperObject)LDT_LoadSection(LDT_szGetParam(1));
|
|
if (hSPO)
|
|
{
|
|
hColElement=SECT_fn_hCreateElementLstCollisionInteraction();
|
|
SECT_fn_vSetSectorPointedElementLSTCollisionInt(hColElement, hSPO);
|
|
LST2_M_StaticAddTail(&(hSector->stListOfSectorsInCollisionInteraction),hColElement);
|
|
}
|
|
|
|
}
|
|
break;
|
|
case lTagAddLstSound : /* */
|
|
{
|
|
if (strlen(szEntry)>12) /*AddLstSoundEvent*/
|
|
{
|
|
if( strcmp(LDT_szGetParam(1),"FromAllSectors")==0 )
|
|
{
|
|
SND_tdxHandleToSoundEvent handle;
|
|
hSoundEventElement = SCT_fn_hCreateElementLstSoundEvent();
|
|
SCT_fn_vSetSectorPointedElementLSTSoundEvent(hSoundEventElement,NULL);
|
|
handle = (SND_tdxHandleToSoundEvent) LDT_LoadSection(LDT_szGetParam(2));
|
|
if(handle)
|
|
{
|
|
if (SNA_fn_ucGetLoadType()==SNA_SAVE_SNAPSHOT) /* MR0110*/
|
|
SNA_fn_vWriteSoundEntryInSoundTableFile(SND_fn_ulGetEventBinIdFromPointer(handle) ,(unsigned long)&(hSoundEventElement->uSoundEvent.pstPtr));
|
|
SCT_fn_vSetEventListElementLSTSoundEvent(hSoundEventElement, handle);
|
|
}
|
|
LST2_M_StaticAddTail(&(hSector->stListOfSoundEvent),hSoundEventElement);
|
|
}
|
|
else
|
|
{
|
|
HIE_tdxHandleToSuperObject hSPO = (HIE_tdxHandleToSuperObject)LDT_LoadSection(LDT_szGetParam(1));
|
|
if (hSPO)
|
|
{
|
|
SND_tdxHandleToSoundEvent handle;
|
|
hSoundEventElement=SCT_fn_hCreateElementLstSoundEvent();
|
|
SCT_fn_vSetSectorPointedElementLSTSoundEvent(hSoundEventElement, hSPO);
|
|
handle = (SND_tdxHandleToSoundEvent) LDT_LoadSection(LDT_szGetParam(2));
|
|
if(handle)
|
|
{
|
|
if (SNA_fn_ucGetLoadType()==SNA_SAVE_SNAPSHOT) /* MR0110*/
|
|
SNA_fn_vWriteSoundEntryInSoundTableFile(SND_fn_ulGetEventBinIdFromPointer(handle) ,(unsigned long)&(hSoundEventElement->uSoundEvent.pstPtr));
|
|
SCT_fn_vSetEventListElementLSTSoundEvent(hSoundEventElement, handle);
|
|
}
|
|
LST2_M_StaticAddTail(&(hSector->stListOfSoundEvent),hSoundEventElement);
|
|
}
|
|
}
|
|
|
|
}
|
|
else /*AddLstSound*/
|
|
{
|
|
HIE_tdxHandleToSuperObject hSPO = (HIE_tdxHandleToSuperObject)LDT_LoadSection(LDT_szGetParam(1));
|
|
if (hSPO)
|
|
{
|
|
hSoundElement=SECT_fn_hCreateElementLstSoundInteraction();
|
|
SECT_fn_vSetSectorPointedElementLSTSoundInt(hSoundElement, hSPO);
|
|
SCT_fn_vSetVolumeLSTSoundInt(hSoundElement,atol(LDT_szGetParam(2)));
|
|
LST2_M_StaticAddTail(&(hSector->stListOfSectorsInSoundInteraction),hSoundElement);
|
|
}
|
|
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case lTagVirtual : /* */
|
|
{
|
|
SECT_fn_vSetOnVirtualSector(hSector);
|
|
}
|
|
break;
|
|
case lTagCameraType : /* */
|
|
{
|
|
hSector->cCameraType = atoi(LDT_szGetParam(1));
|
|
}
|
|
break;
|
|
case lTagZFar : /* */
|
|
{
|
|
hSector->xZFar = (MTH_tdxReal) atof(LDT_szGetParam(1));
|
|
}
|
|
break;
|
|
case 'oirP' : /* Priority */
|
|
{
|
|
SECT_fn_vSetSectorPriority(hSector, (char)atoi(LDT_szGetParam(1)));
|
|
}
|
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
/*****************************************************************
|
|
Function name : fn_iLoadStaticLightsSector
|
|
Description :
|
|
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
|
|
Creation Date : 14-Oct-98
|
|
Modified :
|
|
Return type : int
|
|
Argument : LDT_tdst_Link *pLink
|
|
*****************************************************************/
|
|
int fn_iLoadStaticLightsSector( LDT_tdst_Link *pLink )
|
|
{
|
|
LDT_tdeParseResult result=ParseResult_BeginSection;
|
|
SECT_tdxHandleOfSectorObject hSector = (SECT_tdxHandleOfSectorObject)pLink->pParent->pObject;
|
|
SECT_tdxHandleOfElementLstStaticLights hStaticLightsElement;
|
|
|
|
while( result!=ParseResult_EndSection )
|
|
{
|
|
result=LDT_GetNextEntry();
|
|
switch( result )
|
|
{
|
|
case ParseResult_Entry: /* an entry */
|
|
{
|
|
GLI_tdxHandleToLight hLight= (GLI_tdxHandleToLight)LDT_LoadSection(LDT_szGetParam(1));
|
|
|
|
if(hLight)
|
|
{
|
|
hStaticLightsElement=SECT_fn_hCreateElementLstStaticLights();
|
|
SECT_fn_vSetHandleOfLightsInStaticLightsList(hStaticLightsElement,hLight);
|
|
LST2_M_StaticAddTail(&(hSector->stListOfStaticLights),hStaticLightsElement);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
}
|
|
|