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

958 lines
28 KiB
C
Raw Blame History

#include "AIUseCPA.h"
#include "Mth.h"
#include "specif/AIOption.h"
#include "AIMacros.h"
#include "AI_Mmg.h"
#include "AI_Erm.h"
/* in order to compile AI in C++ and link with GAM in C*/
#include "AI_Proto.h"
#define _WP_D_DEFINE_WAYPOINTS_
#include "WP_Handl.h"
/* in order to compile AI in C++ and link with GAM in C*/
#include "WP_Func.h"
#undef _WP_D_DEFINE_WAYPOINTS_
#define _WP_D_WAYPOINT_FRIEND_
#define WP_D_WAYPOINT_GLOBALS_
#include "WPWayPt.h"
#undef WP_D_WAYPOINT_GLOBALS_
#undef _WP_D_WAYPOINT_FRIEND_
#include "WPgraphe.h"
// FBF N64-format pour coords, et logfile dans x:\exe\geodump.log{
#ifdef U64CONVERTETLOG
#ifdef __cplusplus
extern "C"
{
#endif
extern float fScale;
extern FILE *dump;
#ifdef __cplusplus
}
#endif
#endif //U64CONVERTLOG
// } fin N64-format
/*
------------------------------------------------------------------------------------------
GLOBAL VARIABLES DECLARATION:
------------------------------------------------------------------------------------------
*/
#if defined(AI_USE_SCRIPT)
static SCR_tdst_Link_Table WP_gs_stWayPointLinkTable;
#endif /* AI_USE_SCRIPT */
#if defined(ACTIVE_EDITOR)
static unsigned long gs_Way_ulNbOfWarnings = 0;
static FILE *gs_fWpWarningsFile = NULL;
#endif
/*
------------------------------------------------------------------------------------------
FUNCTIONS AND MACROS-FUNCTIONS DECLARATION:
------------------------------------------------------------------------------------------
*/
#define WP_M_vWayPointMalloc(_Var,_Type,_Size) M_AIAlloc(_Var,_Type,_Size)
#define WP_M_vWayPointFree(_Var) M_AIFree(_Var)
#define WP_M_vWayPointMemset(_Var,_Char,_Size) M_AI_MemSet(_Var,_Char,_Size)
#define WP_M_vWayPointRealloc(_Var,_AdrSrc,_Type,_Size) M_AIRealloc(_Var,_AdrSrc,_Type,_Size)
#define WP_M_vWayPointAssert(_Expr,_Error) M_AI_DEBUG_ASSERT(_Expr,_Error)
#define WP_M_vWayPointFatalError(_Error) M_AIFatalError(_Error)
/* Bart:
#define WP_M_vWayPointWarningError(_Error) M_AIWarningError(_Error)
*/
/*ANNECY Bart 21/01/98 {*/
#define WP_M_vWayPointWarningError(_Error, _ucOpenInfoWindow) M_AIWarningError(_Error, _ucOpenInfoWindow)
/*ENDANNECY Bart }*/
#define WP_M_vWayPointIfErrorUpdateError(_Module,_NewError) M_AIIfErrorUpdateFatalError(_Module,_NewError)
WP_tdhWayPoint WP_fnh_WayPoint_Create(void)
{
WP_tdhWayPoint hNewWayPoint=NULL;
/* Allocate a new waypoint */
WP_M_vWayPointMalloc(hNewWayPoint,WP_tdhWayPoint,WP_M_uwWayPointSizeOf());
if(hNewWayPoint)
{
WP_M_vWayPointMemset(hNewWayPoint,0xa,WP_M_uwWayPointSizeOf());
/*WP_M_vWayPointSetUsedCount(hNewWayPoint,0);*/
WP_M_vWayPointSetSuperObject(hNewWayPoint,0);
return hNewWayPoint;
}
else
return WP_C_hWayPointInvalid;
}
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_Destroy
(WP_tdhWayPoint _hOldWayPoint)
{
WP_M_vWayPointAssert(_hOldWayPoint!=WP_C_hWayPointInvalid,E_uwAIFatalInvalidParameter);
WP_M_vWayPointFree(_hOldWayPoint);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void WP_fnv_WayPoint_AddRef
(WP_tdhWayPoint _hWayPoint)
{
_hWayPoint = _hWayPoint;
/* WP_M_vWayPointAssert(_hWayPoint!=WP_C_hWayPointInvalid,E_uwAIFatalInvalidParameter);*/
/* WP_M_vWayPointSetUsedCount(_hWayPoint,(unsigned char) (WP_M_ucWayPointGetUsedCount(_hWayPoint)+1));*/
}
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_Release
(WP_tdhWayPoint _hWayPoint)
{
_hWayPoint = _hWayPoint;
/*WP_M_vWayPointAssert(_hWayPoint!=WP_C_hWayPointInvalid,E_uwAIFatalInvalidParameter);*/
/*WP_M_vWayPointSetUsedCount(_hWayPoint,(unsigned char) (WP_M_ucWayPointGetUsedCount(_hWayPoint)-1));*/
/*if(!WP_M_ucWayPointGetUsedCount(_hWayPoint))*/
/*{*/
/* WP_fnv_WayPoint_Destroy(_hWayPoint);*/
/*}*/
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
WP_tdhWayPoint WP_fnh_WayPoint_Build
(
MTH3D_tdstVector*_pstVector,
MTH_tdxReal _xRadius,
HIE_tdxHandleToSuperObject _hSuperObject
)
{
WP_tdhWayPoint hNewWayPoint;
hNewWayPoint = WP_fnh_WayPoint_Create();
if(hNewWayPoint!=WP_C_hWayPointInvalid)
{
WP_M_vWayPointSetVertex(hNewWayPoint,_pstVector);
WP_M_vWayPointSetRadius(hNewWayPoint,_xRadius);
WP_M_vWayPointSetSuperObject(hNewWayPoint,_hSuperObject);
return hNewWayPoint;
}
else
return WP_C_hWayPointInvalid;
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
WP_tdhWayPoint WP_fnh_WayPoint_Duplicate
(WP_tdhWayPoint _hWayPointSrc)
{
MTH3D_tdstVector stVertex;
WP_M_vWayPointAssert(_hWayPointSrc!=WP_C_hWayPointInvalid,E_uwAIFatalInvalidParameter);
WP_M_vWayPointGetVertex(_hWayPointSrc,&stVertex);
return WP_fnh_WayPoint_Build
(
&stVertex,
WP_M_xWayPointGetRadius(_hWayPointSrc),
WP_M_hWayPointGetSuperObject(_hWayPointSrc)
);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_Copy
(
WP_tdhWayPoint _hWayPointDest,
WP_tdhWayPoint _hWayPointSrc
)
{
MTH3D_tdstVector stVertex;
WP_M_vWayPointAssert
(
(_hWayPointDest!=WP_C_hWayPointInvalid)
&&(_hWayPointSrc!=WP_C_hWayPointInvalid),
E_uwAIFatalInvalidParameter
);
WP_M_vWayPointGetVertex(_hWayPointSrc,&stVertex);
WP_M_vWayPointSetVertex(_hWayPointDest,&stVertex);
WP_M_vWayPointSetRadius
(
_hWayPointDest,
WP_M_xWayPointGetRadius(_hWayPointSrc)
);
WP_M_vWayPointSetSuperObject
(
_hWayPointDest,
WP_M_hWayPointGetSuperObject(_hWayPointDest)
);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
unsigned short WP_fnuw_WayPoint_SizeOf(void)
{
/*
Using the macro makes it compulsory to define the function
with the _WP_D_WAYPOINT_FRIEND_ compilation directive, in order to
be sure that the structure is known at this level.
*/
return WP_M_uwWayPointSizeOf();
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void WP_fnv_WayPoint_GetVertex
(
WP_tdhWayPoint _hWayPoint,
MTH3D_tdstVector*_pstVector
)
{
WP_M_vWayPointAssert
(
(_hWayPoint!=WP_C_hWayPointInvalid)
&&(_pstVector),
E_uwAIFatalInvalidParameter
);
/*
Using the macro makes it compulsory to define the function
with the _WP_D_WAYPOINT_FRIEND_ compilation directive, in order to
be sure that the structure is known at this level.
*/
WP_M_vWayPointGetVertex(_hWayPoint,_pstVector);
}
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_SetVertex
(
WP_tdhWayPoint _hWayPoint,
MTH3D_tdstVector*_pstNewVector
)
{
WP_M_vWayPointAssert
(
(_hWayPoint!=WP_C_hWayPointInvalid)
&&(_pstNewVector),
E_uwAIFatalInvalidParameter
);
/*
Using the macro makes it compulsory to define the function
with the _WP_D_WAYPOINT_FRIEND_ compilation directive, in order to
be sure that the structure is known at this level.
*/
WP_M_vWayPointSetVertex(_hWayPoint,_pstNewVector);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
MTH_tdxReal WP_fnx_WayPoint_GetRadius
(WP_tdhWayPoint _hWayPoint)
{
WP_M_vWayPointAssert(_hWayPoint!=WP_C_hWayPointInvalid,E_uwAIFatalInvalidParameter);
/*
Using the macro makes it compulsory to define the function
with the _WP_D_WAYPOINT_FRIEND_ compilation directive, in order to
be sure that the structure is known at this level.
*/
return WP_M_xWayPointGetRadius(_hWayPoint);
}
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_SetRadius
(
WP_tdhWayPoint _hWayPoint,
MTH_tdxReal _xNewRadius
)
{
WP_M_vWayPointAssert(_hWayPoint!=WP_C_hWayPointInvalid,E_uwAIFatalInvalidParameter);
/*
Using the macro makes it compulsory to define the function
with the _WP_D_WAYPOINT_FRIEND_ compilation directive, in order to
be sure that the structure is known at this level.
*/
WP_M_vWayPointSetRadius(_hWayPoint,_xNewRadius);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
HIE_tdxHandleToSuperObject WP_fnh_WayPoint_GetSuperObject
(WP_tdhWayPoint _hWayPoint)
{
WP_M_vWayPointAssert(_hWayPoint!=WP_C_hWayPointInvalid,E_uwAIFatalInvalidParameter);
/*
Using the macro makes it compulsory to define the function
with the _WP_D_WAYPOINT_FRIEND_ compilation directive, in order to
be sure that the structure is known at this level.
*/
return WP_M_hWayPointGetSuperObject(_hWayPoint);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_SetSuperObject
(
WP_tdhWayPoint _hWayPoint,
HIE_tdxHandleToSuperObject _hNewSuperObject
)
{
WP_M_vWayPointAssert(_hWayPoint!=WP_C_hWayPointInvalid,E_uwAIFatalInvalidParameter);
/*
Using the macro makes it compulsory to define the function
with the _WP_D_WAYPOINT_FRIEND_ compilation directive, in order to
be sure that the structure is known at this level.
*/
WP_M_vWayPointSetSuperObject(_hWayPoint,_hNewSuperObject);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_Invalidate
(WP_tdhWayPoint*_p_hWayPoint)
{
WP_M_vWayPointAssert(_p_hWayPoint,E_uwAIFatalInvalidParameter);
*_p_hWayPoint = WP_C_hWayPointInvalid;
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
ACP_tdxBool WP_fnb_WayPoint_IsValid
(WP_tdhWayPoint _hWayPoint)
{
return _hWayPoint != WP_C_hWayPointInvalid;
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
ACP_tdxBool WP_fnb_WayPoint_IsInvalid
(WP_tdhWayPoint _hWayPoint)
{
return _hWayPoint == WP_C_hWayPointInvalid;
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
ACP_tdxBool WP_fnb_WayPoint_IsDynamic
(WP_tdhWayPoint _hWayPoint)
{
WP_M_vWayPointAssert(_hWayPoint!=WP_C_hWayPointInvalid,E_uwAIFatalInvalidParameter);
return WP_M_hWayPointGetSuperObject(_hWayPoint)!=(HIE_tdxHandleToSuperObject)0;
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
ACP_tdxBool WP_fnb_WayPoint_IsStatic
(WP_tdhWayPoint _hWayPoint)
{
WP_M_vWayPointAssert(_hWayPoint!=WP_C_hWayPointInvalid,E_uwAIFatalInvalidParameter);
return WP_M_hWayPointGetSuperObject(_hWayPoint)==(HIE_tdxHandleToSuperObject)0;
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#undef extern
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void fn_vCreateGeoWayPoint(WP_tdstWayPoint *p_stWayPt)
{
p_stWayPt = p_stWayPt;
/*MTH3D_tdstVector stPosWP;
WP_M_vWayPointGetVertex(p_stWayPt, &stPosWP);
p_stWayPt->m_p_stGeoObj = fn_pCreateSphere(MTH3D_M_xGetXofVector(&stPosWP),MTH3D_M_xGetYofVector(&stPosWP),
MTH3D_M_xGetZofVector(&stPosWP),WP_M_xWayPointGetRadius(p_stWayPt));
*/
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void fn_vDrawWayPoint(WP_tdstWayPoint *p_stWayPt)
{
p_stWayPt = p_stWayPt;
/*POS_tdstCompletePosition stMatrix;
POS_fn_vSetIdentityMatrix(&stMatrix);
HIE_fn_bLoadMatrix(&stMatrix);
GLI_xSendObjectToViewport(&gs_stViewportAttr, p_stWayPt->m_p_stGeoObj,
gp_stLight, GLI_C_lAllIsEnable-GLI_C_lIsNotDrawCollideInformation);
HIE_fn_vPopMatrix();*/
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if defined(AI_USE_SCRIPT)
SCR_tde_Anl_ReturnValue WP_fne_WayPoint_ScriptCallBackLoad
(
SCR_tdst_File_Description *_p_fFile,
char *_szAction,
char *_szParams[],
SCR_tde_Anl_Action _cType
)
{
/* ANNECY MT - 16/09/98 {*/
static struct tdstEngineObject_ *hObjectParent;
static MTH3D_tdstVector stVertex;
static MTH_tdxReal xRadius;
_p_fFile=_p_fFile;
switch (_cType)
{
case SCR_EA_Anl_BeginSection:
MTH3D_M_vNullVector(&stVertex);
xRadius = MTH_C_ZERO;
hObjectParent = NULL;
break;
case SCR_EA_Anl_Entry:
if (stricmp(_szAction,"Vertex")==0)
{
/* load the vertex*/
stVertex.xX = MTH_M_xFloatToReal((float) atof(_szParams[0]));
stVertex.xY = MTH_M_xFloatToReal((float) atof(_szParams[1]));
stVertex.xZ = MTH_M_xFloatToReal((float) atof(_szParams[2]));
}
else if (stricmp(_szAction,"Radius")==0)
{
xRadius = MTH_M_xFloatToReal((float) atof(_szParams[0]));
}
else if (stricmp(_szAction,"Father")==0)
{
char szForScript[256];
SCR_tdst_Link_Value *p_stValue;
strcpy(szForScript,fn_szGetLevelsDataPath());
strcat(szForScript,"\\");
strcat(szForScript,_szParams[0]);
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);
}
#ifndef U64
#ifdef _DEBUG
if(hObjectParent==NULL)
{
char szText[255];
/* Oliv' - Portage v15 - Please don't let accentuated characters be the last one of a string ! gcc sucks !!!*/
/* So I added a space character at the end*/
/* sprintf(szText,"Le WayPoint %s a pour p<>re l'acteur %s non charg<72>" , SCR_M_RdL0_GetCompleteSectionNameR(0), _szParams[0]);*/
sprintf(szText,"Le WayPoint %s a pour p<>re l'acteur %s non charg<72> " , SCR_M_RdL0_GetCompleteSectionNameR(0), _szParams[0]);
/* EndOfOliv' - Thnx :-)*/
MessageBox(NULL , szText , "ERROR" , MB_OK+MB_ICONERROR);
}
#endif /*_DEBUG*/
#endif /* U64*/
}
break;
case SCR_EA_Anl_EndSection:
{
WP_tdhWayPoint hWaypoint;
char szCompleteName [255];
char szWaypointName[255];
MTH3D_tdstVector stAbsolutePosition;
HIE_tdxHandleToSuperObject h_SOSector;
HIE_tdxHandleToSuperObject hSuperObjParent;
/* 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;
}
if(fn_lGetSubMapNumber() != 0)
{
/* is waypoint into map ???*/
h_SOSector=SECT_fn_hResearchInWhatSectorIAm(SECT_hFatherSector,&stAbsolutePosition);
if (SECT_fn_bIsThisSectorUniverse(h_SOSector))
{
#if defined(ACTIVE_EDITOR)
char szText[255];
sprintf(szText,"The WayPoint %s is in the sector Universe" , SCR_M_RdL0_GetCompleteSectionNameR(0));
gs_Way_ulNbOfWarnings++;
if(gs_Way_ulNbOfWarnings==1)
{
MessageBox(NULL , szText , "ERROR" , MB_OK+MB_ICONERROR);
}
else
{
if(!gs_fWpWarningsFile)
{
gs_fWpWarningsFile = fopen ("WpWarnings.log","at");
if( gs_fWpWarningsFile )
{
fprintf( gs_fWpWarningsFile,"==============================================================================\n");
fprintf( gs_fWpWarningsFile,"Map : %s Submap : %02d\n" , fn_p_szGetLevelName() , GAM_M_GetSubMap(fn_lGetSubMapNumber()) );
fprintf( gs_fWpWarningsFile,"==============================================================================\n");
}
}
if(gs_fWpWarningsFile)
{
fprintf (gs_fWpWarningsFile , "%s\n" , szText);
}
}
#endif
return(SCR_ERV_Anl_NormalReturn);
}
}
/* create waypoint*/
hWaypoint = WP_fnh_WayPoint_Create();
WP_fnv_WayPoint_AddRef(hWaypoint);
SCR_M_RdL0_SetSectionLong(0, 0, (unsigned long)hWaypoint);
/* update Link Table*/
strcpy(szWaypointName,SCR_M_RdL0_GetCompleteSectionNameR(0));
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*/
// FBF N64-format pour coords, et logfile dans x:\exe\geodump.log{
#ifdef U64CONVERTETLOG
xRadius = (float) (( (long)( (xRadius*fScale) + 0.5) ) / fScale);
stVertex.xX = (float) (( (long)( (stVertex.xX*fScale) + 0.5) ) / fScale);
stVertex.xY = (float) (( (long)( (stVertex.xY*fScale) + 0.5) ) / fScale);
stVertex.xZ = (float) (( (long)( (stVertex.xZ*fScale) + 0.5) ) / fScale);
fprintf(dump,"---------waypoint %s\nRadius: %f\nposition : %f,%f,%f\n",szWaypointName,xRadius,stVertex.xX,stVertex.xY,stVertex.xZ);
fflush(dump);
#endif //U64CONVERTLOG
// } fin N64-format
WP_M_vWayPointSetRadius(hWaypoint,xRadius);
/* Set position*/
WP_M_vWayPointSetVertex(hWaypoint, &stVertex);
fn_vCreateGeoWayPoint((WP_tdstWayPoint *)hWaypoint);
break;
}
case SCR_EA_Anl_AlreadyAnalysed:
{
WP_tdhWayPoint hWaypoint;
SCR_M_RdL0_GetSectionLong(0, 0, WP_tdhWayPoint, hWaypoint);
WP_fnv_WayPoint_AddRef(hWaypoint);
}
break;
}
return SCR_ERV_Anl_NormalReturn;
/* END ANNECY MT }*/
}
/*
----------------------------------------------------------------------------------------
Description : WP_fn_vReloadWPGraph
called by the command console to reinit one (or more) graph script
szNameOfGraph -> giving by the console, it's the name of the graph to reload
----------------------------------------------------------------------------------------
Author : Fred 'Bart' Compagnon
Date : 19/01/98
----------------------------------------------------------------------------------------
*/
/* script only*/
void WP_fn_vReloadWPGraph(char* szNameOfGraph)
{
char szLevelName[255];
char szWPSectionName[255];
char sz255Error[255];
/*WPG_fn_vDestroyAllGraph () ; // made in fn_vTreatCommandLine() cf. GAM\commands.c*/
strcpy(szLevelName, fn_p_szGetLevelName());
sprintf(szWPSectionName, "%s\\%s.%s^%s:%s", szLevelName, szLevelName, C_ScriptWayPointSuffixe, C_SectionWPGraphDescription, szNameOfGraph);
if (SCR_fn_c_RdL0_IsSectionExists(szWPSectionName))
{
SCR_fnp_st_RdL0_AnalyseSection(szWPSectionName, SCR_CDF_uw_Anl_ForceAnalyse);
}
else
{
sprintf(sz255Error, "unknown Name of WPGraph (%s) !", szNameOfGraph);
M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, sz255Error);
}
}
/*
----------------------------------------------------------------------------------------
Description : WP_fne_WPGraph_ScriptCallBackLoad
to read the WPGraph section in the script
----------------------------------------------------------------------------------------
Author : Fred 'Bart' Compagnon
Date : 19/01/98
----------------------------------------------------------------------------------------
*/
/* script only*/
SCR_tde_Anl_ReturnValue WP_fne_WPGraph_ScriptCallBackLoad(SCR_tdst_File_Description *_p_fFile, char *_szAction, char *_szParams[], SCR_tde_Anl_Action _cType)
{
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
WP_tdHandleOfGraph hGraph = NULL;
char sz255Error[255];
switch (_cType)
{
case SCR_EA_Anl_BeginSection:
if (_szAction[0] == 0)
{
sprintf(sz255Error, "invalid Name for WPGraph !");
M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, sz255Error);
return SCR_ERV_Anl_TerminateCurrentSection;
}
if (strlen(_szParams[0]) == 0)
{
sprintf(sz255Error, "invalid Reference for WPGraph (%s) !", _szAction);
M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, sz255Error);
return SCR_ERV_Anl_TerminateCurrentSection;
}
hGraph = WPG_fn_hCreate(_szAction, _szParams[0]);
WPG_fn_vAddGlobalGraph(hGraph) ;
SCR_M_RdL0_SetSectionLong(0, 0, (unsigned long)hGraph);
break;
case SCR_EA_Anl_Entry:
SCR_M_RdL0_GetSectionLong(0, 0, WP_tdHandleOfGraph, hGraph);
break;
case SCR_EA_Anl_EndSection:
SCR_M_RdL0_GetSectionLong(0, 0, WP_tdHandleOfGraph, hGraph);
break;
case SCR_EA_Anl_AlreadyAnalysed:
SCR_M_RdL0_GetSectionLong(0, 0, WP_tdHandleOfGraph, hGraph);
break;
}
return eReturnValue;
}
/*
----------------------------------------------------------------------------------------
Description : GetWPFromName
_szName -> Name of the WayPoint
_hGraph -> handle to the graph
Returns (WP_tdhWayPoint ) handle to the WayPoint
----------------------------------------------------------------------------------------
Author : Fred 'Bart' Compagnon
Date : 19/01/98
----------------------------------------------------------------------------------------
*/
/* script only*/
WP_tdhWayPoint GetWPFromName(char* _szName, WP_tdHandleOfGraph _hGraph)
{
char szCompleteName[255];
WP_tdhWayPoint hWayPoint = NULL;
SCR_tdst_Link_Value *p_stLinkValue=NULL;
char sz255Error[255];
strcpy(szCompleteName, fn_szGetLevelsDataPath());
strcat(szCompleteName,"\\");
strcat(szCompleteName, _hGraph->m_szReferenceSection);
strcat(szCompleteName, _szName);
p_stLinkValue = SCR_fnp_st_Link_SearchKey(WP_fnp_WayPoint_GetLinkTable(), szCompleteName);
if ( (p_stLinkValue!=NULL) && (SCR_M_e_Link_GetState(p_stLinkValue)!=SCR_ELS_Link_NotInitialized) )
{
hWayPoint = (WP_tdhWayPoint)(p_stLinkValue->ulValue);
}
else
{
sprintf(sz255Error, "Invalid Link Table for WPGraphe : %s", szCompleteName);
if(fn_lGetSubMapNumber() == 0)
M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, sz255Error);
#if defined(ACTIVE_EDITOR)
if(gs_fWpWarningsFile != NULL)
fprintf (gs_fWpWarningsFile , "%s\n" , sz255Error);
#endif
}
return(hWayPoint);
}
/*
----------------------------------------------------------------------------------------
Description : WP_fne_WPSommet_ScriptCallBackLoad
to read the WPSommet section in the script
----------------------------------------------------------------------------------------
Author : Fred 'Bart' Compagnon
Date : 19/02/98
----------------------------------------------------------------------------------------
*/
/* script only*/
SCR_tde_Anl_ReturnValue WP_fne_WPSommet_ScriptCallBackLoad(SCR_tdst_File_Description *_p_fFile, char *_szAction, char *_szParams[], SCR_tde_Anl_Action _cType)
{
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
WP_tdHandleOfGraph hGraph;
WP_tdhWayPoint hWayPoint, hDstWayPoint;
unsigned long ulCapability;
long lWeight, lTypeOfWP;
char sz255Error[255];
char* dummy;
switch (_cType)
{
case SCR_EA_Anl_BeginSection:
SCR_M_RdL0_GetSectionLong(-1, 0, WP_tdHandleOfGraph, hGraph);
hWayPoint = GetWPFromName(_szAction, hGraph);
if (!hWayPoint)
{
sprintf(sz255Error, "unknown WayPoint (%s) in WPGraph !", _szAction);
#if defined(ACTIVE_EDITOR)
if(gs_fWpWarningsFile != NULL)
fprintf (gs_fWpWarningsFile , "%s\n" , sz255Error);
#endif
if(fn_lGetSubMapNumber() == 0)
M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, sz255Error);
return SCR_ERV_Anl_TerminateCurrentSection;
}
WPG_fn_lAddWayPointIfNotExists(hGraph, hWayPoint, 0L);/* first ignore the Type Of WP*/
if (_szParams[0])
{ /* then change the Type Of WP, if one ! !*/
lTypeOfWP = (long) strtoul(_szParams[0], &dummy, 2);
WPG_fn_lChangeTypeOfWP (hGraph, hWayPoint, lTypeOfWP); /*BART*/
}
SCR_M_RdL0_SetSectionLong(0, 0, (unsigned long)hWayPoint);
break;
case SCR_EA_Anl_Entry:
SCR_M_RdL0_GetSectionLong(-1, 0, WP_tdHandleOfGraph, hGraph);
SCR_M_RdL0_GetSectionLong(0, 0, WP_tdhWayPoint, hWayPoint);
hDstWayPoint = GetWPFromName(_szAction, hGraph);
if (!hDstWayPoint)
{
sprintf(sz255Error, "unknown WayPoint (%s) in WPGraph !", _szAction);
#if defined(ACTIVE_EDITOR)
if(gs_fWpWarningsFile != NULL)
fprintf (gs_fWpWarningsFile , "%s\n" , sz255Error);
#endif
if(fn_lGetSubMapNumber() == 0)
M_AIWarningErrorAndAllowStopForDebug(E_uwAIWarningScriptError, C_ucErmOpenInfoWindow, sz255Error);
return SCR_ERV_Anl_TerminateCurrentSection;
}
WPG_fn_lAddWayPointIfNotExists(hGraph, hDstWayPoint, 0L); /* ignore the Type Of WP*/
lWeight = atoi(_szParams[0]);
ulCapability = strtoul(_szParams[1], &dummy, 2);
WPG_fn_lAddArcToWayPoint (hGraph, hWayPoint, hDstWayPoint, lWeight, ulCapability);
break;
case SCR_EA_Anl_EndSection:
SCR_M_RdL0_GetSectionLong(0, 0, WP_tdhWayPoint, hWayPoint);
break;
case SCR_EA_Anl_AlreadyAnalysed:
SCR_M_RdL0_GetSectionLong(0, 0, WP_tdhWayPoint, hWayPoint);
break;
}
return eReturnValue;
}
/* script only*/
SCR_tde_Anl_ReturnValue WP_fne_WayPoint_ScriptSubSectionCallBackLoad
(
SCR_tdst_File_Description*_p_fFile,
char*_szAction,
char*_d_szParams[],
SCR_tde_Anl_Action _eAction
)
{
_p_fFile=_p_fFile;
_szAction=_szAction;
_d_szParams=_d_szParams;
_eAction=_eAction;
/* test just to export the function*/
return SCR_ERV_Anl_NormalReturn;
}
/* script only*/
SCR_tdst_Link_Value* WP_fnh_WayPoint_GetLoaded
(
char *_szWPRefName
)
{
/* check parameter validity :*/
WP_M_vWayPointAssert(_szWPRefName,E_uwAIFatalInvalidParameter);
return SCR_fnp_st_Link_CreateOrGetLinkFromKey
(
&WP_gs_stWayPointLinkTable,
_szWPRefName
);
}
#endif /* AI_USE_SCRIPT */
void WP_fnv_WayPoint_ComputeLocation( WP_tdhWayPoint _hWayPoint, MTH3D_tdstVector*_p_stVertex)
{
MTH3D_tdstVector stWPVertex;
POS_tdxHandleToPosition hGlobalMatrix;
WP_M_vWayPointAssert ( (_hWayPoint!=WP_C_hWayPointInvalid) && (_p_stVertex), E_uwAIFatalInvalidParameter );
/* cas des Waypoints dynamiques, c'est a dire qui bougent (rare...) */
if (WP_M_hWayPointGetSuperObject(_hWayPoint))
{
WP_M_vWayPointGetVertex(_hWayPoint,&stWPVertex);
hGlobalMatrix = HIE_fn_hGetSuperObjectGlobalMatrix (WP_M_hWayPointGetSuperObject(_hWayPoint));
POS_fn_vMulMatrixVertex( _p_stVertex, HIE_fn_hGetSuperObjectGlobalMatrix (WP_M_hWayPointGetSuperObject(_hWayPoint)), &stWPVertex );
}
else
WP_M_vWayPointGetVertex(_hWayPoint,_p_stVertex);
}
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_InitLinkTable(void)
{
#if defined(AI_USE_SCRIPT)
SCR_fn_v_Link_InitTable(&WP_gs_stWayPointLinkTable);
#endif /* AI_USE_SCRIPT */
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_CloseLinkTable(void)
{
#if defined(AI_USE_SCRIPT)
SCR_fn_v_Link_CloseTable(&WP_gs_stWayPointLinkTable);
#endif /* AI_USE_SCRIPT */
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if defined(AI_USE_SCRIPT)
SCR_tdst_Link_Table* WP_fnp_WayPoint_GetLinkTable (void)
{
return &WP_gs_stWayPointLinkTable;
}
#endif /* AI_USE_SCRIPT */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_SecondPass(WP_tdhWayPoint _hWayPoint)
{
#if defined(AI_USE_SCRIPT)
if(WP_M_hWayPointGetSuperObject(_hWayPoint))
{
WP_M_vWayPointAssert
(
(SCR_M_e_Link_GetState((SCR_tdst_Link_Value *)
(WP_M_hWayPointGetSuperObject(_hWayPoint))) == SCR_ELS_Link_Initialized),
E_uwAIFatalReferenceNotLoaded
);
/* retrieve the father handle : */
WP_M_vWayPointSetSuperObject
(
_hWayPoint,
M_GetSuperObject(
(struct tdstEngineObject_*)
(SCR_M_ul_Link_GetValue((SCR_tdst_Link_Value *)
(WP_M_hWayPointGetSuperObject(_hWayPoint)))
)
)
);
}
#endif /* AI_USE_SCRIPT */
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if defined(AI_USE_SCRIPT)
WP_tdhWayPoint WP_fnh_WayPoint_GetHandleFromLinkTable
(SCR_tdst_Link_Value*_p_stLinkValue)
{
WP_tdhWayPoint hWayPoint;
WP_M_vWayPointAssert
(
(SCR_M_e_Link_GetState(_p_stLinkValue) == SCR_ELS_Link_Initialized),
E_uwAIFatalReferenceNotLoaded
);
hWayPoint = (WP_tdhWayPoint)SCR_M_ul_Link_GetValue(_p_stLinkValue);
/* WP_fnv_WayPoint_SecondPass(hWayPoint); del by jt*/
return hWayPoint;
}
#endif /* AI_USE_SCRIPT */
/* add by jt*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void WP_fnv_WayPoint_LinkTableSecondPass(void)
{
#if defined(ACTIVE_EDITOR)
if( (fn_lGetSubMapNumber() != 0) && gs_Way_ulNbOfWarnings > 1)
{
MessageBox(NULL , "Some Waypoints are in the Sector Universe.\n Please see the 'WpWarnings.log' file" , "ERROR" , MB_OK);
}
if(gs_fWpWarningsFile)
{
fprintf ( gs_fWpWarningsFile , "==============================================================================\n\n");
fclose (gs_fWpWarningsFile);
}
gs_fWpWarningsFile = NULL;
gs_Way_ulNbOfWarnings = 0;
#endif
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */