/*
------------------------------------------------------------------------------------------
HEADER FILE FOR :
 Prototype of waypoints, links and ways exported functions
------------------------------------------------------------------------------------------
File Name :
 WP_F_nc.h
------------------------------------------------------------------------------------------
Creation :
  * Date : 
   March 14,1997
  * Author : 
   Albert Pais
------------------------------------------------------------------------------------------
Contents :
  defines prototype and functions used for waypoints, links and
  ways
------------------------------------------------------------------------------------------
*/
#if !defined(ONLY_TYPES)
/*
------------------------------------------------------------------------------------------
WAYPOINT FUNCTIONS DECLARATION:
------------------------------------------------------------------------------------------
*/
#ifdef _WP_D_DEFINE_WAYPOINTS_
 
#if !defined (__WP_WAYPOINTS_FUNCTIONS_PROTOS__)
#define __WP_WAYPOINTS_FUNCTIONS_PROTOS__
 
/* creation function :*/
WP_tdhWayPoint WP_fnh_WayPoint_Create(void);
/* destruction */
void WP_fnv_WayPoint_Destroy(WP_tdhWayPoint);
/* add reference and release */
void WP_fnv_WayPoint_AddRef(WP_tdhWayPoint);
void WP_fnv_WayPoint_Release(WP_tdhWayPoint);
 
/* "constructor" : */
WP_tdhWayPoint WP_fnh_WayPoint_Build(MTH3D_tdstVector*,MTH_tdxReal,HIE_tdxHandleToSuperObject);
/* duplicate : */ 
WP_tdhWayPoint WP_fnh_WayPoint_Duplicate(WP_tdhWayPoint);
/* copy */
void WP_fnv_WayPoint_Copy(WP_tdhWayPoint,WP_tdhWayPoint);
/* sizeof */
unsigned short WP_fnuw_WayPoint_SizeOf(void);
/* accessing to members :*/
void WP_fnv_WayPoint_GetVertex(WP_tdhWayPoint,MTH3D_tdstVector*);
void WP_fnv_WayPoint_SetVertex(WP_tdhWayPoint,MTH3D_tdstVector*);
 
MTH_tdxReal WP_fnx_WayPoint_GetRadius(WP_tdhWayPoint);
void WP_fnv_WayPoint_SetRadius(WP_tdhWayPoint,MTH_tdxReal);
 
HIE_tdxHandleToSuperObject WP_fnh_WayPoint_GetSuperObject(WP_tdhWayPoint);
void WP_fnv_WayPoint_SetSuperObject(WP_tdhWayPoint,HIE_tdxHandleToSuperObject);
 
/* validity of handles : */
void WP_fnv_WayPoint_Invalidate(WP_tdhWayPoint*);
ACP_tdxBool WP_fnb_WayPoint_IsValid(WP_tdhWayPoint);
ACP_tdxBool WP_fnb_WayPoint_IsInvalid(WP_tdhWayPoint);
 
ACP_tdxBool WP_fnb_WayPoint_IsDynamic(WP_tdhWayPoint);
ACP_tdxBool WP_fnb_WayPoint_IsStatic(WP_tdhWayPoint);
 
/* loading waypoints */
SCR_tde_Anl_ReturnValue WP_fne_WayPoint_ScriptCallBackLoad(SCR_tdst_File_Description *,char *,char **, SCR_tde_Anl_Action);
SCR_tde_Anl_ReturnValue WP_fne_WayPoint_ScriptSubSectionCallBackLoad(SCR_tdst_File_Description *,char *,char **, SCR_tde_Anl_Action);
/* tools */
void WP_fnv_WayPoint_ComputeLocation(WP_tdhWayPoint,MTH3D_tdstVector*);
 
#endif /*__WP_WAYPOINTS_FUNCTIONS_PROTOS__ */
 
#endif /* _WP_D_DEFINE_WAYPOINTS_ */
 
/*
------------------------------------------------------------------------------------------
LINK FUNCTIONS DECLARATION:
------------------------------------------------------------------------------------------
*/
#ifdef _WP_D_DEFINE_LINKS_
 
#if !defined (__WP_LINKS_FUNCTIONS_PROTOS__)
#define __WP_LINKS_FUNCTIONS_PROTOS__
 
/* creation function :*/
WP_tdhLink WP_fnh_Link_Create(void);
/* destruction */
void WP_fnv_Link_Destroy(WP_tdhLink);
/* add reference and release */
void WP_fnv_Link_AddRef(WP_tdhLink);
void WP_fnv_Link_Release(WP_tdhLink);
/* "constructor" : */
WP_tdhLink WP_fnh_Link_Build(void *,ACP_tdstDynaParam*,WP_tde_ucConnectionType,WP_tde_ucConnectionDynamicType,WP_tduc_SamplingRate);
/* duplicate : */ 
WP_tdhLink WP_fnh_Link_Duplicate(WP_tdhLink);
/* copy */
void WP_fnv_Link_Copy(WP_tdhLink,WP_tdhLink);
/* sizeof */
unsigned short WP_fnuw_Link_SizeOf(void);
/* accessing to members :*/
void WP_fnv_Link_GetDynamicParameter(WP_tdhLink,ACP_tdstDynaParam*);
void WP_fnv_Link_SetDynamicParameter(WP_tdhLink,ACP_tdstDynaParam*);
WP_tde_ucConnectionType WP_fneuc_Link_GetConnectionType(WP_tdhLink);
void WP_fnv_Link_SetConnectionType(WP_tdhLink,WP_tde_ucConnectionType);
 
WP_tde_ucConnectionDynamicType WP_fneuc_Link_GetConnectionDynamicType(WP_tdhLink);
void WP_fnv_Link_SetConnectionDynamicType(WP_tdhLink,WP_tde_ucConnectionDynamicType);
 
unsigned char WP_fnuc_Link_GetCurrentSample(WP_tdhLink);
void WP_fnv_Link_SetCurrentSample(WP_tdhLink,unsigned char);
 
/* validity of handles : */
void WP_fnv_Link_Invalidate(WP_tdhLink*);
ACP_tdxBool WP_fnb_Link_IsValid(WP_tdhLink);
ACP_tdxBool WP_fnb_Link_IsInvalid(WP_tdhLink);
 
/* allocate fields :*/
void WP_fnv_Link_Allocate(WP_tdhLink,WP_tde_ucConnectionType,WP_tde_ucConnectionDynamicType);
/* free structures : */
void WP_fnv_Link_Free(WP_tdhLink);
 
/* changing connection type :*/
void WP_fnv_Link_ChangeConnectionTypeBezier(WP_tdhLink,MTH3D_tdhBezierCurve);
MTH3D_tdhBezierCurve WP_fnv_Link_GetConnectionTypeBezierCurve(WP_tdhLink);
void WP_fnv_Link_ChangeConnectionTypeCircleArc(WP_tdhLink,MTH3D_tdhCircleArcCurve);
MTH3D_tdhCircleArcCurve WP_fnv_Link_GetConnectionTypeCircleArcCurve(WP_tdhLink);
void WP_fnv_Link_ChangeConnectionTypeStaticLineObject(WP_tdhLink,WP_tdhWayPoint);
WP_tdhWayPoint WP_fnv_Link_GetConnectionTypeStaticLineObjectWayPoint(WP_tdhLink);
void WP_fnv_Link_ChangeConnectionTypeDynamicLine(WP_tdhLink,WP_tdhWayPoint);
WP_tdhWayPoint WP_fnv_Link_GetConnectionTypeDynamicLineWayPoint(WP_tdhLink);
 
void WP_fnv_Link_UpdateDynamicInfo(WP_tdhLink);
 
#endif /*__WP_LINKS_FUNCTIONS_PROTOS__ */
 
#endif /* _WP_D_DEFINE_LINKS_ */
 
/*
------------------------------------------------------------------------------------------
WAY FUNCTIONS DECLARATION:
------------------------------------------------------------------------------------------
*/
#ifdef _WP_D_DEFINE_WAYS_
 
#if !defined (__WP_WAYS_FUNCTIONS_PROTOS__)
#define __WP_WAYS_FUNCTIONS_PROTOS__
 
/* creation function :*/
WP_tdhWay WP_fnh_Way_Create(void);
/* destruction */
void WP_fnv_Way_Destroy(WP_tdhWay);
/* add reference and release */
void WP_fnv_Way_AddRef(WP_tdhWay);
void WP_fnv_Way_Release(WP_tdhWay);
/* current wp index : */
void WP_fnv_Way_SetCurrentWPIndex(WP_tdhWay,WP_tduc_WPIndex);
 
/* "constructor" : */
WP_tdhWay WP_fnh_Way_Build(WP_tduc_WPIndex);
/* "Destructor" */
void WP_fnv_Way_Free(WP_tdhWay);
/* allocate : */
void WP_fnv_Way_Alloc(WP_tdhWay,WP_tduc_WPIndex);
/* re-size the way : */
void WP_fnv_Way_Realloc(WP_tdhWay,WP_tduc_WPIndex);
/* duplicate : */ 
WP_tdhWay WP_fnh_Way_Duplicate(WP_tdhWay);
/* copy */
void WP_fnv_Way_Copy(WP_tdhWay,WP_tdhWay);
/* sizeof */
unsigned short WP_fnuw_Way_SizeOf(void);
/* accessing to members :*/
WP_tdhWayPoint* WP_fnd_h_Way_GetWayPointArray(WP_tdhWay);
void WP_fnv_Way_SetWayPointArray(WP_tdhWay,WP_tdhWayPoint*);
 
WP_tdhLink* WP_fnd_h_Way_GetLinkArray(WP_tdhWay);
void WP_fnv_Way_SetLinkArray(WP_tdhWay,WP_tdhLink*);
 
WP_tduc_WPIndex WP_fnuc_Way_GetSizeWay(WP_tdhWay);
void WP_fnv_Way_SetSizeWay(WP_tdhWay,WP_tduc_WPIndex);
 
WP_tduc_WPIndex WP_fnuc_Way_GetCurrentWPIndex(WP_tdhWay);
void WP_fnv_Way_SetCurrentWPIndex(WP_tdhWay,WP_tduc_WPIndex);
 
unsigned char WP_fnuc_Way_GetUsedCount(WP_tdhWay);
void WP_fnv_Way_SetUsedCount(WP_tdhWay,unsigned char);
 
WP_tdhWayPoint WP_fnh_Way_GetElementFromWayPointArray(WP_tdhWay,WP_tduc_WPIndex);
void WP_fnv_Way_SetElementFromWayPointArray(WP_tdhWay,WP_tduc_WPIndex,WP_tdhWayPoint);
 
WP_tdhLink WP_fnh_Way_GetElementFromLinkArray(WP_tdhWay,WP_tduc_WPIndex);
void WP_fnv_Way_SetElementFromLinkArray(WP_tdhWay,WP_tduc_WPIndex,WP_tdhLink);
 
/* validity of handles : */
void WP_fnv_Way_Invalidate(WP_tdhWay*);
ACP_tdxBool WP_fnb_Way_IsValid(WP_tdhWay);
ACP_tdxBool WP_fnb_Way_IsInvalid(WP_tdhWay);
 
/* adding and removing waypoints : */
void WP_fnv_Way_InsertWayPoint(WP_tdhWay,WP_tdhWayPoint, WP_tdhLink,WP_tdhLink,WP_tduc_WPIndex);
void WP_fnv_Way_DeleteWayPoint(WP_tdhWay,WP_tduc_WPIndex,WP_tdhLink);
 
/* retrieving waypoints : */
WP_tduc_WPIndex WP_fnuc_Way_PositionWayPoint(WP_tdhWay,WP_tdhWayPoint);
WP_tdhWayPoint WP_fnh_Way_NextWayPoint(WP_tdhWay);
WP_tdhWayPoint WP_fnh_Way_PrevWayPoint(WP_tdhWay);
WP_tdhWayPoint WP_fnh_Way_CurrentWayPoint(WP_tdhWay);
 
/* load*/
SCR_tde_Anl_ReturnValue WP_fne_Way_ScriptCallBackLoad
(SCR_tdst_File_Description*,char*,char**,SCR_tde_Anl_Action);
/* Tools :*/
void WP_fnv_Way_InitBeforeFollowing(HIE_tdxHandleToSuperObject,WP_tdhWay);
/* function called when the specific vertex has been reached */
unsigned char WP_fnuc_Way_CurrentVertexReached(HIE_tdxHandleToSuperObject,WP_tdhWay);
/* function called to get the speed : */
MTH_tdxReal WP_fnx_Way_GetCurrentSpeed(HIE_tdxHandleToSuperObject,WP_tdhWay);
/* function called to get the vertex to reach */
void WP_fnv_Way_GetNextPoint(HIE_tdxHandleToSuperObject,WP_tdhWay,MTH3D_tdstVector*,MTH_tdxReal*);
 
 
#endif /* __WP_WAYS_FUNCTIONS_PROTOS__ */
 
#endif /* _WP_D_DEFINE_WAYS_ */
 
#endif /* !ONLY_TYPES */
