721 lines
23 KiB
C
721 lines
23 KiB
C
/*=========================================================================
|
|
* Dynam.cpp : Dynam's functions
|
|
*
|
|
*
|
|
*
|
|
* Dynam MUST BE REPLACE BY THE C FILENAME
|
|
*
|
|
*
|
|
* Version 1.0
|
|
* Creation date 01/10/96
|
|
* Revision date
|
|
*
|
|
* That file needs to be compatible for all platforms.
|
|
*
|
|
* (c) Ubi Studios 1996
|
|
*=======================================================================*/
|
|
|
|
/*******************************************************/
|
|
/**** For the structures and variables declarations ****/
|
|
/*******************************************************/
|
|
#define D_Dynam_StructureDefine
|
|
#define D_Dynam_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 "Always.h"
|
|
|
|
#include "ObjInit.h"
|
|
#include "ObjType.h"
|
|
#include "ZeMem.h"
|
|
#include "ia_dnm.h"
|
|
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Dynam's object action script callback
|
|
*-----------------------------------------------------------------------------
|
|
* Input : Object pointer
|
|
* Output : None
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 01/10/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
/* #if !defined(U64)*/
|
|
#if defined(GAM_USE_SCRIPT)
|
|
SCR_tde_Anl_ReturnValue fn_eDynamScriptCallBack(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
|
|
{
|
|
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
|
|
MS_tdxHandleToDynam h_Dynam;
|
|
struct tdstEngineObject_ *p_stEngineObject;
|
|
ACP_tdxBool bCanHangOn;
|
|
ACP_tdxBool bBase, bAdvanced, bComplex;
|
|
eDynamicSize eSize;
|
|
ACP_tdxBool bCollision;
|
|
long lObjectType;
|
|
unsigned char ucTypeOfObject;
|
|
ACP_tdxBool bIsMobile;
|
|
DNM_tdstDynamics* p_stDynamics;
|
|
|
|
_p_stFile=_p_stFile;
|
|
|
|
SCR_M_RdL0_GetSectionLong(C_ParentSection,0,struct tdstEngineObject_ *, p_stEngineObject);
|
|
|
|
lObjectType = DNM_C_lObjectType_SolidMobile;
|
|
ucTypeOfObject = DNM_C_lObjectType_Solid;
|
|
bIsMobile = TRUE;
|
|
bCanHangOn = TRUE;
|
|
|
|
if (M_IsTitle)
|
|
{
|
|
bBase = bAdvanced = bComplex = FALSE;
|
|
bCollision = FALSE; /* default value */
|
|
eSize = eDynamicSizeBase; /* default size */
|
|
|
|
MMG_fn_vBeginMemoryInfo (MMG_C_lTypeMiniStructure , MMG_C_lSubTypeDynamics , p_stEngineObject);
|
|
|
|
h_Dynam = fn_h_DynamRealAlloc();
|
|
|
|
if (SCR_fn_uc_RdL0_GetNumberOfParameters(_ap_szParams)>=1)
|
|
{
|
|
if (!strcmp (_ap_szParams[0],C_szDynamicSizeBase)) eSize=eDynamicSizeBase;
|
|
else if (!strcmp (_ap_szParams[0],C_szDynamicSizeAdvanced)) eSize=eDynamicSizeAdvanced;
|
|
else if (!strcmp (_ap_szParams[0],C_szDynamicSizeComplex)) eSize=eDynamicSizeComplex;
|
|
|
|
if (SCR_fn_uc_RdL0_GetNumberOfParameters(_ap_szParams)==2) bCollision = (ACP_tdxBool)atoi (_ap_szParams[1]);
|
|
}
|
|
|
|
fn_v_DynamicAlloc ( h_Dynam, eSize, bCollision, FALSE );
|
|
|
|
MMG_fn_vEndMemoryInfo ();
|
|
p_stEngineObject->h_Dynam=h_Dynam;
|
|
|
|
fn_vInitDynamicalFunctionPointer(h_Dynam);
|
|
p_stDynamics = fn_p_stDynamGetDynamics(h_Dynam);
|
|
|
|
if (DNM_M_bDynamicsIsAdvancedSize(p_stDynamics))
|
|
{
|
|
DNM_M_vDynamicsSetSlideFactorX ( p_stDynamics, MTH_C_ONE );
|
|
DNM_M_vDynamicsSetSlideFactorY ( p_stDynamics, MTH_C_ONE );
|
|
DNM_M_vDynamicsSetSlideFactorZ ( p_stDynamics, MTH_C_ONE );
|
|
}
|
|
}
|
|
else if (M_IsEntry)
|
|
{
|
|
DNM_tdstDynamics* p_stDynamics;
|
|
p_stDynamics = fn_p_stDynamGetDynamics(p_stEngineObject->h_Dynam);
|
|
|
|
/* this test is only usefull to read old .car */
|
|
if (DNM_M_bDynamicsIsAdvancedSize(p_stDynamics))
|
|
{
|
|
|
|
if(M_ActionIs(C_szSlideFactorX))
|
|
{
|
|
double fSlideX;
|
|
fSlideX = atof (_ap_szParams[0]);
|
|
DNM_M_vDynamicsSetSlideFactorX (p_stDynamics,MTH_M_xDoubleToReal(fSlideX));
|
|
}
|
|
else if(M_ActionIs(C_szSlideFactorY))
|
|
{
|
|
double fSlideY;
|
|
fSlideY = atof (_ap_szParams[0]);
|
|
DNM_M_vDynamicsSetSlideFactorY (p_stDynamics,MTH_M_xDoubleToReal(fSlideY));
|
|
}
|
|
else if(M_ActionIs(C_szSlideFactorZ))
|
|
{
|
|
double fSlideZ;
|
|
fSlideZ = atof (_ap_szParams[0]);
|
|
DNM_M_vDynamicsSetSlideFactorZ (p_stDynamics,MTH_M_xDoubleToReal(fSlideZ));
|
|
}
|
|
}
|
|
}
|
|
|
|
return(eReturnValue);
|
|
}
|
|
#endif /* GAM_USE_SCRIPT */
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Dynam's mini-structure sizeof
|
|
*-----------------------------------------------------------------------------
|
|
* Input : None
|
|
* Output : Size of
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 14/10/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
unsigned long fn_ulDynamSizeOf()
|
|
{
|
|
return(sizeof(struct tdstDynam_));
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Dynam's object action allocation
|
|
*-----------------------------------------------------------------------------
|
|
* Input : Object pointer
|
|
* Output : None
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 01/10/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vDynamAlloc(struct tdstEngineObject_ *p_stObject)
|
|
{
|
|
if (p_stObject==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
|
|
|
if (p_stObject->h_Dynam!=NULL)
|
|
M_GameFatalError(E_uwGameMiniStructAllocAlreadyAlloc);
|
|
|
|
MMG_fn_vBeginMemoryInfo (MMG_C_lTypeMiniStructure , MMG_C_lSubTypeDynamics , p_stObject);
|
|
p_stObject->h_Dynam = fn_h_DynamRealAlloc();
|
|
|
|
fn_v_DynamicAlloc ( p_stObject->h_Dynam, eDynamicSizeBase, FALSE, (ACP_tdxBool)fn_ucIsAnAlwaysObject(p_stObject) );
|
|
|
|
MMG_fn_vEndMemoryInfo ();
|
|
}
|
|
|
|
MS_tdxHandleToDynam fn_h_DynamRealAlloc()
|
|
{
|
|
MS_tdxHandleToDynam h_Dynam;
|
|
|
|
h_Dynam = (MS_tdxHandleToDynam)M_p_GameMallocInHLM(fn_ulDynamSizeOf());
|
|
fn_vDynamSetParsingDatas(h_Dynam,(struct DNM_stParsingDatas *)M_p_GameMallocInHLM(sizeof(DNM_tdstParsingDatas)));
|
|
return(h_Dynam);
|
|
}
|
|
|
|
|
|
void fn_v_DynamicAlloc ( MS_tdxHandleToDynam h_Dynam, eDynamicSize eSize, ACP_tdxBool bCollision, ACP_tdxBool bAlways )
|
|
{
|
|
DNM_tdstDynamics* p_stDynamic=NULL;
|
|
|
|
#ifdef ACTIVE_EDITOR
|
|
/* In editor mode, we make a full allocation */
|
|
|
|
/* allocation */
|
|
p_stDynamic = (DNM_tdstDynamics*)M_p_GameMallocInHLM(sizeof(DNM_tdstComplexDynamics));
|
|
fn_vDynamSetDynamics ( h_Dynam, p_stDynamic );
|
|
DNM_M_DynamicsSetReport ( p_stDynamic, (DNM_tdstReport*)M_p_GameMallocInHLM(sizeof(DNM_tdstReport)) );
|
|
|
|
/* update flags */
|
|
switch (eSize)
|
|
{
|
|
case eDynamicSizeBase : DNM_M_vDynamicsSetBaseSize (p_stDynamic); break;
|
|
case eDynamicSizeAdvanced : DNM_M_vDynamicsSetAdvancedSize (p_stDynamic); break;
|
|
case eDynamicSizeComplex : DNM_M_vDynamicsSetComplexSize (p_stDynamic); break;
|
|
}
|
|
/* since we always allocate the collision report, say so! */
|
|
DNM_M_vDynamicsSetCollisionReport ( p_stDynamic, TRUE );
|
|
|
|
#else /* ACTIVE_EDITOR*/
|
|
|
|
/* allocation */
|
|
if (bAlways)
|
|
{
|
|
switch (eSize)
|
|
{
|
|
case eDynamicSizeBase :
|
|
p_stDynamic = (DNM_tdstDynamics*)TMP_M_p_Malloc(sizeof(DNM_tdstBaseDynamics));
|
|
DNM_M_vDynamicsSetBaseSize (p_stDynamic);
|
|
break;
|
|
case eDynamicSizeAdvanced :
|
|
p_stDynamic = (DNM_tdstDynamics*)TMP_M_p_Malloc(sizeof(DNM_tdstAdvancedDynamics));
|
|
DNM_M_vDynamicsSetAdvancedSize (p_stDynamic);
|
|
break;
|
|
case eDynamicSizeComplex :
|
|
p_stDynamic = (DNM_tdstDynamics*)TMP_M_p_Malloc(sizeof(DNM_tdstComplexDynamics));
|
|
DNM_M_vDynamicsSetComplexSize (p_stDynamic);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (eSize)
|
|
{
|
|
case eDynamicSizeBase :
|
|
p_stDynamic = (DNM_tdstDynamics*)M_p_GameMallocInHLM(sizeof(DNM_tdstBaseDynamics));
|
|
DNM_M_vDynamicsSetBaseSize (p_stDynamic);
|
|
break;
|
|
case eDynamicSizeAdvanced :
|
|
p_stDynamic = (DNM_tdstDynamics*)M_p_GameMallocInHLM(sizeof(DNM_tdstAdvancedDynamics));
|
|
DNM_M_vDynamicsSetAdvancedSize (p_stDynamic);
|
|
break;
|
|
case eDynamicSizeComplex :
|
|
p_stDynamic = (DNM_tdstDynamics*)M_p_GameMallocInHLM(sizeof(DNM_tdstComplexDynamics));
|
|
DNM_M_vDynamicsSetComplexSize (p_stDynamic);
|
|
break;
|
|
}
|
|
}
|
|
|
|
fn_vDynamSetDynamics ( h_Dynam, p_stDynamic );
|
|
DNM_M_vDynamicsSetAlways ( p_stDynamic, bAlways );
|
|
|
|
if (bCollision)
|
|
{
|
|
if( bAlways )
|
|
DNM_M_DynamicsSetReport ( p_stDynamic, (DNM_tdstReport*)TMP_M_p_Malloc(sizeof(DNM_tdstReport)) );
|
|
else
|
|
DNM_M_DynamicsSetReport ( p_stDynamic, (DNM_tdstReport*)M_p_GameMallocInHLM(sizeof(DNM_tdstReport)) );
|
|
}
|
|
else
|
|
DNM_M_DynamicsSetReport ( p_stDynamic, NULL );
|
|
|
|
DNM_M_vDynamicsSetCollisionReport ( p_stDynamic, bCollision );
|
|
|
|
#endif /* ACTIVE_EDITOR*/
|
|
}
|
|
|
|
|
|
void fn_v_DynamicFree ( MS_tdxHandleToDynam h_Dynam )
|
|
{
|
|
DNM_tdstDynamics* p_stDynamic;
|
|
|
|
if( (p_stDynamic = fn_p_stDynamGetDynamics(h_Dynam)) == NULL )
|
|
return;
|
|
|
|
#ifdef ACTIVE_EDITOR
|
|
if (DNM_M_bDynamicsIsCollisionReport(p_stDynamic))
|
|
M_GameFreeInHLM (DNM_M_p_stDynamicsGetReportWithoutCheckAccess(p_stDynamic));
|
|
M_GameFreeInHLM (p_stDynamic);
|
|
#else
|
|
if (DNM_M_bDynamicsIsAlways(p_stDynamic))
|
|
{
|
|
if (DNM_M_bDynamicsIsCollisionReport(p_stDynamic))
|
|
TMP_M_Free (DNM_M_p_stDynamicsGetReportWithoutCheckAccess(p_stDynamic));
|
|
TMP_M_Free (p_stDynamic);
|
|
}
|
|
else
|
|
{
|
|
if (DNM_M_bDynamicsIsCollisionReport(p_stDynamic))
|
|
M_GameFreeInHLM (DNM_M_p_stDynamicsGetReportWithoutCheckAccess(p_stDynamic));
|
|
M_GameFreeInHLM (p_stDynamic);
|
|
}
|
|
#endif
|
|
|
|
fn_vDynamSetDynamics( h_Dynam, NULL );
|
|
p_stDynamic = NULL;
|
|
}
|
|
|
|
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Dynam's object action free
|
|
*-----------------------------------------------------------------------------
|
|
* Input : Object pointer
|
|
* Output : None
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 01/10/96 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
void fn_vDynamFree(struct tdstEngineObject_ *p_stObject)
|
|
{
|
|
if (p_stObject==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
|
|
|
if (p_stObject->h_Dynam==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructNull);
|
|
|
|
MMG_fn_vAddMemoryInfo( MMG_C_lTypeMiniStructure , MMG_C_lSubTypeLight , p_stObject );
|
|
|
|
fn_v_DynamicFree (p_stObject->h_Dynam);
|
|
M_GameFreeInHLM(p_stObject->h_Dynam);
|
|
}
|
|
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Dynam'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 :
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void fn_vUpdateDynamicsMS(struct tdstEngineObject_ *p_stObject)
|
|
{
|
|
if (p_stObject==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
|
|
|
if (p_stObject->h_Dynam==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructNull);
|
|
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
|
|
void fn_vDynamInit(struct tdstEngineObject_ *p_stObject,enum tdeObjectTreeInit_ eObjectInit)
|
|
{
|
|
switch(eObjectInit)
|
|
{
|
|
case OTI_PlayerDead:
|
|
case OTI_ReinitTheMap:
|
|
|
|
case OTI_LoadSavedGame:
|
|
case OTI_MapLoaded:
|
|
case OTI_WhenGameStart:
|
|
DNM_fn_vInitBaseMechanic (p_stObject->h_Dynam->p_stDynamics);
|
|
memset(p_stObject->h_Dynam->p_stParsingDatas,0,sizeof(struct DNM_stParsingDatas));
|
|
break;
|
|
/* ANNECY MT - 18/09/98 {*/
|
|
case OTI_AlwaysCreated:
|
|
break;
|
|
/* END ANNECY MT }*/
|
|
}
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Dynam'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_vDynamDesinit(struct tdstEngineObject_ *p_stObject,enum tdeObjectTreeInit_ eObjectInit)
|
|
{
|
|
if (p_stObject==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructObjectNull);
|
|
|
|
if (p_stObject->h_Dynam==NULL)
|
|
M_GameFatalError(E_uwGameMiniStructNull);
|
|
|
|
switch(eObjectInit)
|
|
{
|
|
case OTI_ReinitTheMap:
|
|
break;
|
|
case OTI_MapLoaded:
|
|
/* Free only dynamics for always (because it's in TMP)*/
|
|
if (DNM_M_bDynamicsIsAlways(p_stObject->h_Dynam->p_stDynamics))
|
|
fn_v_DynamicFree( p_stObject->h_Dynam );
|
|
break;
|
|
case OTI_AlwaysCreated:
|
|
case OTI_PlayerDead:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Dynam'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_vDynamCopyClone(struct tdstEngineObject_ * _p_stObjectDest,struct tdstEngineObject_ * _p_stObjectSrc)
|
|
{
|
|
MS_tdxHandleToDynam hDest,hSrc;
|
|
DNM_tdstDynamics *p_stSrcDynamic, *p_stDestDynamic;
|
|
eDynamicSize eSize;
|
|
ACP_tdxBool bAlloc=TRUE;
|
|
ACP_tdxBool bAlways;
|
|
|
|
hDest = _p_stObjectDest->h_Dynam;
|
|
hSrc = _p_stObjectSrc->h_Dynam;
|
|
p_stSrcDynamic = _p_stObjectSrc->h_Dynam->p_stDynamics;
|
|
p_stDestDynamic = _p_stObjectDest->h_Dynam->p_stDynamics;
|
|
if (!p_stSrcDynamic) return;
|
|
|
|
|
|
bAlways = (ACP_tdxBool) fn_ucIsAnAlwaysObject (_p_stObjectDest);
|
|
|
|
/* alloc */
|
|
/* Oliv' - Portage v15 - ???*/
|
|
/*#ifndef U64*/
|
|
if (DNM_M_bDynamicsIsComplexSize(p_stSrcDynamic)) eSize = eDynamicSizeComplex;
|
|
else if (DNM_M_bDynamicsIsAdvancedSize(p_stSrcDynamic)) eSize = eDynamicSizeAdvanced;
|
|
else eSize = eDynamicSizeBase;
|
|
/*#else*/
|
|
/* eSize = eDynamicSizeComplex;*/
|
|
/*#endif*/
|
|
/* EndOfOliv'*/
|
|
|
|
if (p_stDestDynamic)
|
|
{
|
|
/* size */
|
|
switch (eSize)
|
|
{
|
|
case eDynamicSizeComplex :
|
|
bAlloc = (ACP_tdxBool)!DNM_M_bDynamicsIsComplexSize(p_stDestDynamic);
|
|
break;
|
|
case eDynamicSizeAdvanced :
|
|
bAlloc = (ACP_tdxBool)!DNM_M_bDynamicsIsAdvancedSize(p_stDestDynamic);
|
|
break;
|
|
case eDynamicSizeBase :
|
|
bAlloc = (ACP_tdxBool)!DNM_M_bDynamicsIsBaseSize(p_stDestDynamic);
|
|
break;
|
|
}
|
|
|
|
/* collision */
|
|
/* LOL*/
|
|
/*#ifndef U64*/
|
|
if (DNM_M_bDynamicsIsCollisionReport(p_stSrcDynamic)!=DNM_M_bDynamicsIsCollisionReport(p_stDestDynamic))
|
|
bAlloc = TRUE;
|
|
|
|
if (bAlloc) fn_v_DynamicFree (hDest);
|
|
/*#endif*/
|
|
}
|
|
|
|
if (bAlloc) fn_v_DynamicAlloc ( hDest, eSize, (ACP_tdxBool)(DNM_M_bDynamicsIsCollisionReport(p_stSrcDynamic)), bAlways );
|
|
|
|
/* copy */
|
|
DNM_fn_vDynamicsCopyClone(hDest->p_stDynamics,hSrc->p_stDynamics);
|
|
memcpy(hDest->p_stParsingDatas,hSrc->p_stParsingDatas,sizeof(DNM_tdstParsingDatas));
|
|
hDest->eUsedMechanics = hSrc->eUsedMechanics;
|
|
|
|
/* Set the always flag again, because it may have been changed by DNM_fn_vDynamicsCopyClone.*/
|
|
DNM_M_vDynamicsSetAlways( hDest->p_stDynamics, bAlways );
|
|
}
|
|
|
|
void fn_vInitDynamicalFunctionPointer(MS_tdxHandleToDynam h_Dynam)
|
|
{
|
|
DNM_fn_vDynamicsInitDefault(fn_p_stDynamGetDynamics(h_Dynam));
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : Dynam access functions
|
|
*-----------------------------------------------------------------------------
|
|
* Input : MS_tdxHandleToDynam + (value)
|
|
* Output : (value or pointer)
|
|
*-----------------------------------------------------------------------------
|
|
* Creation date : 31/01/97 Author : Francois
|
|
*-----------------------------------------------------------------------------
|
|
* Modification date : Modification Author :
|
|
* Modifications :
|
|
*---------------------------------------------------------------------------*/
|
|
struct DNM_stDynamics *fn_p_stDynamGetDynamics(MS_tdxHandleToDynam h_Dynam)
|
|
{
|
|
return(h_Dynam->p_stDynamics);
|
|
}
|
|
void fn_vDynamSetDynamics(MS_tdxHandleToDynam h_Dynam,struct DNM_stDynamics *p_stDynam)
|
|
{
|
|
h_Dynam->p_stDynamics=p_stDynam;
|
|
}
|
|
DNM_tdstParsingDatas *fn_p_stDynamGetParsingDatas(MS_tdxHandleToDynam h_Dynam)
|
|
{
|
|
return((h_Dynam->p_stParsingDatas));
|
|
}
|
|
void fn_vDynamSetParsingDatas(MS_tdxHandleToDynam h_Dynam,DNM_tdstParsingDatas *p_stParsingDatas)
|
|
{
|
|
h_Dynam->p_stParsingDatas = p_stParsingDatas;
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
DNM_tdeMechanicsID fn_eDynamGetUsedMechanics(MS_tdxHandleToDynam h_Dynam)
|
|
{
|
|
return (h_Dynam->eUsedMechanics);
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
void fn_vDynamSetUsedMechanics(MS_tdxHandleToDynam h_Dynam,DNM_tdeMechanicsID eUsedMechanics)
|
|
{
|
|
h_Dynam->eUsedMechanics = eUsedMechanics;
|
|
}
|
|
|
|
|
|
/* ANNECY MT - 25/08/98 {
|
|
MTH3D_tdstVector *fn_p_DynamGetCheckedSpeed(MS_tdxHandleToDynam h_Dynam,unsigned long _ul)
|
|
{
|
|
if ( _ul < C_ucNbOfCheckedSpeeds )
|
|
return (&(h_Dynam ->AveragePosition.a_CheckedSpeed[_ul]));
|
|
return NULL;
|
|
}
|
|
|
|
void fn_vDynamSetCheckedSpeed(MS_tdxHandleToDynam h_Dynam,unsigned long _ul,MTH3D_tdstVector *p_Speed)
|
|
{
|
|
if ( _ul < C_ucNbOfCheckedSpeeds )
|
|
{
|
|
MTH3D_M_vCopyVector((&(h_Dynam->AveragePosition.a_CheckedSpeed[_ul])),p_Speed);
|
|
}
|
|
else
|
|
MTH3D_M_vNullVector(&(h_Dynam ->AveragePosition.a_CheckedSpeed[_ul]));
|
|
}
|
|
|
|
|
|
MTH_tdxReal fn_xDynamGetCheckedTime(MS_tdxHandleToDynam h_Dynam,unsigned long _ul)
|
|
{
|
|
if ( _ul < C_ucNbOfCheckedSpeeds )
|
|
return (h_Dynam ->AveragePosition.a_CheckedTime[_ul]);
|
|
return 0;
|
|
}
|
|
|
|
void fn_vDynamSetCheckedTime(MS_tdxHandleToDynam h_Dynam,unsigned long _ul,MTH_tdxReal _dt)
|
|
{
|
|
if ( _ul < C_ucNbOfCheckedSpeeds )
|
|
{
|
|
h_Dynam ->AveragePosition.a_CheckedTime[_ul] = _dt;
|
|
}
|
|
else
|
|
h_Dynam ->AveragePosition.a_CheckedTime[_ul] = 0;
|
|
}
|
|
|
|
|
|
|
|
MTH3D_tdstVector *fn_p_DynamGetCheckedPos(MS_tdxHandleToDynam h_Dynam,unsigned long _ul)
|
|
{
|
|
if ( _ul < C_ucNbOfCheckedSpeeds )
|
|
return (&(h_Dynam ->AveragePosition.a_CheckedPos[_ul]));
|
|
return NULL;
|
|
}
|
|
|
|
void fn_vDynamSetCheckedPos(MS_tdxHandleToDynam h_Dynam,unsigned long _ul,MTH3D_tdstVector *p_Pos)
|
|
{
|
|
if ( _ul < C_ucNbOfCheckedSpeeds )
|
|
{
|
|
MTH3D_M_vCopyVector((&(h_Dynam->AveragePosition.a_CheckedPos[_ul])),p_Pos);
|
|
}
|
|
else
|
|
MTH3D_M_vNullVector(&(h_Dynam ->AveragePosition.a_CheckedPos[_ul]));
|
|
}
|
|
|
|
|
|
tdstSightAxisSystem *fn_p_DynamGetSightAxisSystem(MS_tdxHandleToDynam h_Dynam)
|
|
{
|
|
return &(h_Dynam->stSightAxisSystem);
|
|
}
|
|
|
|
|
|
MTH3D_tdstVector *fn_p_DynamGetSightAxis(MS_tdxHandleToDynam h_Dynam)
|
|
{
|
|
return (&(h_Dynam->stSightAxisSystem.SightAxis));
|
|
}
|
|
|
|
MTH3D_tdstVector *fn_p_DynamGetFirstComplementaryAxis(MS_tdxHandleToDynam h_Dynam)
|
|
{
|
|
return (&(h_Dynam->stSightAxisSystem.FirstComplementaryAxis));
|
|
}
|
|
|
|
MTH3D_tdstVector *fn_p_DynamGetSecondComplementaryAxis(MS_tdxHandleToDynam h_Dynam)
|
|
{
|
|
return (&(h_Dynam->stSightAxisSystem.SecondComplementaryAxis));
|
|
}
|
|
|
|
|
|
void fn_vDynamSetSightAxisSystem(MS_tdxHandleToDynam h_Dynam,tdstSightAxisSystem *p_stAxisSystem)
|
|
{
|
|
MTH3D_M_vCopyVector(&(h_Dynam->stSightAxisSystem.SightAxis),
|
|
&(p_stAxisSystem->SightAxis));
|
|
MTH3D_M_vCopyVector(&(h_Dynam->stSightAxisSystem.FirstComplementaryAxis),
|
|
&(p_stAxisSystem->FirstComplementaryAxis));
|
|
MTH3D_M_vCopyVector(&(h_Dynam->stSightAxisSystem.SecondComplementaryAxis),
|
|
&(p_stAxisSystem->SecondComplementaryAxis));
|
|
}
|
|
|
|
|
|
void fn_vDynamSetSightAxis(MS_tdxHandleToDynam h_Dynam,MTH3D_tdstVector *p_stVector)
|
|
{
|
|
MTH3D_M_vCopyVector(&(h_Dynam->stSightAxisSystem.SightAxis), p_stVector);
|
|
}
|
|
|
|
void fn_vDynamSetFirstComplementaryAxis(MS_tdxHandleToDynam h_Dynam,MTH3D_tdstVector *p_stVector)
|
|
{
|
|
MTH3D_M_vCopyVector(&(h_Dynam->stSightAxisSystem.FirstComplementaryAxis), p_stVector);
|
|
|
|
}
|
|
|
|
void fn_vDynamSetSecondComplementaryAxis(MS_tdxHandleToDynam h_Dynam,MTH3D_tdstVector *p_stVector)
|
|
{
|
|
MTH3D_M_vCopyVector(&(h_Dynam->stSightAxisSystem.SecondComplementaryAxis), p_stVector);
|
|
|
|
}
|
|
|
|
void fn_vGetPersoSightAxisSystem
|
|
(
|
|
HIE_tdxHandleToSuperObject _hPerso,
|
|
MTH3D_tdstVector *_p_stSightAxis,
|
|
MTH3D_tdstVector *_p_stFirstComplementaryAxis,
|
|
MTH3D_tdstVector *_p_stSecondComplementaryAxis
|
|
)
|
|
{
|
|
MS_tdxHandleToDynam h_Dynam;
|
|
|
|
if((h_Dynam = M_GetMSHandle(_hPerso,Dynam)) == NULL )
|
|
{
|
|
MTH3D_M_vSetBaseJVector(_p_stSightAxis);
|
|
MTH3D_M_vSetBaseJVector(_p_stFirstComplementaryAxis);
|
|
MTH3D_M_vSetBaseJVector(_p_stSecondComplementaryAxis);
|
|
return;
|
|
}
|
|
|
|
MTH3D_M_vCopyVector(_p_stSightAxis , fn_p_DynamGetSightAxis(h_Dynam));
|
|
MTH3D_M_vCopyVector(_p_stFirstComplementaryAxis , fn_p_DynamGetFirstComplementaryAxis(h_Dynam));
|
|
MTH3D_M_vCopyVector(_p_stSecondComplementaryAxis , fn_p_DynamGetSecondComplementaryAxis(h_Dynam));
|
|
}
|
|
END ANNECY MT } */
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void fn_v_DynamUpdateDNMObjectTypeFromMS(struct tdstDynam_ *p_stDynam)
|
|
{
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/*ANNECY jt {*/
|
|
struct DNM_stDynamics* fn_p_stDynamGetDynamicsSO (HIE_tdxHandleToSuperObject hSupObj)
|
|
{
|
|
MS_tdxHandleToDynam h_Dynam;
|
|
HIE_tdxHandleToVoid h_Object;
|
|
struct DNM_stDynamics* p_stDynamics = NULL;
|
|
|
|
h_Object = HIE_fn_hGetSuperObjectObject(hSupObj);
|
|
|
|
if (h_Object)
|
|
{
|
|
h_Dynam = M_GetMSHandle (hSupObj,Dynam);
|
|
if (h_Dynam) p_stDynamics = fn_p_stDynamGetDynamics (h_Dynam);
|
|
}
|
|
|
|
return p_stDynamics;
|
|
}
|
|
|
|
/*vient de AI\AiTools.c*/
|
|
/********************************************************************************************
|
|
* Set the position of p_SuperObjPerso to p_stVertex. Do not make the mecanic collision test.
|
|
*********************************************************************************************/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
ACP_tdxBool fn_bSetPositionWithoutCollideTest(HIE_tdxHandleToSuperObject p_SuperObjPerso, MTH3D_tdstVector *p_stVertex)
|
|
{
|
|
/* Set the new position*/
|
|
POS_fn_vSetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix(p_SuperObjPerso),p_stVertex);
|
|
POS_fn_vSetTranslationVector(HIE_fn_hGetSuperObjectMatrix(p_SuperObjPerso),p_stVertex);
|
|
|
|
return TRUE;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
/*ENDANNECY jt }*/
|