958 lines
28 KiB
C
958 lines
28 KiB
C
#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 */
|
||
|