reman3/Rayman_X/cpa/tempgrp/AI/AIBase/WpWayPtCB.c

286 lines
9.0 KiB
C
Raw Permalink Blame History

/*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*/