399 lines
11 KiB
C
399 lines
11 KiB
C
/*
|
|
----------------------------------------
|
|
File Name :
|
|
AIUseCPA.h
|
|
----------------------------------------
|
|
Required for :
|
|
ACP basic definitions.
|
|
----------------------------------------
|
|
*/
|
|
#include "AIUseCPA.h"
|
|
|
|
/*
|
|
----------------------------------------
|
|
File Name :
|
|
AIMacros.h
|
|
----------------------------------------
|
|
Required for :
|
|
AI main macros definitions.
|
|
----------------------------------------
|
|
*/
|
|
#include "AIMacros.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_WPARC_FREIND_
|
|
#include "WParc.h"
|
|
#undef _WP_D_WPARC_FREIND_
|
|
|
|
#define _WP_D_WAYPOINT_FRIEND_
|
|
#define WP_D_WAYPOINT_GLOBALS_
|
|
#include "WPWayPt.h"
|
|
#undef WP_D_WAYPOINT_GLOBALS_
|
|
#undef _WP_D_WAYPOINT_FRIEND_
|
|
|
|
/*****************************************************
|
|
* Function : WPARCLST_fn_hInit
|
|
* Description : initialise a WParc list to an empty
|
|
* list. it also allocate memory for the
|
|
* list.
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
WP_tdHandleOfListOfArc WPARCLST_fn_hInit (void)
|
|
{
|
|
WP_tdHandleOfListOfArc hList ;
|
|
|
|
MMG_fn_vAddMemoryInfo (MMG_C_lTypeAI , MMG_C_lSubTypeListOfArc , NULL);
|
|
|
|
#ifdef U64
|
|
/* on U64, AI is a block without free, so alloc in TMP*/
|
|
hList = (WP_tdHandleOfListOfArc) TMP_M_p_Malloc(sizeof(WP_tdstListOfArc));
|
|
#else
|
|
M_AIAlloc(hList, WP_tdHandleOfListOfArc, sizeof(WP_tdstListOfArc)) ;
|
|
#endif
|
|
|
|
if ( hList )
|
|
LST2_M_DynamicInitAnchor(&hList->m_hArc) ;
|
|
return (hList) ;
|
|
}
|
|
/*****************************************************
|
|
* Function : WPARCLST_fn_vDestroy
|
|
* Description : free memory allocated for the list
|
|
* and destroy each element of the list
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
void WPARCLST_fn_vDestroy (WP_tdHandleOfListOfArc hList)
|
|
{
|
|
WP_tdHandleOfArc hElement, hNextElement ;
|
|
int i ;
|
|
|
|
if ( hList )
|
|
{
|
|
LST2_M_DynamicForEachMovingElementOf(&hList->m_hArc, hElement, hNextElement, i)
|
|
{
|
|
LST2_M_DynamicIsolate(hElement) ;
|
|
WPARC_fn_vDestroyArc (hElement) ;
|
|
}
|
|
|
|
#ifdef U64
|
|
/* on U64, AI block is replaced by TMP block, so free in TMP*/
|
|
TMP_M_Free(hList);
|
|
#else
|
|
M_AIFree(hList);
|
|
#endif
|
|
|
|
hList = NULL; /* BART ?*/
|
|
}
|
|
}
|
|
|
|
/*****************************************************
|
|
* Function : WPARCLST_fn_vAdd
|
|
* Description : add a new element at the end of the
|
|
* list.
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
void WPARCLST_fn_vAdd (WP_tdHandleOfListOfArc hListOfArc, WP_tdhGraphNode hNode,
|
|
long lWeight, unsigned long ulCapability)
|
|
{
|
|
WP_tdHandleOfArc hNewArc ;
|
|
char bOK=0;
|
|
int i;
|
|
WP_tdHandleOfArc hElement;
|
|
|
|
if ( hListOfArc )
|
|
{
|
|
LST2_M_DynamicForEachElementOf(&hListOfArc->m_hArc, hElement, i) /* if already exists !*/
|
|
{
|
|
if (hElement->m_hNode == hNode)
|
|
{
|
|
hElement->m_ulCapabilityInit = ulCapability;
|
|
hElement->m_ulCapability = ulCapability;
|
|
hElement->m_lWeightInit = lWeight;
|
|
hElement->m_lWeight = lWeight;
|
|
bOK = 1;
|
|
break;
|
|
}
|
|
}
|
|
if (bOK == 0)
|
|
{
|
|
hNewArc = WPARC_CreateArc (hNode, lWeight, ulCapability) ;
|
|
if ( hNewArc ) {
|
|
LST2_M_DynamicAddTail( &hListOfArc->m_hArc, hNewArc ) ;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*****************************************************
|
|
* Function : WPARCLST_fn_vRemove
|
|
* Description : remove an element from the list
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void WPARCLST_fn_vRemove (WP_tdHandleOfListOfArc hList, WP_tdhGraphNode hNode ) {
|
|
WP_tdHandleOfArc hElement, hNextElement ;
|
|
int i ;
|
|
|
|
if ( hList ) {
|
|
LST2_M_DynamicForEachMovingElementOf(&hList->m_hArc, hElement, hNextElement, i) {
|
|
if ( hElement->m_hNode == hNode ) {
|
|
LST2_M_DynamicIsolate(hElement) ;
|
|
WPARC_fn_vDestroyArc (hElement) ;
|
|
break ;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/*****************************************************
|
|
* Function : WPARCLST_fn_lChangeCapabilities
|
|
* Description : change the Capability of an existing arc
|
|
* return -1 if the link doesn't exist
|
|
* return 0 if the Capability has been change
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
long WPARCLST_fn_lChangeCapabilities (WP_tdHandleOfListOfArc hListOfArc, WP_tdhGraphNode hNode, unsigned long ulCapability, long lValue) {
|
|
WP_tdHandleOfArc hElement ;
|
|
int i ;
|
|
|
|
if ( hListOfArc && hNode ) {
|
|
LST2_M_DynamicForEachElementOf(&hListOfArc->m_hArc, hElement, i) {
|
|
if ( hElement->m_hNode == hNode ) {
|
|
switch (lValue)
|
|
{
|
|
case 0:
|
|
case 2:
|
|
hElement->m_ulCapability |= ulCapability; /* add the type*/
|
|
break;
|
|
case 1:
|
|
case 3:
|
|
hElement->m_ulCapability = ulCapability; /* change all the types field*/
|
|
break;
|
|
case 4:
|
|
hElement->m_ulCapability &= ~ulCapability;; /* sub the type*/
|
|
break;
|
|
case 5:
|
|
hElement->m_ulCapability = 0; /* erase all the types field*/
|
|
break;
|
|
}
|
|
return (0) ;
|
|
}
|
|
}
|
|
|
|
}
|
|
return (-1) ;
|
|
}
|
|
|
|
/*****************************************************
|
|
* Function : WPARCLST_fn_lGetCapabilities
|
|
* Description : get the Capabilities of an existing arc
|
|
* return -1 if the link doesn't exist
|
|
* return 0 otherwise
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
long WPARCLST_fn_lGetCapabilities (WP_tdHandleOfListOfArc hListOfArc,
|
|
WP_tdhGraphNode hNode, unsigned long* p_ulCapability) {
|
|
WP_tdHandleOfArc hElement ;
|
|
int i ;
|
|
|
|
if ( hListOfArc && hNode ) {
|
|
LST2_M_DynamicForEachElementOf(&hListOfArc->m_hArc, hElement, i) {
|
|
if ( hElement->m_hNode == hNode ) {
|
|
*p_ulCapability = hElement->m_ulCapability ;
|
|
return (0) ;
|
|
}
|
|
}
|
|
}
|
|
return (-1) ;
|
|
}
|
|
|
|
|
|
long WPARCLST_fn_lChangeWeight (WP_tdHandleOfListOfArc hListOfArc, WP_tdhGraphNode hNode, long lWeight) {
|
|
WP_tdHandleOfArc hElement ;
|
|
int i ;
|
|
|
|
if ( hListOfArc && hNode ) {
|
|
LST2_M_DynamicForEachElementOf(&hListOfArc->m_hArc, hElement, i) {
|
|
if ( hElement->m_hNode == hNode ) {
|
|
hElement->m_lWeight = lWeight;
|
|
return (0) ;
|
|
}
|
|
}
|
|
|
|
}
|
|
return (-1) ;
|
|
}
|
|
|
|
long WPARCLST_fn_lGetWeight (WP_tdHandleOfListOfArc hListOfArc,
|
|
WP_tdhGraphNode hNode, long *p_lWeight) {
|
|
WP_tdHandleOfArc hElement ;
|
|
int i ;
|
|
|
|
if ( hListOfArc && hNode ) {
|
|
LST2_M_DynamicForEachElementOf(&hListOfArc->m_hArc, hElement, i) {
|
|
if ( hElement->m_hNode == hNode ) {
|
|
*p_lWeight = hElement->m_lWeight ;
|
|
return (0) ;
|
|
}
|
|
}
|
|
}
|
|
return (-1) ;
|
|
}
|
|
|
|
|
|
/*****************************************************
|
|
* Function : WPARC_CreateArc
|
|
* Description : allocate memory for an Element and
|
|
* set his value
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
WP_tdHandleOfArc WPARC_CreateArc (WP_tdhGraphNode hNode, long lWeight, unsigned long ulCapability)
|
|
{
|
|
WP_tdHandleOfArc hNewArc ;
|
|
|
|
MMG_fn_vAddMemoryInfo (MMG_C_lTypeAI , MMG_C_lSubTypeArc , NULL);
|
|
|
|
#ifdef U64
|
|
/* on U64, AI is a block without free, so alloc in TMP*/
|
|
hNewArc = (WP_tdHandleOfArc) TMP_M_p_Malloc(sizeof(WP_tdstWayArc));
|
|
#else
|
|
M_AIAlloc ( hNewArc, WP_tdHandleOfArc, sizeof ( WP_tdstWayArc ) ) ;
|
|
#endif
|
|
|
|
if ( hNewArc )
|
|
{
|
|
LST2_M_DynamicInitElement(hNewArc) ;
|
|
hNewArc->m_hNode = hNode ;
|
|
hNewArc->m_ulCapabilityInit = ulCapability ;
|
|
hNewArc->m_ulCapability = ulCapability ;
|
|
hNewArc->m_lWeightInit = lWeight ;
|
|
hNewArc->m_lWeight = lWeight ;
|
|
}
|
|
return (hNewArc) ;
|
|
}
|
|
|
|
|
|
void WPARC_fn_vDestroyArc(WP_tdHandleOfArc hArc)
|
|
{
|
|
if ( hArc )
|
|
{
|
|
#ifdef U64
|
|
/* on U64, AI block is replaced by TMP block, so free in TMP*/
|
|
TMP_M_Free(hArc);
|
|
#else
|
|
M_AIFree(hArc) ;
|
|
#endif
|
|
hArc = NULL;
|
|
}
|
|
}
|
|
/*****************************************************
|
|
* Function : WPARC_fn_lSetWeight
|
|
* Description : access function, set the Weight
|
|
* field
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
long WPARC_fn_lSetWeight (WP_tdHandleOfArc hArc, long lWeight) {
|
|
if ( hArc ) {
|
|
hArc->m_lWeightInit = lWeight;
|
|
return ( !(hArc->m_lWeight = lWeight) ) ;
|
|
}
|
|
return (-1) ;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
/*****************************************************
|
|
* Function : WPARC_fn_lGetWeight
|
|
* Description : access function, get the Weight
|
|
* field
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
long WPARC_fn_lGetWeight (WP_tdHandleOfArc hArc) {
|
|
if ( hArc )
|
|
return (hArc->m_lWeight) ;
|
|
return (-1) ;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/*****************************************************
|
|
* Function : WPARC_fn_lSetCapability
|
|
* Description : access function, set the Capability field
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
long WPARC_fn_lSetCapability (WP_tdHandleOfArc hArc, unsigned long ulCapability) {
|
|
if ( hArc ) {
|
|
hArc->m_ulCapabilityInit = ulCapability;
|
|
return ( !(hArc->m_ulCapability = ulCapability) ) ;
|
|
}
|
|
return (-1) ;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/* Function : WPARC_fn_lAddCapability
|
|
//return ( !(hArc->m_ulCapability |= ulCapability) ) ;
|
|
hArc->m_ulCapability |= ulCapability;
|
|
*/
|
|
|
|
/* Function : WPARC_fn_lSubCapability
|
|
//return ( !(hArc->m_ulCapability ^=ulCapability) ) ;
|
|
hArc->m_ulCapability -= (hArc->m_ulCapability & ulCapability);
|
|
*/
|
|
|
|
/*****************************************************
|
|
* Function : WPARC_fn_ulGetCapability
|
|
* Description : access function, get the Capability field
|
|
*****************************************************
|
|
* Author : Jean-Marc Drouaud
|
|
* Date : 13/01/98
|
|
*****************************************************/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
unsigned long WPARC_fn_ulGetCapability (WP_tdHandleOfArc hArc) {
|
|
if ( hArc )
|
|
return ( hArc->m_ulCapability ) ;
|
|
return ((unsigned long)0) ;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
|
|
|
|
|