286 lines
9.0 KiB
C
286 lines
9.0 KiB
C
/*BEGIN FS 10/8/98*/
|
||
#include "Ldt.h"
|
||
/*END FS 10/8/98*/
|
||
|
||
/*BEGIN FS 9/14/98*/
|
||
/*#if defined(AI_USE_SCRIPT)*/
|
||
/*----------------------------------------------------------------------
|
||
* Description: callback for WayPoint section from .WP script file
|
||
*----------------------------------------------------------------------
|
||
* Input:
|
||
* Output:
|
||
*----------------------------------------------------------------------
|
||
* Author: FS
|
||
* Creation date:9/14/98
|
||
* Modif date:
|
||
*----------------------------------------------------------------------*/
|
||
int LoadWP_WayPoint( LDT_tdst_Link *pLink )
|
||
{
|
||
LDT_tdeParseResult result=ParseResult_BeginSection;
|
||
char *szEntryName;
|
||
|
||
/* ANNECY MT - 16/09/98 {*/
|
||
WP_tdhWayPoint hWaypoint;
|
||
char szCompleteName [255];
|
||
/* char szWaypointName[255];*/
|
||
MTH3D_tdstVector stAbsolutePosition;
|
||
HIE_tdxHandleToSuperObject h_SOSector;
|
||
HIE_tdxHandleToSuperObject hSuperObjParent;
|
||
|
||
static struct tdstEngineObject_ *hObjectParent;
|
||
static MTH3D_tdstVector stVertex;
|
||
static MTH_tdxReal xRadius;
|
||
|
||
/*Working for BeginSection*/
|
||
MTH3D_M_vNullVector(&stVertex);
|
||
xRadius = MTH_C_ZERO;
|
||
hObjectParent = NULL;
|
||
|
||
/* Working for Entries*/
|
||
result=LDT_GetNextEntry();
|
||
while( result!=ParseResult_EndSection )
|
||
{
|
||
szEntryName=LDT_szGetEntryName();
|
||
switch (*(long*)(szEntryName))
|
||
{
|
||
case 'treV': /*"Vertex"*/
|
||
/* load the vertex*/
|
||
stVertex.xX = MTH_M_xFloatToReal((float) atof(LDT_szGetParam(1)));
|
||
stVertex.xY = MTH_M_xFloatToReal((float) atof(LDT_szGetParam(2)));
|
||
stVertex.xZ = MTH_M_xFloatToReal((float) atof(LDT_szGetParam(3)));
|
||
break;
|
||
case 'idaR': /*"Radius"*/
|
||
/* load the radius */
|
||
xRadius = MTH_M_xFloatToReal((float) atof(LDT_szGetParam(1)));
|
||
break;
|
||
case 'htaF': /*"Father"*/
|
||
char szForScript[256];
|
||
SCR_tdst_Link_Value *p_stValue;
|
||
|
||
strcpy(szForScript,fn_szGetLevelsDataPath());
|
||
strcat(szForScript,"\\");
|
||
strcat(szForScript,LDT_szGetParam(1));
|
||
|
||
p_stValue = SCR_fnp_st_Link_CreateOrGetLinkFromKey(&g_st3DOSLinkTable.stCharacter, szForScript);
|
||
if(SCR_M_e_Link_GetState(p_stValue)==SCR_ELS_Link_Initialized)
|
||
hObjectParent = (struct tdstEngineObject_*)SCR_M_ul_Link_GetValue(p_stValue);
|
||
if(hObjectParent==NULL)
|
||
{
|
||
#ifdef _DEBUG
|
||
char szText[255],szSectionName[255];
|
||
LDT_ComputeSectionName(pLink,szSectionName);
|
||
sprintf(szText,"Le WayPoint %s a pour p<>re l'acteur %s non charg<72>",szSectionName,LDT_szGetParam(1));
|
||
MessageBox(NULL , szText , "ERROR" , MB_OK+MB_ICONERROR);
|
||
#endif
|
||
}
|
||
break;
|
||
}/*endswitch*/
|
||
result=LDT_GetNextEntry();
|
||
}/*endwhile*/
|
||
|
||
/*Working for EndSection*/
|
||
|
||
/* compute absolute position usinf father position if needed*/
|
||
if(hObjectParent)
|
||
{
|
||
POS_tdxHandleToPosition hGlobalMatrix;
|
||
|
||
hSuperObjParent = M_GetSuperObject(hObjectParent);
|
||
hGlobalMatrix = fn_p_st3dDataGetMatrix (hObjectParent->h_3dData);
|
||
POS_fn_vMulMatrixVertex( &stAbsolutePosition, hGlobalMatrix, &stVertex );
|
||
}
|
||
else
|
||
{
|
||
MTH3D_M_vCopyVector( &stAbsolutePosition, &stVertex );
|
||
hSuperObjParent = NULL;
|
||
}
|
||
|
||
/* is waypoint into map ???*/
|
||
h_SOSector=SECT_fn_hResearchInWhatSectorIAm(SECT_hFatherSector,&stAbsolutePosition);
|
||
|
||
if (SECT_fn_bIsThisSectorUniverse(h_SOSector))
|
||
{
|
||
#ifdef _DEBUG
|
||
char szText[255],szSectionName[255];
|
||
LDT_ComputeSectionName(pLink,szSectionName);
|
||
sprintf(szText,"Le WayPoint %s est dans le secteur Univers",szSectionName);
|
||
MessageBox(NULL , szText , "ERROR" , MB_OK+MB_ICONERROR);
|
||
#else
|
||
return 0;
|
||
#endif
|
||
}
|
||
|
||
/* create waypoint*/
|
||
hWaypoint = WP_fnh_WayPoint_Create();
|
||
WP_fnv_WayPoint_AddRef(hWaypoint);
|
||
/*!!! CE VREA AICI (CORELAT CU AlreadyAnalysed)*/
|
||
/* SCR_M_RdL0_SetSectionLong(0, 0, (unsigned long)hWaypoint);*/
|
||
|
||
/* update Link Table*/
|
||
LDT_ComputeSectionName(pLink,szCompleteName);
|
||
/*strcpy(szWaypointName,szCompleteName);*/
|
||
/*strcpy(szCompleteName,fn_szGetLevelsDataPath());*/
|
||
/*strcat(szCompleteName,"\\");*/
|
||
/*strcat(szCompleteName,szWaypointName);*/
|
||
SCR_fnp_st_Link_SetValue( &WP_gs_stWayPointLinkTable, szCompleteName, (unsigned long)hWaypoint );
|
||
|
||
/* Set father*/
|
||
WP_M_vWayPointSetSuperObject(hWaypoint,hSuperObjParent);
|
||
|
||
/* Set radius*/
|
||
WP_M_vWayPointSetRadius(hWaypoint,xRadius);
|
||
|
||
/* Set position*/
|
||
WP_M_vWayPointSetVertex(hWaypoint, &stVertex);
|
||
|
||
fn_vCreateGeoWayPoint((WP_tdstWayPoint *)hWaypoint);
|
||
|
||
return 0;
|
||
}
|
||
/*#endif /* AI_USE_SCRIPT */
|
||
/*END FS 9/14/98*/
|
||
|
||
/*BEGIN FS 9/14/98*/
|
||
/*#if defined(AI_USE_SCRIPT)*/
|
||
/*----------------------------------------------------------------------
|
||
* Description: callback for WPGraph section from .WP sript file
|
||
*----------------------------------------------------------------------
|
||
* Input:
|
||
* Output:
|
||
*----------------------------------------------------------------------
|
||
* Author: FS
|
||
* Creation date:9/14/98
|
||
* Modif date:
|
||
*----------------------------------------------------------------------*/
|
||
int LoadWP_Graph( LDT_tdst_Link *pLink )
|
||
{
|
||
LDT_tdeParseResult result=ParseResult_BeginSection;
|
||
char *szSectionName;
|
||
|
||
WP_tdHandleOfGraph hGraph = NULL;
|
||
char sz255Error[255];
|
||
|
||
szSectionName=LDT_szGetSectionName();
|
||
if (strlen(szSectionName)==0)
|
||
{
|
||
sprintf(sz255Error, "invalid Name for WPGraph !");
|
||
M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, sz255Error);
|
||
while( LDT_GetNextEntry()!=ParseResult_EndSection );
|
||
return -1;
|
||
}
|
||
if (LDT_iGetNbParams()<1)
|
||
{
|
||
sprintf(sz255Error, "invalid Reference for WPGraph (%s) !", szSectionName);
|
||
M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, sz255Error);
|
||
while( LDT_GetNextEntry()!=ParseResult_EndSection );
|
||
return -1;
|
||
}
|
||
hGraph = WPG_fn_hCreate(szSectionName,LDT_szGetParam(1));
|
||
WPG_fn_vAddGlobalGraph(hGraph) ;
|
||
pLink->pObject=hGraph;
|
||
|
||
/* read the next line in script file*/
|
||
result=LDT_GetNextEntry();
|
||
while( result!=ParseResult_EndSection )
|
||
{
|
||
/* Load WpSommet SubSection of WpGraph section*/
|
||
LDT_LoadSection(NULL);
|
||
result=LDT_GetNextEntry();
|
||
}
|
||
return 0;
|
||
}
|
||
/*#endif /* AI_USE_SCRIPT */
|
||
/*END FS 9/14/98*/
|
||
|
||
/*BEGIN FS 9/14/98*/
|
||
/*#if defined(AI_USE_SCRIPT)*/
|
||
/*----------------------------------------------------------------------
|
||
* Description: callback for ... of ... sript file
|
||
*----------------------------------------------------------------------
|
||
* Input:
|
||
* Output:
|
||
*----------------------------------------------------------------------
|
||
* Author: FS
|
||
* Creation date:9/14/98
|
||
* Modif date:
|
||
*----------------------------------------------------------------------*/
|
||
int LoadWP_Sommet( LDT_tdst_Link *pLink )
|
||
{
|
||
LDT_tdeParseResult result=ParseResult_BeginSection;
|
||
char *szSectionName, *szEntryName, *szParam1=NULL;
|
||
|
||
WP_tdHandleOfGraph hGraph;
|
||
WP_tdhWayPoint hWayPoint, hDstWayPoint;
|
||
long lCapacity, lValuation, lTypeOfWP;
|
||
char sz255Error[255];
|
||
char* dummy;
|
||
|
||
/*Working for BeginSection*/
|
||
hGraph=(WP_tdHandleOfGraph)pLink->pParent->pObject;
|
||
szSectionName=LDT_szGetSectionName();
|
||
hWayPoint = GetWPFromName(szSectionName, hGraph);
|
||
if (!hWayPoint)
|
||
{
|
||
sprintf(sz255Error, "unknown WayPoint (%s) in WPGraph !", szSectionName);
|
||
M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, sz255Error);
|
||
while( LDT_GetNextEntry()!=ParseResult_EndSection );
|
||
return -1;
|
||
}
|
||
WPG_fn_lAddWayPointIfNotExists(hGraph, hWayPoint, 0L);/* first ignore the Type Of WP*/
|
||
if (LDT_iGetNbParams()>1)
|
||
{ /* then change the Type Of WP, if one ! !*/
|
||
lTypeOfWP = (long) strtoul(LDT_szGetParam(1), &dummy, 2);
|
||
WPG_fn_lChangeTypeOfWP (hGraph, hWayPoint, lTypeOfWP); /*BART*/
|
||
}
|
||
|
||
/*Working for Entries*/
|
||
result=LDT_GetNextEntry();
|
||
while( result!=ParseResult_EndSection )
|
||
{
|
||
szEntryName=LDT_szGetEntryName();
|
||
hDstWayPoint = GetWPFromName(szEntryName, hGraph);
|
||
if (!hDstWayPoint)
|
||
{
|
||
sprintf(sz255Error, "unknown WayPoint (%s) in WPGraph !", szEntryName);
|
||
M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, sz255Error);
|
||
while( LDT_GetNextEntry()!=ParseResult_EndSection );
|
||
return -1;
|
||
}
|
||
WPG_fn_lAddWayPointIfNotExists(hGraph, hDstWayPoint, 0L); /* ignore the Type Of WP*/
|
||
lValuation = atoi(LDT_szGetParam(1));
|
||
lCapacity = (long) strtoul(LDT_szGetParam(2), &dummy, 2);
|
||
WPG_fn_lAddArcToWayPoint (hGraph, hWayPoint, hDstWayPoint, lValuation, lCapacity);
|
||
result=LDT_GetNextEntry();
|
||
}
|
||
return 0;
|
||
}
|
||
/*#endif /* AI_USE_SCRIPT */
|
||
/*END FS 9/14/98*/
|
||
|
||
/*BEGIN FS 9/14/98*/
|
||
/*----------------------------------------------------------------------
|
||
* Description: callback for Isolate and InWay sections from .WP sript file
|
||
*----------------------------------------------------------------------
|
||
* Input:
|
||
* Output:
|
||
*----------------------------------------------------------------------
|
||
* Author: FS
|
||
* Creation date:9/14/98
|
||
* Modif date:
|
||
*----------------------------------------------------------------------*/
|
||
/*#if defined(AI_USE_SCRIPT)*/
|
||
int LoadWP_Isolate_InWay( LDT_tdst_Link *pLink )
|
||
{
|
||
LDT_tdeParseResult result=ParseResult_BeginSection;
|
||
while((result=LDT_GetNextEntry())!=ParseResult_EndSection )
|
||
{
|
||
/* Load WayPoint SubSection of Isolate section*/
|
||
if(result == ParseResult_BeginSection)
|
||
LDT_LoadSection(NULL);
|
||
}
|
||
return 0;
|
||
}
|
||
/*#endif /* AI_USE_SCRIPT */
|
||
/*END FS 9/14/98*/
|
||
|