reman3/Rayman_X/cpa/tempgrp/SCT/P5/sectLoadCB.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;
}