587 lines
19 KiB
C
587 lines
19 KiB
C
/*=========================================================================
|
||
* MSWay.cpp : MSWay's functions
|
||
* Version 1.0
|
||
* Creation date January 21, 1997
|
||
* Revision date
|
||
*
|
||
* That file needs to be compatible for all platforms.
|
||
*
|
||
* (c) Ubi Studios 1996
|
||
*==========================================================================
|
||
* Remarks :
|
||
* Allocation of MSWay fields are made inside the AI module memory block
|
||
* Error raised when handling MSWay fields are raised from AI error module
|
||
*==========================================================================*/
|
||
|
||
/*******************************************************/
|
||
/**** For the structures and variables declarations ****/
|
||
/*******************************************************/
|
||
#define D_MSWay_StructureDefine
|
||
#define D_MSWay_VariableDefine
|
||
|
||
#include "ToolsCPA.h"
|
||
|
||
#include "Options/Options.h"
|
||
#include "Macros.h"
|
||
|
||
#include "Actions/AllActs.h"
|
||
|
||
#include "Structur/MemGame.h"
|
||
#include "Structur/ErrGame.h"
|
||
#include "Structur/Objects.h"
|
||
#include "Structur/GameScpt.h"
|
||
#include "Structur/StdObjSt.h"
|
||
#include "Structur/EngMode.h"
|
||
|
||
#include "Basic.h"
|
||
#include "ObjInit.h"
|
||
#include "ZeMem.h"
|
||
/*ANNECY JMD{*/
|
||
#define _WP_D_WPGRAPH_FRIEND_
|
||
#include "AI/AIBASE/WPgraphe.h"
|
||
#undef _WP_D_WPGRAPH_FRIEND_
|
||
/*ENDANNECY JMD }*/
|
||
|
||
#include "AI.h"
|
||
|
||
#include "safe.h" /*BART*/
|
||
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : MSWay's object action script callback
|
||
*-----------------------------------------------------------------------------
|
||
* Input : Object pointer
|
||
* Output : None
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 01/10/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author : Albert Pais
|
||
* Modifications :
|
||
* Effective implementation for MS Way
|
||
*-----------------------------------------------------------------------------
|
||
* Script Section Template for MS Way :
|
||
* :MSWay(NbrOfWay)
|
||
* Way(FileName,SectionNameOfWay1)
|
||
* Way(FileName,SectionNameOfWay2)
|
||
* ....
|
||
* Way(FileName,SectionNameOfWayNbrOfWay)
|
||
* :EndSection
|
||
*---------------------------------------------------------------------------*/
|
||
#if defined(GAM_USE_SCRIPT)
|
||
SCR_tde_Anl_ReturnValue fn_eMSWayScriptCallBack(SCR_tdst_File_Description *_p_stHandle,char *_p_szName,char *_d_szPars[],SCR_tde_Anl_Action _eAction)
|
||
{
|
||
SCRIPT_tdeReturnValue eReturnValue = R_SCRIPT_NormalReturn;
|
||
MS_tdxHandleToMSWay h_MSWay;
|
||
struct tdstEngineObject_ *p_stEngineObject;
|
||
|
||
SCR_M_RdL0_GetSectionLong(C_ParentSection,0,struct tdstEngineObject_ *, p_stEngineObject);
|
||
|
||
if (M_IsTitle)
|
||
{
|
||
MMG_fn_vBeginMemoryInfo (MMG_C_lTypeMiniStructure , MMG_C_lSubTypeMSWay , p_stEngineObject);
|
||
h_MSWay = fn_h_MSWayRealAlloc();
|
||
MMG_fn_vEndMemoryInfo ();
|
||
p_stEngineObject->h_MSWay=h_MSWay;
|
||
|
||
/* Push the result :*/
|
||
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,h_MSWay);
|
||
}
|
||
return(eReturnValue);
|
||
}
|
||
#endif /* GAM_USE_SCRIPT */
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : MSWay's mini-structure sizeof
|
||
*-----------------------------------------------------------------------------
|
||
* Input : None
|
||
* Output : Size of
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 14/10/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : January 21,1997 Modification Author : Albert Pais
|
||
* Modifications : Effective implementation for MS Way
|
||
*---------------------------------------------------------------------------*/
|
||
unsigned long fn_ulMSWaySizeOf()
|
||
{
|
||
return(sizeof(struct tdstMSWay_));
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : MSWay's object action allocation
|
||
*-----------------------------------------------------------------------------
|
||
* Input : Object pointer
|
||
* Output : None
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 01/10/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : January 21,1997 Modification Author : Albert Pais
|
||
* Modifications : Effective implementation for MS Way
|
||
*---------------------------------------------------------------------------*/
|
||
void fn_vMSWayAlloc(struct tdstEngineObject_ *p_stObject)
|
||
{
|
||
if (p_stObject==NULL)
|
||
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
||
|
||
if (MSWAY_M_hGetMSWayFromEngineObject(p_stObject)!=MSWAY_M_hInvalidMsWayHandle)
|
||
M_GameFatalError(E_uwGameMiniStructAllocAlreadyAlloc);
|
||
|
||
MMG_fn_vBeginMemoryInfo (MMG_C_lTypeMiniStructure , MMG_C_lSubTypeMSWay , p_stObject);
|
||
MSWAY_M_hGetMSWayFromEngineObject(p_stObject) = fn_h_MSWayRealAlloc();
|
||
MMG_fn_vEndMemoryInfo ();
|
||
}
|
||
|
||
MS_tdxHandleToMSWay fn_h_MSWayRealAlloc()
|
||
{
|
||
MS_tdxHandleToMSWay h_MSWay;
|
||
|
||
h_MSWay = (MS_tdxHandleToMSWay)M_p_GameMallocInHLM(fn_ulMSWaySizeOf());
|
||
MSWay_fn_vInitPath (h_MSWay);
|
||
return(h_MSWay);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : MSWay's object action free
|
||
*-----------------------------------------------------------------------------
|
||
* Input : Object pointer
|
||
* Output : None
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 01/10/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : January 22,1997 Modification Author : Alb
|
||
* Modifications : Effective implementation for MS Way
|
||
*---------------------------------------------------------------------------*/
|
||
void fn_vMSWayFree(struct tdstEngineObject_ *p_stObject)
|
||
{
|
||
MS_tdxHandleToMSWay hMSWay;
|
||
|
||
if (p_stObject==NULL)
|
||
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
||
|
||
hMSWay = MSWAY_M_hGetMSWayFromEngineObject(p_stObject);
|
||
if (hMSWay==MSWAY_M_hInvalidMsWayHandle)
|
||
M_GameFatalError(E_uwGameMiniStructNull);
|
||
|
||
/*ANNECY Bart#02 27/05/98 {*/
|
||
MSWay_fn_vDesinitPath(hMSWay);
|
||
/*ENDANNECY Bart#02 }*/
|
||
|
||
/* Destroy the object :*/
|
||
/* dfm
|
||
MSWay_fn_v_DestroyListOfWay
|
||
(
|
||
MSWAY_M_hGetMSWayFromEngineObject(p_stObject)
|
||
);
|
||
*/
|
||
MMG_fn_vAddMemoryInfo( MMG_C_lTypeMiniStructure , MMG_C_lSubTypeMSWay , p_stObject );
|
||
M_GameFreeInHLM(p_stObject->h_MSWay);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : MSWay's object action initialisation
|
||
*-----------------------------------------------------------------------------
|
||
* Input : When this function's called (see ObjInit.h)
|
||
* Output : None
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 01/10/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
void fn_vMSWayInit(struct tdstEngineObject_ *p_stObject,enum tdeObjectTreeInit_ eObjectInit)
|
||
{
|
||
MS_tdxHandleToMSWay hMSWay;
|
||
|
||
if (p_stObject==NULL)
|
||
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
||
|
||
hMSWay = MSWAY_M_hGetMSWayFromEngineObject(p_stObject);
|
||
if (hMSWay==MSWAY_M_hInvalidMsWayHandle)
|
||
M_GameFatalError(E_uwGameMiniStructNull);
|
||
|
||
MSWay_fn_vInitPath (hMSWay);
|
||
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : MSWay's object action desinitialisation
|
||
*-----------------------------------------------------------------------------
|
||
* Input : When this function's called (see ObjInit.h)
|
||
* Output : None
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 01/10/96 Author : Francois
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
void fn_vMSWayDesinit(struct tdstEngineObject_ *p_stObject,enum tdeObjectTreeInit_ eObjectInit)
|
||
{
|
||
MS_tdxHandleToMSWay hMSWay;
|
||
|
||
if (p_stObject==NULL)
|
||
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
||
|
||
hMSWay = MSWAY_M_hGetMSWayFromEngineObject(p_stObject);
|
||
if (hMSWay==MSWAY_M_hInvalidMsWayHandle)
|
||
M_GameFatalError(E_uwGameMiniStructNull);
|
||
|
||
MSWay_fn_vDesinitPath(hMSWay);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : MSWay's object copy clone action
|
||
*-----------------------------------------------------------------------------
|
||
* Input : Handle to destination, handle to source
|
||
* Output : None
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 30/06/97 Author : Olivier Jourdan
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
void fn_vMSWayCopyClone(struct tdstEngineObject_ * _p_stObjectDest,struct tdstEngineObject_ * _p_stObjectSrc)
|
||
{
|
||
/*ANNECY Bart#02 27/05/98 {*/
|
||
MSWay_fn_vDesinitPath(_p_stObjectDest->h_MSWay); /* Just To Be Sure !*/
|
||
/*ENDANNECY Bart#02 }*/
|
||
|
||
memcpy(_p_stObjectDest->h_MSWay,_p_stObjectSrc->h_MSWay,fn_ulMSWaySizeOf());
|
||
|
||
/*ANNECY Bart#02 27/05/98 {*/
|
||
MSWay_fn_vInitPath (_p_stObjectDest->h_MSWay); /* Just To Be Sure !*/
|
||
/*ENDANNECY Bart#02 }*/
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
* Description : compute the second pass for :
|
||
* - list of way
|
||
* - waypoint
|
||
* - way
|
||
*-----------------------------------------------------------------------------
|
||
* Input : None
|
||
* Output : None
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 13/05/97 Author : Jacques Th<54>noz
|
||
*-----------------------------------------------------------------------------
|
||
* Modification date : Modification Author :
|
||
* Modifications :
|
||
*---------------------------------------------------------------------------*/
|
||
#if defined(GAM_USE_SCRIPT)
|
||
void fn_vWaypointSecondPass (void)
|
||
{
|
||
WP_fnv_WayPoint_LinkTableSecondPass ();
|
||
}
|
||
#endif /* GAM_USE_SCRIPT */
|
||
|
||
/*JMD*************************************************************************
|
||
* manage graph ( the m_hPath member )
|
||
*****************************************************************************
|
||
*
|
||
* waypoint are stored in the reversed order the last one is at index 0
|
||
* (see WPG_fn_hShortestPath() that built the list from the destination
|
||
* to the source, that the algorithme !) so we must read them in reverse
|
||
* order
|
||
*****************************************************************************/
|
||
void MSWay_fn_vInitPath (MS_tdxHandleToMSWay hWay)
|
||
{
|
||
/*
|
||
if ( hWay ) {
|
||
hWay->m_hPath = NULL ;
|
||
hWay->m_lIndex = -1 ;
|
||
hWay->m_bIsCircular = 0;
|
||
}
|
||
*/
|
||
MSWay_fn_vDesinitPath(hWay); /* because we want to be sure that this new graph does not ecrase an old one that would not been desalloued*/
|
||
}
|
||
|
||
void MSWay_fn_vDesinitPath(MS_tdxHandleToMSWay hWay)
|
||
{
|
||
if ( hWay )
|
||
{
|
||
if ( hWay->m_hPath )
|
||
{
|
||
#ifdef GAM_USE_SCRIPT
|
||
if (hWay->m_hPath->m_szReferenceSection[0] == '@') /*BART*/
|
||
#endif
|
||
WPG_fn_vDestroy (hWay->m_hPath) ;
|
||
}
|
||
hWay->m_hPath = NULL ;
|
||
hWay->m_lIndex = -1 ;
|
||
hWay->m_bIsCircular = 0;
|
||
}
|
||
}
|
||
|
||
|
||
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
||
WP_tdHandleOfGraph MSWay_fn_hGetPathFormPerso (HIE_tdxHandleToSuperObject hSuperObject)
|
||
{
|
||
MS_tdxHandleToMSWay h_MSWay;
|
||
|
||
h_MSWay = M_GetMSHandle(hSuperObject, MSWay);
|
||
if ( h_MSWay )
|
||
return ( h_MSWay->m_hPath ) ;
|
||
return (NULL) ;
|
||
}
|
||
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
||
|
||
|
||
void MSWay_fn_vSetPath(MS_tdxHandleToMSWay hWay, WP_tdHandleOfGraph hPath, char _bIsCircular)
|
||
{
|
||
if ( hWay && hPath )
|
||
{
|
||
if ( hWay->m_hPath != NULL )
|
||
{
|
||
#ifdef GAM_USE_SCRIPT
|
||
/*if (hWay->m_hPath->m_szNameOfGraph[0] == 0) // no name => not a real graph, so you can destroy it ! !*/
|
||
if (hWay->m_hPath->m_szReferenceSection[0] == '@') /*BART*/
|
||
#endif
|
||
WPG_fn_vDestroy (hWay->m_hPath) ;
|
||
}
|
||
hWay->m_hPath = hPath ;
|
||
/* hWay->m_lIndex = WPG_fn_lNumberOfWaypointOfGraph (hPath) - 1 ;*/
|
||
hWay->m_lIndex = 0 ;
|
||
hWay->m_bIsCircular = _bIsCircular;
|
||
}
|
||
}
|
||
|
||
long MSWay_fn_lGetNumberWayPointInPath (MS_tdxHandleToMSWay hWay)
|
||
{
|
||
if ( hWay && hWay->m_hPath )
|
||
return (LST2_M_DynamicGetNumberOfElements(&hWay->m_hPath->m_hListOfNode)) ;
|
||
return (-1) ;
|
||
}
|
||
|
||
long MSWay_fn_lGetCurrentIndexInPath (MS_tdxHandleToMSWay hWay)
|
||
{
|
||
if (hWay && hWay->m_hPath)
|
||
return (hWay->m_lIndex) ;
|
||
return (-1) ;
|
||
}
|
||
|
||
long MSWay_fn_lGetLastIndexInPath (MS_tdxHandleToMSWay hWay)
|
||
{
|
||
if ( hWay && hWay->m_hPath )
|
||
return (LST2_M_DynamicGetNumberOfElements(&hWay->m_hPath->m_hListOfNode)-1) ;
|
||
/* return (0) ;*/
|
||
return (-1) ;
|
||
}
|
||
|
||
long MSWay_fn_lGetFirstIndexInPath (MS_tdxHandleToMSWay hWay)
|
||
{
|
||
if ( hWay && hWay->m_hPath )
|
||
return (0) ;
|
||
return (-1) ;
|
||
}
|
||
|
||
long MSWay_fn_lSetCurrentIndexInPath (MS_tdxHandleToMSWay hWay, long _lIndex)
|
||
{
|
||
long lNbOfElts;
|
||
if ( hWay != NULL && hWay->m_hPath )
|
||
{
|
||
lNbOfElts = LST2_M_DynamicGetNumberOfElements(&hWay->m_hPath->m_hListOfNode);
|
||
if (hWay->m_bIsCircular)
|
||
{
|
||
_lIndex %= lNbOfElts;
|
||
if (_lIndex<0) _lIndex+=lNbOfElts;
|
||
}
|
||
if (_lIndex>=lNbOfElts)
|
||
_lIndex = lNbOfElts-1;
|
||
if (_lIndex<0)
|
||
_lIndex = 0;
|
||
hWay->m_lIndex = _lIndex ;
|
||
return (hWay->m_lIndex) ;
|
||
}
|
||
return (-1) ;
|
||
}
|
||
|
||
long MSWay_fn_lLookForWPInMSWay(MS_tdxHandleToMSWay _hWay, WP_tdhWayPoint _hWayPoint)
|
||
{
|
||
long lNbOfElts;
|
||
int iIndex;
|
||
WP_tdhGraphNode hElement;
|
||
|
||
if ( _hWay && _hWay->m_hPath )
|
||
{
|
||
lNbOfElts = LST2_M_DynamicGetNumberOfElements(&_hWay->m_hPath->m_hListOfNode);
|
||
|
||
LST2_M_DynamicForEachElementOf(&_hWay->m_hPath->m_hListOfNode, hElement, iIndex)
|
||
{
|
||
if (_hWayPoint == hElement->m_hWayPoint)
|
||
return ((long)(lNbOfElts - iIndex - 1) );
|
||
}
|
||
}
|
||
return(-1);
|
||
}
|
||
|
||
|
||
long MSWay_fn_lIncrementCurrentIndexInPath (MS_tdxHandleToMSWay hWay, int iStep)
|
||
{
|
||
long lNbOfElts;
|
||
SAF_M_AssertWithMsg((hWay != NULL),"MsWay non alloue")
|
||
|
||
if (hWay == NULL)
|
||
return (-1);
|
||
|
||
SAF_M_AssertWithMsg((hWay->m_hPath != NULL),"MsWay non initialise")
|
||
|
||
if ( hWay->m_hPath )
|
||
{
|
||
lNbOfElts = LST2_M_DynamicGetNumberOfElements(&hWay->m_hPath->m_hListOfNode);
|
||
if (hWay->m_bIsCircular)
|
||
{
|
||
hWay->m_lIndex += iStep;
|
||
hWay->m_lIndex %= lNbOfElts;
|
||
if (hWay->m_lIndex<0) hWay->m_lIndex+=lNbOfElts;
|
||
return (hWay->m_lIndex);
|
||
}
|
||
else
|
||
{
|
||
if ( (hWay->m_lIndex + iStep >= 0) &&
|
||
(hWay->m_lIndex + iStep < lNbOfElts ) )
|
||
{
|
||
hWay->m_lIndex += iStep ;
|
||
return (hWay->m_lIndex) ;
|
||
}
|
||
}
|
||
}
|
||
return (-1) ;
|
||
}
|
||
|
||
WP_tdhWayPoint MSWay_fn_hGetWayPointOfPath (MS_tdxHandleToMSWay hWay, int iIndex)
|
||
{
|
||
WP_tdhGraphNode hElement ;
|
||
int i, k ;
|
||
long lNbOfElts;
|
||
|
||
if ( hWay && hWay->m_hPath)
|
||
{
|
||
lNbOfElts = LST2_M_DynamicGetNumberOfElements(&hWay->m_hPath->m_hListOfNode);
|
||
if (hWay->m_bIsCircular)
|
||
{
|
||
iIndex %= lNbOfElts;
|
||
if (iIndex<0) iIndex+=lNbOfElts;
|
||
}
|
||
else
|
||
{
|
||
if (iIndex < 0 || iIndex >= lNbOfElts )
|
||
return(NULL);
|
||
}
|
||
|
||
k = lNbOfElts - iIndex - 1;
|
||
LST2_M_DynamicGetElementNumber(&hWay->m_hPath->m_hListOfNode, hElement, k, i)
|
||
return (hElement->m_hWayPoint);
|
||
}
|
||
return (NULL) ;
|
||
}
|
||
|
||
unsigned long MSWay_fn_ulGetCapsForNextWayPointOfPath (MS_tdxHandleToMSWay hWay, int iIndex)
|
||
{
|
||
WP_tdhWayPoint hWayPoint1, hWayPoint2 ;
|
||
unsigned long ulNewCaps ;
|
||
long lNbOfElts;
|
||
|
||
if ( hWay && hWay->m_hPath != NULL)
|
||
{
|
||
lNbOfElts = LST2_M_DynamicGetNumberOfElements(&hWay->m_hPath->m_hListOfNode);
|
||
if (hWay->m_bIsCircular)
|
||
{
|
||
iIndex %= lNbOfElts;
|
||
if (iIndex<0) iIndex+=lNbOfElts;
|
||
}
|
||
if ( iIndex >= 0 && iIndex < lNbOfElts )
|
||
{
|
||
hWayPoint1 = MSWay_fn_hGetWayPointOfPath(hWay, iIndex ) ;
|
||
hWayPoint2 = MSWay_fn_hGetWayPointOfPath(hWay, iIndex+1 ) ;
|
||
if ( hWayPoint2 )
|
||
{
|
||
if (WPG_fn_lGetLinkCapabilities (hWay->m_hPath, hWayPoint1, hWayPoint2, &ulNewCaps)== -1 )
|
||
return (0);
|
||
return ( ulNewCaps ) ;
|
||
}
|
||
}
|
||
}
|
||
return (0) ;
|
||
}
|
||
|
||
long MSWay_fn_lChangeCapsForNextWayPointOfPath (MS_tdxHandleToMSWay hWay, int iIndex, unsigned long ulNewCaps, long lValue)
|
||
{
|
||
WP_tdhWayPoint hWayPoint1, hWayPoint2 ;
|
||
long lNbOfElts;
|
||
|
||
if ( hWay && hWay->m_hPath != NULL)
|
||
{
|
||
lNbOfElts = LST2_M_DynamicGetNumberOfElements(&hWay->m_hPath->m_hListOfNode);
|
||
if (hWay->m_bIsCircular)
|
||
{
|
||
iIndex %= lNbOfElts;
|
||
if (iIndex<0) iIndex+=lNbOfElts;
|
||
}
|
||
if ( iIndex >= 0 && iIndex < lNbOfElts )
|
||
{
|
||
hWayPoint1 = MSWay_fn_hGetWayPointOfPath(hWay, iIndex ) ;
|
||
hWayPoint2 = MSWay_fn_hGetWayPointOfPath(hWay, iIndex+1 ) ;
|
||
if ( hWayPoint2 )
|
||
{
|
||
return (WPG_fn_lChangeLinkCapabilities (hWay->m_hPath, hWayPoint1, hWayPoint2, ulNewCaps, lValue)); /* -1 if error*/
|
||
}
|
||
}
|
||
}
|
||
return (-1) ;
|
||
}
|
||
|
||
long MSWay_fn_lGetWeightForNextWayPointOfPath (MS_tdxHandleToMSWay hWay, int iIndex)
|
||
{
|
||
WP_tdhWayPoint hWayPoint1, hWayPoint2 ;
|
||
long lValue ;
|
||
long lNbOfElts;
|
||
|
||
if ( hWay && hWay->m_hPath != NULL)
|
||
{
|
||
lNbOfElts = LST2_M_DynamicGetNumberOfElements(&hWay->m_hPath->m_hListOfNode);
|
||
if (hWay->m_bIsCircular)
|
||
{
|
||
iIndex %= lNbOfElts;
|
||
if (iIndex<0) iIndex+=lNbOfElts;
|
||
}
|
||
if ( iIndex >= 0 && iIndex < lNbOfElts )
|
||
{
|
||
hWayPoint1 = MSWay_fn_hGetWayPointOfPath(hWay, iIndex ) ;
|
||
hWayPoint2 = MSWay_fn_hGetWayPointOfPath(hWay, iIndex+1 ) ;
|
||
if ( hWayPoint2 )
|
||
{
|
||
if (WPG_fn_lGetLinkWeight (hWay->m_hPath, hWayPoint1, hWayPoint2, &lValue)== -1 )
|
||
return (0);
|
||
return ( lValue ) ;
|
||
}
|
||
}
|
||
}
|
||
return (0) ;
|
||
}
|
||
|
||
long MSWay_fn_lChangeWeightForNextWayPointOfPath (MS_tdxHandleToMSWay hWay, int iIndex, long lWeight)
|
||
{
|
||
WP_tdhWayPoint hWayPoint1, hWayPoint2 ;
|
||
long lNbOfElts;
|
||
|
||
if ( hWay && hWay->m_hPath != NULL)
|
||
{
|
||
lNbOfElts = LST2_M_DynamicGetNumberOfElements(&hWay->m_hPath->m_hListOfNode);
|
||
if (hWay->m_bIsCircular)
|
||
{
|
||
iIndex %= lNbOfElts;
|
||
if (iIndex<0) iIndex+=lNbOfElts;
|
||
}
|
||
if ( iIndex >= 0 && iIndex < lNbOfElts )
|
||
{
|
||
hWayPoint1 = MSWay_fn_hGetWayPointOfPath(hWay, iIndex ) ;
|
||
hWayPoint2 = MSWay_fn_hGetWayPointOfPath(hWay, iIndex+1 ) ;
|
||
if ( hWayPoint2 )
|
||
{
|
||
return (WPG_fn_lChangeLinkWeight (hWay->m_hPath, hWayPoint1, hWayPoint2, lWeight)); /* -1 if error*/
|
||
}
|
||
}
|
||
}
|
||
return (-1) ;
|
||
}
|
||
|
||
|