reman3/Rayman_X/cpa/tempgrp/GAM/Actions/cineinfo.c

1537 lines
56 KiB
C

/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
#define D_CineInfo_StructureDefine
#define D_CineInfo_VariableDefine
#include "ToolsCPA.h"
#include "Options/Def_Snd.h"
#include "Options/Options.h"
#include "Macros.h"
#include "Actions/AllActs.h"
#include "Structur/EngMode.h"
#include "Structur/MemGame.h"
#include "Structur/ErrGame.h"
#include "Structur/Objects.h"
#include "Structur/GameScpt.h"
#include "Structur/StdObjSt.h"
#include "Structur/3DOSLkTb.h"
#include "ToolCam.h"
#include "TypeCam.h"
#include "ObjInit.h"
#include "ZeMem.h"
#include "ObjType.h"
#include "Basic.h"
#ifdef SOUND_FOR_3DOS
#include "Micros.h"
#endif
#include "GameEng.h"
#include "MainChar.h"
extern HIE_tdxHandleToSuperObject g_hOldTargetedPerso;
/*
**************************************************************************************************
**************************************************************************************************
GLOBALS
**************************************************************************************************
**************************************************************************************************
*/
/*
* To receive some camera internal constants values.
*/
CAM_tdstCameraConstants CAM_g_stCameraConstants;
CAM_tdstCameraConstants CAM_g_stCopyCameraConstants;
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
/*
*=================================================================================================
* Load the camera internal constants value.
*=================================================================================================
*/
void CAM_fn_vLoadCameraConstants(void)
{
CAM_g_stCameraConstants.xRayCameraSphereToGo1 = MTH_M_xFloatToReal(0.35f);
CAM_g_stCameraConstants.xRayCameraSphereToGo2 = MTH_M_xFloatToReal(0.35f);
CAM_g_stCameraConstants.xRayCameraSphereToSee1 = MTH_M_xFloatToReal(0.10f);
CAM_g_stCameraConstants.xRayCameraSphereToSee2 = MTH_M_xFloatToReal(0.10f);
CAM_g_stCameraConstants.xBaseAngleComputePosNormal = MTH_C_PiBy4;
CAM_g_stCameraConstants.xBaseAngleComputePosFailure = MTH_C_PiBy4;
CAM_g_stCameraConstants.xBaseCutAngle = MTH_C_PiBy8;
CAM_g_stCameraConstants.xAverageForComputePos = MTH_M_xFloatToReal(0.40f);
CAM_g_stCameraConstants.xAverageForComputeLinearSpeed = MTH_M_xFloatToReal(0.40f);
CAM_g_stCameraConstants.xMinLinearSpeedCamera = MTH_M_xFloatToReal(0.005f);
CAM_g_stCameraConstants.xMinLinearSpeedTgtPerso = MTH_M_xFloatToReal(0.01f);
CAM_g_stCameraConstants.xMinAngularSpeedTgtPerso = MTH_M_xFloatToReal(0.01f);
CAM_g_stCameraConstants.xEpsilonDynTgtAngle = MTH_C_PiBy4;
CAM_g_stCameraConstants.xEpsilonDynTgtFocalAngle = MTH_M_xDiv(MTH_C_Pi, MTH_M_xFloatToReal(16.0f));;
CAM_g_stCameraConstants.xEpsilonForEqualVectors = MTH_M_xFloatToReal(0.5f);
CAM_g_stCameraConstants.xOffsetMinDistPerso = MTH_M_xFloatToReal(0.05f);
CAM_g_stCameraConstants.xDistanceForNoCut = MTH_M_xFloatToReal(5.00f);
CAM_g_stCameraConstants.xNumRayCameraCanGo = 3;
CAM_g_stCameraConstants.xNumRayCameraCanSee = 1;
CAM_g_stCameraConstants.xTickTestVisibility = 4;
CAM_g_stCameraConstants.xTickFindBetterPos = 20;
CAM_g_stCameraConstants.xTickFindBetterPosIfNoMove = 60;
CAM_g_stCameraConstants.xTickFailureCantSee = 60;
CAM_g_stCameraConstants.xDynSpeed_LinearFactNorm = MTH_M_xFloatToReal(3.0f);
CAM_g_stCameraConstants.xDynSpeed_LinearMax = MTH_M_xFloatToReal(10.0f);
CAM_g_stCameraConstants.xDynSpeed_LinearMulPerso = MTH_M_xFloatToReal(1.5f);
CAM_g_stCameraConstants.xDynSpeed_AngularFactNorm = MTH_M_xFloatToReal(3.0f);
CAM_g_stCameraConstants.xDynSpeed_AngularMax = MTH_M_xFloatToReal(3.0f);
CAM_g_stCameraConstants.xDynSpeed_AngularMulPerso = MTH_M_xFloatToReal(0.0f);
CAM_g_stCameraConstants.xDynSpeed_TargetFactNorm = MTH_M_xFloatToReal(4.0f);
CAM_g_stCameraConstants.xDynSpeed_TargetMax = MTH_M_xFloatToReal(10.0f);
CAM_g_stCameraConstants.xDynSpeed_TargetMulPerso = MTH_M_xFloatToReal(1.0f);
CAM_g_stCameraConstants.xCutAngleFactorPos = MTH_M_xFloatToReal(1.0f);
CAM_g_stCameraConstants.xCutAngleFactorTgt = MTH_M_xFloatToReal(1.0f);
CAM_g_stCameraConstants.wFlags = 0;
}
/*
**************************************************************************************************
**************************************************************************************************
FUNCTIONS
**************************************************************************************************
**************************************************************************************************
*/
/*
*=================================================================================================
* Cineinfo's object action script callback
*=================================================================================================
*/
#if defined(GAM_USE_SCRIPT)
SCR_tde_Anl_ReturnValue CAM_fn_eCineinfoScriptCallBack
(
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_tdxHandleToInternalCineinfo hCineinfoInit;
MS_tdxHandleToCineinfo hCineinfo;
struct tdstEngineObject_ *p_stEngineObject;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_M_RdL0_GetSectionLong(C_ParentSection,0,struct tdstEngineObject_ *, p_stEngineObject);
if (M_IsTitle)
{
CAM_fn_vCineinfoAlloc(p_stEngineObject);
hCineinfo = p_stEngineObject->h_Cineinfo;
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,hCineinfo);
}
else if (M_IsEntry)
{
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,MS_tdxHandleToCineinfo,hCineinfo);
hCineinfo = p_stEngineObject->h_Cineinfo;
hCineinfoInit = p_stEngineObject->h_Cineinfo->hInit;
/*---------------------------------------------------------------------------------------*/
if (M_ActionIs(C_CAM_EntryShiftTarget))
{
M_CheckScriptParamNumber(3);
MTH3D_M_vSetVectorElements(&hCineinfoInit->stShiftTarget, fn_fAToF(_ap_szParams[0]), fn_fAToF(_ap_szParams[1]), fn_fAToF(_ap_szParams[2]));
}
/*---------------------------------------------------------------------------------------*/
else if (M_ActionIs(C_CAM_EntryShiftPos))
{
M_CheckScriptParamNumber(3);
MTH3D_M_vSetVectorElements(&hCineinfoInit->stShiftPos,fn_fAToF(_ap_szParams[0]),fn_fAToF(_ap_szParams[1]),fn_fAToF(_ap_szParams[2]));
}
/*---------------------------------------------------------------------------------------*/
else if(M_ActionIs(C_CAM_EntryDistance))
{
M_CheckScriptParamNumber(4);
hCineinfoInit->xDistMin = fn_fAToF(_ap_szParams[0]);
hCineinfoInit->xDistMax = fn_fAToF(_ap_szParams[1]);
hCineinfoInit->xBoundDistMin = fn_fAToF(_ap_szParams[2]);
hCineinfoInit->xBoundDistMax = fn_fAToF(_ap_szParams[3]);
}
/*---------------------------------------------------------------------------------------*/
else if(M_ActionIs(C_CAM_EntryAlpha))
{
M_CheckScriptParamNumber(2);
hCineinfoInit->xAngleAlpha = fn_fAToF(_ap_szParams[0]);
hCineinfoInit->xAngleShiftAlpha = fn_fAToF(_ap_szParams[1]);
}
/*---------------------------------------------------------------------------------------*/
else if(M_ActionIs(C_CAM_EntryTheta))
{
M_CheckScriptParamNumber(2);
hCineinfoInit->xAngleTheta = fn_fAToF(_ap_szParams[0]);
hCineinfoInit->xAngleShiftTheta = fn_fAToF(_ap_szParams[1]);
}
/*---------------------------------------------------------------------------------------*/
else if(M_ActionIs(C_CAM_EntryLinearSpeed))
{
M_CheckScriptParamNumber(3);
hCineinfoInit->xLinearSpeed = fn_fAToF(_ap_szParams[0]);
hCineinfoInit->xLinearIncreaseSpeed = fn_fAToF(_ap_szParams[1]);
hCineinfoInit->xLinearDecreaseSpeed = fn_fAToF(_ap_szParams[2]);
}
/*---------------------------------------------------------------------------------------*/
else if(M_ActionIs(C_CAM_EntryAngularSpeed))
{
M_CheckScriptParamNumber(3);
hCineinfoInit->xAngularSpeed = fn_fAToF(_ap_szParams[0]);
hCineinfoInit->xAngularIncreaseSpeed = fn_fAToF(_ap_szParams[1]);
hCineinfoInit->xAngularDecreaseSpeed = fn_fAToF(_ap_szParams[2]);
}
/*---------------------------------------------------------------------------------------*/
else if(M_ActionIs(C_CAM_EntryTargetSpeed))
{
M_CheckScriptParamNumber(3);
hCineinfoInit->xTargetSpeed = fn_fAToF(_ap_szParams[0]);
hCineinfoInit->xTargetIncreaseSpeed = fn_fAToF(_ap_szParams[1]);
hCineinfoInit->xTargetDecreaseSpeed = fn_fAToF(_ap_szParams[2]);
}
/*---------------------------------------------------------------------------------------*/
else if (M_ActionIs(C_CAM_EntryDNMFlags))
{
M_CheckScriptParamNumber(1);
hCineinfoInit->uwDNMFlags = (unsigned short) fn_lAToI(_ap_szParams[0]);
}
/*---------------------------------------------------------------------------------------*/
else if (M_ActionIs(C_CAM_EntryIAFlags))
{
M_CheckScriptParamNumber(1);
hCineinfoInit->uwIAFlags = (unsigned short) fn_lAToI(_ap_szParams[0]);
}
/*---------------------------------------------------------------------------------------*/
else if (M_ActionIs(C_CAM_EntryFocal))
{
M_CheckScriptParamNumber(1);
hCineinfoInit->xFocal = fn_fAToF(_ap_szParams[0]);
}
/*---------------------------------------------------------------------------------------*/
else if (M_ActionIs(C_CAM_EntryZMinMax))
{
M_CheckScriptParamNumber(2);
hCineinfoInit->xZMin = fn_fAToF(_ap_szParams[0]);
hCineinfoInit->xZMax = fn_fAToF(_ap_szParams[1]);
}
/*---------------------------------------------------------------------------------------*/
else if (M_ActionIs(C_CAM_EntryViewport))
{
M_CheckScriptParamNumber(1);
hCineinfoInit->eTypeOfViewport = (enum e_ucListViewport_) fn_lAToI(_ap_szParams[0]);
}
/*---------------------------------------------------------------------------------------*/
else if (M_ActionIs(C_CAM_EntryChannel))
{
M_CheckScriptParamNumber(1);
hCineinfoInit->cChannel = (char) fn_lAToI(_ap_szParams[0]);
}
/*---------------------------------------------------------------------------------------*/
else if (M_ActionIs(C_CAM_EntryActivation))
{
M_CheckScriptParamNumber(1);
hCineinfoInit->bIsActive = (ACP_tdxBool) fn_lAToI(_ap_szParams[0]);
}
/*---------------------------------------------------------------------------------------*/
}
return(eReturnValue);
}
#endif /* GAM_USE_SCRIPT */
/*
*=================================================================================================
* Cineinfo's mini-structure sizeof
*=================================================================================================
*/
unsigned long CAM_fn_ulCineinfoSizeOf( void )
{
return(sizeof(struct tdstCineinfo_));
}
unsigned long CAM_fn_ulCineinfoInternalSizeOf( void )
{
return(sizeof(struct tdstInternalStructurCineinfo_));
}
/*
*=================================================================================================
* Cineinfo's object action allocation
* We initialise field to default values.
*=================================================================================================
*/
void CAM_fn_vCineinfoAlloc(struct tdstEngineObject_ *_p_stObject)
{
if (_p_stObject==NULL)
M_GameFatalError(E_uwGameMiniStructObjectNull);
if (_p_stObject->h_Cineinfo!=NULL)
M_GameFatalError(E_uwGameMiniStructAllocAlreadyAlloc);
/*
* Allocations.
*/
MMG_fn_vBeginMemoryInfo (MMG_C_lTypeMiniStructure , MMG_C_lSubTypeCineInfo , _p_stObject);
_p_stObject->h_Cineinfo = CAM_fn_hCineinfoRealAlloc();
_p_stObject->h_Cineinfo->hInit = CAM_fn_hCineinfoInternalRealAlloc();
_p_stObject->h_Cineinfo->hCurrent = CAM_fn_hCineinfoInternalRealAlloc();
_p_stObject->h_Cineinfo->hVisibility = CAM_fn_hCineinfoInternalRealAlloc();
_p_stObject->h_Cineinfo->hWork = CAM_fn_hCineinfoInternalRealAlloc();
MMG_fn_vEndMemoryInfo ();
/*
* Default values for init internal structure.
*/
MTH3D_M_vNullVector(&_p_stObject->h_Cineinfo->hInit->stShiftTarget);
MTH3D_M_vNullVector(&_p_stObject->h_Cineinfo->hInit->stShiftPos);
_p_stObject->h_Cineinfo->hInit->xDistMin = MTH_M_xFloatToReal(6.0f);
_p_stObject->h_Cineinfo->hInit->xDistMax = MTH_M_xFloatToReal(6.0f);
_p_stObject->h_Cineinfo->hInit->xBoundDistMin = MTH_M_xFloatToReal(2.0f);
_p_stObject->h_Cineinfo->hInit->xBoundDistMax = MTH_M_xFloatToReal(10.0f);
_p_stObject->h_Cineinfo->hInit->xAngleAlpha = MTH_C_ZERO;
_p_stObject->h_Cineinfo->hInit->xAngleShiftAlpha = MTH_C_ZERO;
_p_stObject->h_Cineinfo->hInit->xAngleTheta = MTH_C_ZERO;
_p_stObject->h_Cineinfo->hInit->xAngleShiftTheta = MTH_C_ZERO;
_p_stObject->h_Cineinfo->hInit->xLinearSpeed = MTH_M_xFloatToReal(200.0f);
_p_stObject->h_Cineinfo->hInit->xLinearIncreaseSpeed = MTH_M_xFloatToReal(1.0f);
_p_stObject->h_Cineinfo->hInit->xLinearDecreaseSpeed = MTH_C_ZERO;
_p_stObject->h_Cineinfo->hInit->xAngularSpeed = MTH_M_xFloatToReal(3.14f);
_p_stObject->h_Cineinfo->hInit->xAngularIncreaseSpeed = MTH_M_xFloatToReal(1.0f);
_p_stObject->h_Cineinfo->hInit->xAngularDecreaseSpeed = MTH_C_ZERO;
_p_stObject->h_Cineinfo->hInit->xTargetSpeed = MTH_M_xFloatToReal(200.0f);
_p_stObject->h_Cineinfo->hInit->xTargetIncreaseSpeed = MTH_M_xFloatToReal(1.0f);
_p_stObject->h_Cineinfo->hInit->xTargetDecreaseSpeed = MTH_C_ZERO;
_p_stObject->h_Cineinfo->hInit->xFocal = MTH_M_xFloatToReal(1.5f);
_p_stObject->h_Cineinfo->hInit->xZMin = MTH_C_InfinitMinus;
_p_stObject->h_Cineinfo->hInit->xZMax = MTH_C_InfinitPlus;
_p_stObject->h_Cineinfo->hInit->hSuperObjectTargeted = NULL;
_p_stObject->h_Cineinfo->hInit->hSecondSuperObjectTargeted = NULL;
_p_stObject->h_Cineinfo->hInit->uwDNMFlags = 0;
_p_stObject->h_Cineinfo->hInit->uwIAFlags = 0;
_p_stObject->h_Cineinfo->hInit->eTypeOfViewport = CAM_e_NoViewport;
_p_stObject->h_Cineinfo->hInit->cChannel = -1;
_p_stObject->h_Cineinfo->hInit->bIsActive = FALSE;
}
MS_tdxHandleToCineinfo CAM_fn_hCineinfoRealAlloc( void )
{
MS_tdxHandleToCineinfo hCineinfo;
hCineinfo = (MS_tdxHandleToCineinfo) M_p_GameMallocInHLM(CAM_fn_ulCineinfoSizeOf());
return(hCineinfo);
}
MS_tdxHandleToInternalCineinfo CAM_fn_hCineinfoInternalRealAlloc()
{
MS_tdxHandleToInternalCineinfo hCineinfoInternal;
hCineinfoInternal = (MS_tdxHandleToInternalCineinfo) M_p_GameMallocInHLM (CAM_fn_ulCineinfoInternalSizeOf());
return(hCineinfoInternal);
}
/*
*=================================================================================================
* Cineinfo's object action free.
*=================================================================================================
*/
void CAM_fn_vCineinfoFree(struct tdstEngineObject_ *_p_stObject)
{
if (_p_stObject == NULL)
M_GameFatalError(E_uwGameMiniStructObjectNull);
if (_p_stObject->h_Cineinfo == NULL)
M_GameFatalError(E_uwGameMiniStructNull);
if (_p_stObject->h_Cineinfo->hInit == NULL)
M_GameFatalError(E_uwGameMiniStructNull);
MMG_fn_vBeginMemoryInfo( MMG_C_lTypeMiniStructure , MMG_C_lSubTypeCineInfo , _p_stObject );
M_GameFreeInHLM(_p_stObject->h_Cineinfo->hInit);
if (_p_stObject->h_Cineinfo->hCurrent == NULL)
M_GameFatalError(E_uwGameMiniStructNull);
M_GameFreeInHLM(_p_stObject->h_Cineinfo->hCurrent);
if (_p_stObject->h_Cineinfo->hVisibility == NULL)
M_GameFatalError(E_uwGameMiniStructNull);
M_GameFreeInHLM(_p_stObject->h_Cineinfo->hVisibility);
if (_p_stObject->h_Cineinfo->hWork == NULL)
M_GameFatalError(E_uwGameMiniStructNull);
M_GameFreeInHLM(_p_stObject->h_Cineinfo->hWork);
M_GameFreeInHLM(_p_stObject->h_Cineinfo);
MMG_fn_vEndMemoryInfo();
}
/*
*=================================================================================================
* Reinit private structure of cineinfo.
*=================================================================================================
*/
void CAM_fn_vInitCompleteCineinfo(MS_tdxHandleToCineinfo _hCineinfo)
{
MTH3D_M_vNullVector(&_hCineinfo->stLastFailedOrigin);
MTH3D_M_vNullVector(&_hCineinfo->stLastFailedWanted);
MTH3D_M_vNullVector(&_hCineinfo->stForceTarget);
MTH3D_M_vNullVector(&_hCineinfo->stForcePosition);
MTH3D_M_vNullVector(&_hCineinfo->stForceRefAxisY);
MTH3D_M_vNullVector(&_hCineinfo->stForceRefAxisZ);
_hCineinfo->xApexRatio = MTH_C_ZERO;
_hCineinfo->xLastDeltaCut = MTH_C_ZERO;
_hCineinfo->eState = CAM_e_State_GoToOptimal;
/* ANNECY MT - 03/08/99 { */
/*
_hCineinfo->wCounter1 = 0;
_hCineinfo->wCounter2 = 0;
_hCineinfo->wCounter3 = 0;
_hCineinfo->wCounter4 = 0;
*/
_hCineinfo->xCounter1 = MTH_C_ZERO;
_hCineinfo->xCounter2 = MTH_C_ZERO;
_hCineinfo->xCounter3 = MTH_C_ZERO;
_hCineinfo->xCounter4 = MTH_C_ZERO;
/* END ANNECY MT } */
_hCineinfo->ucVolIAFlags = 0;
_hCineinfo->ucPerIAFlags = 0;
_hCineinfo->cLastCutAngleSens = 0;
_hCineinfo->bCanDoBestPos = TRUE;
CAM_fn_vUpdateTargetPosition(_hCineinfo);
g_hOldTargetedPerso = NULL;
/* Important : After all other inits !!! */
CAM_fn_vSetCineinfoCurrentFromInit(_hCineinfo);
}
/*
*=================================================================================================
*=================================================================================================
*/
void CAM_fn_vUpdateTargetPosition(MS_tdxHandleToCineinfo _hCineinfo)
{
HIE_tdxHandleToSuperObject hSuperObj;
MTH3D_tdstVector Axis;
hSuperObj = _hCineinfo->hWork->hSuperObjectTargeted;
if (hSuperObj!=NULL)
{
/*
MTH3D_M_vNullVector(&MVectorNull);
for(uc=0; uc<C_ucNbOfCheckedSpeeds;uc++)
{
MTH3D_M_vCopyVector(&(_hCineinfo ->AveragePosition.a_CheckedSpeed[uc]),&MVectorNull);
MTH3D_M_vCopyVector(&(_hCineinfo ->AveragePosition.a_CheckedPos[uc]),&MVectorNull);
_hCineinfo->AveragePosition.a_CheckedTime[uc] = MTH_C_ZERO;
}
*/
memset( _hCineinfo ->AveragePosition.a_CheckedSpeed , 0 , C_ucNbOfCheckedSpeeds * sizeof(MTH3D_tdstVector) );
memset( _hCineinfo ->AveragePosition.a_CheckedPos , 0 , C_ucNbOfCheckedSpeeds * sizeof(MTH3D_tdstVector) );
memset( _hCineinfo->AveragePosition.a_CheckedTime , 0 , C_ucNbOfCheckedSpeeds * sizeof(MTH_tdxReal) );
MTH3D_M_vSetVectorElements( &Axis, MTH_C_ZERO, MTH_C_MinusONE, MTH_C_ZERO);
fn_vCineinfoSetSightAxis(_hCineinfo,&Axis);
MTH3D_M_vSetVectorElements( &Axis, MTH_C_MinusONE, MTH_C_ZERO, MTH_C_ZERO);
fn_vCineinfoSetFirstComplementaryAxis(_hCineinfo,&Axis);
MTH3D_M_vSetVectorElements( &Axis, MTH_C_ZERO,MTH_C_ZERO,MTH_C_MinusONE);
fn_vCineinfoSetSecondComplementaryAxis(_hCineinfo,&Axis);
}
}
/*
*=================================================================================================
* Cineinfo's object action initialisation.
*=================================================================================================
*/
void CAM_fn_vCineinfoInit(struct tdstEngineObject_ *_p_stObject, enum tdeObjectTreeInit_ eObjectInit)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
MS_tdxHandleToCineinfo hCineinfo;
HIE_tdxHandleToSuperObject hTarget;
HIE_tdxHandleToSuperObject hSupObjectCamera;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
if (_p_stObject == NULL)
M_GameFatalError(E_uwGameMiniStructObjectNull);
hCineinfo = _p_stObject->h_Cineinfo;
if (_p_stObject->h_Cineinfo == NULL)
M_GameFatalError(E_uwGameMiniStructNull);
switch(eObjectInit)
{
case OTI_AlwaysCreated:
case OTI_PlayerDead:
case OTI_ReinitTheMap:
/*HP 301198*/
case OTI_LoadSavedGame:
/*
* Get handle of target
*/
hTarget = MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode());
hCineinfo->hInit->hSuperObjectTargeted = hTarget;
CAM_fn_vInitCompleteCineinfo(hCineinfo);
break;
/* case OTI_LoadSavedGame:*/
case OTI_WhenGameStart:
break;
case OTI_MapLoaded:
hSupObjectCamera = M_GetSuperObject(_p_stObject);
if (hSupObjectCamera==NULL)
M_GameFatalError(E_uwGameCineInfoSuperObjectNull);
CAM_fn_vSetCameraInList(hSupObjectCamera);
/*
* Get handle of target
*/
hTarget = MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode());
hCineinfo->hInit->hSuperObjectTargeted = hTarget;
CAM_fn_vInitCompleteCineinfo(hCineinfo);
break;
}
}
/*
*=================================================================================================
* Cineinfo's object action desinitialisation
*=================================================================================================
*/
void CAM_fn_vCineinfoDesinit(struct tdstEngineObject_ *_p_stObject, enum tdeObjectTreeInit_ _eObjectInit)
{
if (_p_stObject==NULL)
M_GameFatalError(E_uwGameMiniStructObjectNull);
if (_p_stObject->h_Cineinfo==NULL)
M_GameFatalError(E_uwGameMiniStructNull);
switch(_eObjectInit)
{
case OTI_LoadSavedGame:
break;
case OTI_ReinitTheMap:
break;
case OTI_MapLoaded:
break;
case OTI_AlwaysCreated:
case OTI_PlayerDead:
break;
default:
break;
}
}
/*
*=================================================================================================
* Cineinfo's object copy clone action
*=================================================================================================
*/
void CAM_fn_vCineinfoCopyClone(struct tdstEngineObject_ *_p_stObjectDest,struct tdstEngineObject_ *_p_stObjectSrc)
{
memcpy(_p_stObjectDest->h_Cineinfo->hInit, _p_stObjectSrc->h_Cineinfo->hInit, sizeof(struct tdstInternalStructurCineinfo_));
}
/*
**************************************************************************************************
**************************************************************************************************
Access Functions for fields in the internal structure
**************************************************************************************************
**************************************************************************************************
*/
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH3D_tdstVector *CAM_fn_p_stCineInfoGetShiftTarget(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(&(_hIntCineinfo->stShiftTarget));
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetShiftTarget(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH3D_tdstVector *_p_stShiftTarget)
{
memcpy( &(_hIntCineinfo->stShiftTarget), _p_stShiftTarget, sizeof(MTH3D_tdstVector));
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH3D_tdstVector *CAM_fn_p_stCineInfoGetShiftPos(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(&(_hIntCineinfo->stShiftPos));
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetShiftPos(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH3D_tdstVector *_p_stShiftPos)
{
memcpy(&(_hIntCineinfo->stShiftPos), _p_stShiftPos,sizeof(MTH3D_tdstVector));
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetDistMin(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xDistMin);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetDistMin(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xDistance)
{
_hIntCineinfo->xDistMin = _xDistance;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetDistMax(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xDistMax);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetDistMax(MS_tdxHandleToInternalCineinfo _hIntCineinfo,MTH_tdxReal _xDistance)
{
_hIntCineinfo->xDistMax = _xDistance;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetBoundDistMin(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xBoundDistMin);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetBoundDistMin(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xDistance)
{
_hIntCineinfo->xBoundDistMin = _xDistance;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetBoundDistMax(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xBoundDistMax);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetBoundDistMax(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xDistance)
{
_hIntCineinfo->xBoundDistMax = _xDistance;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetAngleAlpha(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xAngleAlpha);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetAngleAlpha(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xAngle)
{
_hIntCineinfo->xAngleAlpha = _xAngle;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetAngleShiftAlpha(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xAngleShiftAlpha);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetAngleShiftAlpha(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xAngle)
{
_hIntCineinfo->xAngleShiftAlpha = _xAngle;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetAngleTheta(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xAngleTheta);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetAngleTheta(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xAngle)
{
_hIntCineinfo->xAngleTheta = _xAngle;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetAngleShiftTheta(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xAngleShiftTheta);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetAngleShiftTheta(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xAngle)
{
_hIntCineinfo->xAngleShiftTheta = _xAngle;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetLinearSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xLinearSpeed);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetLinearSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xSpeed)
{
_hIntCineinfo->xLinearSpeed = _xSpeed;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetLinearIncreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xLinearIncreaseSpeed);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetLinearIncreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xFact)
{
_hIntCineinfo->xLinearIncreaseSpeed = _xFact;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetLinearDecreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xLinearDecreaseSpeed);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetLinearDecreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xFact)
{
_hIntCineinfo->xLinearDecreaseSpeed = _xFact;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetAngularSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xAngularSpeed);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetAngularSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xAngle)
{
_hIntCineinfo->xAngularSpeed = _xAngle;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetAngularIncreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xAngularIncreaseSpeed);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetAngularIncreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xFact)
{
_hIntCineinfo->xAngularIncreaseSpeed = _xFact;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetAngularDecreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xAngularDecreaseSpeed);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetAngularDecreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xFact)
{
_hIntCineinfo->xAngularDecreaseSpeed = _xFact;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetTargetSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xTargetSpeed);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetTargetSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xSpeed)
{
_hIntCineinfo->xTargetSpeed = _xSpeed;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetTargetIncreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xTargetIncreaseSpeed);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetTargetIncreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xFact)
{
_hIntCineinfo->xTargetIncreaseSpeed = _xFact;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetTargetDecreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xTargetDecreaseSpeed);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetTargetDecreaseSpeed(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xFact)
{
_hIntCineinfo->xTargetDecreaseSpeed = _xFact;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetFocal(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xFocal);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetFocal(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xAngle)
{
_hIntCineinfo->xFocal = _xAngle;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetZMin(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xZMin);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetZMin(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xZ)
{
_hIntCineinfo->xZMin = _xZ;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
MTH_tdxReal CAM_fn_xCineInfoGetZMax(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->xZMax);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetZMax(MS_tdxHandleToInternalCineinfo _hIntCineinfo, MTH_tdxReal _xZ)
{
_hIntCineinfo->xZMax = _xZ;
}
/*
=================================================================================================
=================================================================================================
*/
HIE_tdxHandleToSuperObject CAM_fn_hCineInfoGetSuperObjectTargeted(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->hSuperObjectTargeted);
}
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void CAM_fn_vCineInfoSetSuperObjectTargeted(MS_tdxHandleToInternalCineinfo _hIntCineinfo, HIE_tdxHandleToSuperObject _hSuperObject)
{
_hIntCineinfo->hSuperObjectTargeted = _hSuperObject;
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
unsigned short CAM_fn_uwCineInfoGetDNMFlags(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->uwDNMFlags);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetDNMFlags(MS_tdxHandleToInternalCineinfo _hIntCineinfo, unsigned short _uwFlag)
{
_hIntCineinfo->uwDNMFlags = _uwFlag;
}
/*
=================================================================================================
=================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
unsigned short CAM_fn_uwCineInfoGetIAFlags(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->uwIAFlags);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
void CAM_fn_vCineInfoSetIAFlags(MS_tdxHandleToInternalCineinfo _hIntCineinfo, unsigned short _uwFlag)
{
_hIntCineinfo->uwIAFlags = _uwFlag;
}
/*
=================================================================================================
Type of viewport
=================================================================================================
*/
enum e_ucListViewport_ CAM_fn_eCineInfoGetTypeOfViewport(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->eTypeOfViewport);
}
void CAM_fn_vCineInfoSetTypeOfViewport(MS_tdxHandleToInternalCineinfo _hIntCineinfo, enum e_ucListViewport_ _eType)
{
_hIntCineinfo->eTypeOfViewport = _eType;
}
/*
=================================================================================================
=================================================================================================
*/
char CAM_fn_cCineInfoGetChannel(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return (_hIntCineinfo -> cChannel);
}
void CAM_fn_vCineInfoSetChannel(MS_tdxHandleToInternalCineinfo _hIntCineinfo, char _cChannel)
{
_hIntCineinfo -> cChannel = _cChannel;
}
/*
=================================================================================================
=================================================================================================
*/
ACP_tdxBool CAM_fn_bCineInfoGetIsActive(MS_tdxHandleToInternalCineinfo _hIntCineinfo)
{
return(_hIntCineinfo->bIsActive);
}
void CAM_fn_vCineInfoSetIsActive(MS_tdxHandleToInternalCineinfo _hIntCineinfo, ACP_tdxBool _bIsActive)
{
_hIntCineinfo->bIsActive = _bIsActive;
}
/*
**************************************************************************************************
**************************************************************************************************
Special functions
**************************************************************************************************
**************************************************************************************************
*/
/*
=================================================================================================
* Activation of a camera (used by editor)
=================================================================================================
*/
/*
void CAM_fn_vCameraActivedByEditor(HIE_tdxHandleToSuperObject _hSuperObject)
{
MS_tdxHandleToInternalCineinfo hCurrentCineinfo;
hCurrentCineinfo = M_GetCineinfo( _hSuperObject, Current);
CAM_fn_vCineInfoSetIsActive(hCurrentCineinfo, TRUE);
CAM_fn_vCineInfoSetTypeOfViewport(hCurrentCineinfo, CAM_e_NoViewport);
}
*/
/*
=================================================================================================
* Disable a camera (used by editor)
=================================================================================================
*/
/*
void CAM_fn_vCameraDesactivedByEditor(HIE_tdxHandleToSuperObject _hSuperObject)
{
MS_tdxHandleToInternalCineinfo hCurrentCineinfo, hInitCineinfo;
hCurrentCineinfo = M_GetCineinfo( _hSuperObject, Current);
hInitCineinfo = M_GetCineinfo( _hSuperObject, Init);
CAM_fn_vCineInfoSetIsActive(hCurrentCineinfo, CAM_fn_bCineInfoGetIsActive(hInitCineinfo));
CAM_fn_vCineInfoSetTypeOfViewport(hCurrentCineinfo, CAM_fn_eCineInfoGetTypeOfViewport(hInitCineinfo));
}
*/
/*
=================================================================================================
* Copy the cineinfos structures.
=================================================================================================
*/
/*extern void CAM_memcpy(void *dest, void *src, long size);*/
#define CAM_memcpy memcpy
void CAM_fn_vSetCineinfoCurrentFromInit(MS_tdxHandleToCineinfo _hCineinfo)
{
CAM_memcpy(_hCineinfo->hCurrent, _hCineinfo->hInit, sizeof(struct tdstInternalStructurCineinfo_));
_hCineinfo->ucVolIAFlags |= C_VolIAFlags_InitJustCopiedInCurrent;
}
void CAM_fn_vSetCineinfoWorkFromCurrent(MS_tdxHandleToCineinfo _hCineinfo)
{
if (!(_hCineinfo->ucVolIAFlags & C_VolIAFlags_CurrentAlreadyCopiedInWork))
{
_hCineinfo->ucVolIAFlags |= C_VolIAFlags_CurrentAlreadyCopiedInWork;
CAM_memcpy(_hCineinfo->hWork, _hCineinfo->hCurrent, sizeof(struct tdstInternalStructurCineinfo_));
}
}
void CAM_fn_vSetCineinfoVisibilityFromCurrent(MS_tdxHandleToCineinfo _hCineinfo)
{
if(!(_hCineinfo->ucPerIAFlags & C_PerIAFlags_VisibilityCopied))
{
CAM_memcpy(_hCineinfo->hVisibility, _hCineinfo->hCurrent, sizeof(struct tdstInternalStructurCineinfo_));
_hCineinfo->ucPerIAFlags |= C_PerIAFlags_VisibilityCopied;
}
}
void CAM_fn_vSetCineinfoCurrentFromVisibility(MS_tdxHandleToCineinfo _hCineinfo)
{
CAM_memcpy(_hCineinfo->hCurrent, _hCineinfo->hVisibility, sizeof(struct tdstInternalStructurCineinfo_));
_hCineinfo->ucPerIAFlags &= ~C_PerIAFlags_VisibilityCopied;
}
void CAM_fn_vSetCineinfoWorkFromVisibility(MS_tdxHandleToCineinfo _hCineinfo)
{
CAM_memcpy(_hCineinfo->hWork, _hCineinfo->hVisibility, sizeof(struct tdstInternalStructurCineinfo_));
}
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/
/*
==================================================================================================
* Add camera in camera's list
==================================================================================================
*/
void CAM_fn_vSetCameraInList(HIE_tdxHandleToSuperObject _hSupObjectCamera)
{
tdstNodeCamera *p_stTempNodeCamera;
/* Add This Camera to the List of Active Ones */
MMG_fn_vAddMemoryInfo( MMG_C_lTypeMiniStructure , MMG_C_lSubTypeCineInfo , 0 );
p_stTempNodeCamera=(tdstNodeCamera *)M_p_GameMallocInHLM(sizeof(tdstNodeCamera));
p_stTempNodeCamera->p_stSuperObjectCamera = _hSupObjectCamera;
LST2_M_DynamicInitElement(p_stTempNodeCamera);
LST2_M_DynamicAddTail(&g_stEngineStructure.hCameraList,p_stTempNodeCamera);
}
/*
==================================================================================================
* Delete camera in camera's list
==================================================================================================
*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void CAM_fn_vDeleteCameraInList(HIE_tdxHandleToSuperObject _hSupObjectCamera)
{
long i;
tdstNodeCamera *p_stTempNodeCamera;
HIE_tdxHandleToSuperObject hSuperObject ;
LST2_M_DynamicForEachElementOf(&g_stEngineStructure.hCameraList,p_stTempNodeCamera,i)
{
if (p_stTempNodeCamera != NULL)
{
/* Search the SuperObject with HIE_C_ulActor type */
hSuperObject = p_stTempNodeCamera->p_stSuperObjectCamera;
if (hSuperObject == _hSupObjectCamera)
{
LST2_M_DynamicIsolate(p_stTempNodeCamera);
MMG_fn_vAddMemoryInfo( MMG_C_lTypeMiniStructure , MMG_C_lSubTypeCineInfo , 0 );
M_GameFreeInHLM(p_stTempNodeCamera)
}
}
}
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
/*
==================================================================================================
* Get Main camera
==================================================================================================
*/
HIE_tdxHandleToSuperObject CAM_fn_hGetMainActiveCamera(HIE_tdxHandleToSuperObject hSuperObject)
{
HIE_tdxHandleToSuperObject hChild;
HIE_tdxHandleToSuperObject hActiveCamera = NULL;
long i;
long lSuperObjectType;
HIE_M_ForEachChildOf(hSuperObject,hChild,i)
{
hActiveCamera = CAM_fn_hGetMainActiveCamera(hChild);
if (hActiveCamera!=NULL)
break;
}
if (hActiveCamera == NULL)
{
lSuperObjectType = HIE_fn_ulGetSuperObjectType(hSuperObject);
if (lSuperObjectType == HIE_C_ulActor)
{
if (M_GetMSHandle(hSuperObject,Cineinfo) != NULL)
{
if
(
CAM_fn_bCineInfoGetIsActive(M_GetCineinfo(hSuperObject,Init))
&& CAM_fn_eCineInfoGetTypeOfViewport(M_GetCineinfo(hSuperObject,Init)) != CAM_e_NoViewport
)
{
hActiveCamera = hSuperObject;
}
}
}
}
return(hActiveCamera);
}
/*
**************************************************************************************************
**************************************************************************************************
*/
MTH3D_tdstVector *fn_p_CineinfoGetSightAxis(MS_tdxHandleToCineinfo _hCineinfo)
{
return (&(_hCineinfo->stSightAxisSystem.SightAxis));
}
void fn_vCineinfoSetSightAxis(MS_tdxHandleToCineinfo _hCineinfo,MTH3D_tdstVector *p_stVector)
{
MTH3D_M_vCopyVector(&(_hCineinfo->stSightAxisSystem.SightAxis), p_stVector);
}
/*-----------------------------------------------------------------------------
*---------------------------------------------------------------------------*/
MTH3D_tdstVector *fn_p_CineinfoGetFirstComplementaryAxis(MS_tdxHandleToCineinfo _hCineinfo)
{
return (&(_hCineinfo->stSightAxisSystem.FirstComplementaryAxis));
}
void fn_vCineinfoSetFirstComplementaryAxis(MS_tdxHandleToCineinfo _hCineinfo,MTH3D_tdstVector *p_stVector)
{
MTH3D_M_vCopyVector(&(_hCineinfo->stSightAxisSystem.FirstComplementaryAxis), p_stVector);
}
/*-----------------------------------------------------------------------------
*---------------------------------------------------------------------------*/
MTH3D_tdstVector *fn_p_CineinfoGetSecondComplementaryAxis(MS_tdxHandleToCineinfo _hCineinfo)
{
return (&(_hCineinfo->stSightAxisSystem.SecondComplementaryAxis));
}
void fn_vCineinfoSetSecondComplementaryAxis(MS_tdxHandleToCineinfo _hCineinfo,MTH3D_tdstVector *p_stVector)
{
MTH3D_M_vCopyVector(&(_hCineinfo->stSightAxisSystem.SecondComplementaryAxis), p_stVector);
}
/*-----------------------------------------------------------------------------
*---------------------------------------------------------------------------*/
/*
MTH3D_tdstVector *fn_p_CineinfoGetCheckedSpeed(MS_tdxHandleToCineinfo _hCineinfo,unsigned long _ul)
{
if ( _ul < C_ucNbOfCheckedSpeeds )
return (&(_hCineinfo ->AveragePosition.a_CheckedSpeed[_ul]));
return NULL;
}
void fn_vCineinfoSetCheckedSpeed(MS_tdxHandleToCineinfo _hCineinfo,unsigned long _ul,MTH3D_tdstVector *p_Speed)
{
if ( _ul < C_ucNbOfCheckedSpeeds )
{
MTH3D_M_vCopyVector((&(_hCineinfo->AveragePosition.a_CheckedSpeed[_ul])),p_Speed);
}
}
*/
/*-----------------------------------------------------------------------------
*---------------------------------------------------------------------------*/
/*
MTH_tdxReal fn_xCineinfoGetCheckedTime(MS_tdxHandleToCineinfo _hCineinfo,unsigned long _ul)
{
if ( _ul < C_ucNbOfCheckedSpeeds )
return (_hCineinfo ->AveragePosition.a_CheckedTime[_ul]);
return 0;
}
void fn_vCineinfoSetCheckedTime(MS_tdxHandleToCineinfo _hCineinfo,unsigned long _ul,MTH_tdxReal _dt)
{
if ( _ul < C_ucNbOfCheckedSpeeds )
{
_hCineinfo->AveragePosition.a_CheckedTime[_ul] = _dt;
}
}
*/
/*-----------------------------------------------------------------------------
*---------------------------------------------------------------------------*/
/*
MTH3D_tdstVector *fn_p_CineinfoGetCheckedPos(MS_tdxHandleToCineinfo _hCineinfo,unsigned long _ul)
{
if ( _ul < C_ucNbOfCheckedSpeeds )
return (&(_hCineinfo ->AveragePosition.a_CheckedPos[_ul]));
return NULL;
}
void fn_vCineinfoSetCheckedPos(MS_tdxHandleToCineinfo _hCineinfo,unsigned long _ul,MTH3D_tdstVector *p_Pos)
{
if ( _ul < C_ucNbOfCheckedSpeeds )
{
MTH3D_M_vCopyVector((&(_hCineinfo->AveragePosition.a_CheckedPos[_ul])),p_Pos);
}
}
*/
/*-----------------------------------------------------------------------------
*---------------------------------------------------------------------------*/
void fn_vGetPersoSightAxisSystem
(
MS_tdxHandleToCineinfo _hCineinfo,
MTH3D_tdstVector *_p_stSightAxis,
MTH3D_tdstVector *_p_stFirstComplementaryAxis,
MTH3D_tdstVector *_p_stSecondComplementaryAxis
)
{
MTH3D_M_vCopyVector(_p_stSightAxis , fn_p_CineinfoGetSightAxis(_hCineinfo));
MTH3D_M_vCopyVector(_p_stFirstComplementaryAxis , fn_p_CineinfoGetFirstComplementaryAxis(_hCineinfo));
MTH3D_M_vCopyVector(_p_stSecondComplementaryAxis , fn_p_CineinfoGetSecondComplementaryAxis(_hCineinfo));
}
/*-----------------------------------------------------------------------------
*---------------------------------------------------------------------------*/
void fn_vInitAveragePositionDatasIfNecessary(MS_tdxHandleToCineinfo _hCineinfo)
{
unsigned long ulIndex;
MTH_tdxReal xBaseTime;
MTH3D_tdstVector *p_stVectorPos;
for ( ulIndex = 0; ulIndex < C_ucNbOfCheckedSpeeds; ulIndex ++ )
if(_hCineinfo ->AveragePosition.a_CheckedTime[ulIndex])
break;
/* if there are already some datas in the structure, it is not necessary to init it*/
if(ulIndex < C_ucNbOfCheckedSpeeds)
return;
p_stVectorPos = POS_fn_p_stGetTranslationVector(HIE_fn_hGetSuperObjectGlobalMatrix(_hCineinfo->hWork->hSuperObjectTargeted));
xBaseTime = MTH_M_xFloatToReal(0.03f);
for ( ulIndex = 0; ulIndex < C_ucNbOfCheckedSpeeds; ulIndex ++ )
{
_hCineinfo->AveragePosition.a_CheckedTime[ulIndex] = xBaseTime;
MTH3D_M_vNullVector(&(_hCineinfo ->AveragePosition.a_CheckedSpeed[ulIndex]));
MTH3D_M_vCopyVector(&(_hCineinfo ->AveragePosition.a_CheckedPos[ulIndex]),p_stVectorPos);
}
}
/*-----------------------------------------------------------------------------
* index of added value unimportant
*---------------------------------------------------------------------------*/
void CAM_fn_vRemindSpeed(MS_tdxHandleToCineinfo _hCineinfo,MTH_tdstMove *_p_Speed)
{
/*
unsigned long ulIndex;
for ( ulIndex = C_ucNbOfCheckedSpeeds - 1; ulIndex > 0; ulIndex --)
MTH3D_M_vCopyVector(&(_hCineinfo ->AveragePosition.a_CheckedSpeed[ulIndex]),&(_hCineinfo ->AveragePosition.a_CheckedSpeed[ulIndex - 1]));
MTH3D_M_vCopyVector(&(_hCineinfo ->AveragePosition.a_CheckedSpeed[0]),MTH_M_p_stMoveGetLinear(_p_Speed));
*/
memcpy (_hCineinfo -> AveragePosition . a_CheckedSpeed , & (_hCineinfo -> AveragePosition . a_CheckedSpeed[1]), (C_ucNbOfCheckedSpeeds - 1) * sizeof (MTH3D_tdstVector) );
MTH3D_M_vCopyVector ( & (_hCineinfo -> AveragePosition . a_CheckedSpeed [C_ucNbOfCheckedSpeeds-1]) , MTH_M_p_stMoveGetLinear (_p_Speed));
}
/*-----------------------------------------------------------------------------
* index of added value unimportant
*---------------------------------------------------------------------------*/
void CAM_fn_vRemindPos(MS_tdxHandleToCineinfo _hCineinfo,MTH_tdstMove *_p_Pos)
{
/*
unsigned long ulIndex;
for ( ulIndex = C_ucNbOfCheckedSpeeds - 1; ulIndex > 0; ulIndex -- )
MTH3D_M_vCopyVector(&(_hCineinfo ->AveragePosition.a_CheckedPos[ulIndex]), &(_hCineinfo ->AveragePosition.a_CheckedPos[ulIndex-1]));
MTH3D_M_vCopyVector(&(_hCineinfo ->AveragePosition.a_CheckedPos[0]),MTH_M_p_stMoveGetLinear(_p_Pos));
*/
memcpy ( _hCineinfo -> AveragePosition . a_CheckedPos , & (_hCineinfo -> AveragePosition . a_CheckedPos[1]), (C_ucNbOfCheckedSpeeds - 1) * sizeof (MTH3D_tdstVector) );
MTH3D_M_vCopyVector ( & (_hCineinfo -> AveragePosition . a_CheckedPos [C_ucNbOfCheckedSpeeds-1]) , MTH_M_p_stMoveGetLinear (_p_Pos));
}
/*-----------------------------------------------------------------------------
* index of added value unimportant
*---------------------------------------------------------------------------*/
void CAM_fn_vRemindTime(MS_tdxHandleToCineinfo _hCineinfo,MTH_tdxReal _dt)
{
/*
unsigned long ulIndex;
for ( ulIndex = C_ucNbOfCheckedSpeeds - 1; ulIndex > 0; ulIndex -- )
_hCineinfo->AveragePosition.a_CheckedTime[ulIndex] = _hCineinfo->AveragePosition.a_CheckedTime[ulIndex-1];
_hCineinfo->AveragePosition.a_CheckedTime[0] = _dt;
*/
memcpy (_hCineinfo -> AveragePosition . a_CheckedTime , & (_hCineinfo -> AveragePosition . a_CheckedTime[1]) , (C_ucNbOfCheckedSpeeds - 1) * sizeof (MTH_tdxReal));
_hCineinfo->AveragePosition.a_CheckedTime[C_ucNbOfCheckedSpeeds-1] = _dt;
}
/*-----------------------------------------------------------------------------
*---------------------------------------------------------------------------*/
void CAM_fn_vAverageSpeed(MS_tdxHandleToCineinfo _hCineinfo,MTH_tdxReal xTimeWindow,MTH3D_tdstVector *p_result)
{
MTH_tdxReal xCurrentTime,tmpTime;
unsigned long ulIndex;
MTH3D_tdstVector *p_stTmp;
fn_vInitAveragePositionDatasIfNecessary(_hCineinfo);
xCurrentTime = 0;
MTH3D_M_vNullVector(p_result);
for ( ulIndex = 0; ulIndex < C_ucNbOfCheckedSpeeds; ulIndex ++ )
{
tmpTime = _hCineinfo ->AveragePosition.a_CheckedTime[ulIndex];
p_stTmp = &(_hCineinfo ->AveragePosition.a_CheckedSpeed[ulIndex]);
if(tmpTime && !MTH3D_M_bIsNullVector(p_stTmp))
{
xCurrentTime += tmpTime;
/*MTH3D_M_vCopyVector(&tmp ,&(_hCineinfo ->AveragePosition.a_CheckedSpeed[ulIndex]));*/
/*MTH3D_M_vMulScalarVector( &tmp, tmpTime,&tmp);*/
/*MTH3D_M_vAddVector( &tmpResult,&tmpResult,&tmp);*/
MTH3D_M_vMulAddVector( p_result, tmpTime , p_stTmp , p_result );
if(xCurrentTime >= xTimeWindow)
break;
}
}
if ( xCurrentTime )
MTH3D_M_vDivScalarVector( p_result , p_result , xCurrentTime);
}
/*-----------------------------------------------------------------------------
*---------------------------------------------------------------------------*/
void CAM_fn_vAveragePosition(MS_tdxHandleToCineinfo _hCineinfo,MTH_tdxReal xTimeWindow,MTH3D_tdstVector *p_result)
{
MTH_tdxReal xCurrentTime,tmpTime;
unsigned long ulIndex;
MTH3D_tdstVector *p_stTmp;
fn_vInitAveragePositionDatasIfNecessary(_hCineinfo);
xCurrentTime = 0;
MTH3D_M_vNullVector(p_result);
for ( ulIndex = 0; ulIndex < C_ucNbOfCheckedSpeeds; ulIndex ++ )
{
tmpTime = _hCineinfo ->AveragePosition.a_CheckedTime[ulIndex];
p_stTmp = &(_hCineinfo ->AveragePosition.a_CheckedPos[ulIndex]);
if(tmpTime && !MTH3D_M_bIsNullVector(p_stTmp))
{
xCurrentTime += tmpTime;
/*MTH3D_M_vCopyVector(&tmp ,&(_hCineinfo ->AveragePosition.a_CheckedPos[ulIndex]));*/
/*MTH3D_M_vMulScalarVector( &tmp, tmpTime,&tmp);*/
/*MTH3D_M_vAddVector( &tmpResult,&tmpResult,&tmp);*/
MTH3D_M_vMulAddVector( p_result, tmpTime , p_stTmp , p_result );
if(xCurrentTime >= xTimeWindow)
break;
}
}
if(xCurrentTime)
MTH3D_M_vDivScalarVector( p_result, p_result, xCurrentTime);
}
/*
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
**************************************************************************************************
*/