reman3/Rayman_X/cpa/tempgrp/GAM/Actions/Dynam.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 }*/