reman3/Rayman_X/cpa/tempgrp/GAM/Family.c

235 lines
8.0 KiB
C

/*=========================================================================
* Model.c : This module contain all models functions
* This is a part of the Game project.
*
* Version 1.0
* Creation date 16/10/96
* Revision date
*
* That file needs to be compatible for all platforms.
*
* (c) Ubi Studios 1996
*=======================================================================*/
/*
*=======================================================================
Modifications: New LST2_M_??? Macros / Michaël / 070297
*=======================================================================*/
/*ANNECY BBB 10/03/98 {*/
#define D_ObjsTbls_Define
/*ENDANNECY BBB 10/03/98 }*/
#include "ToolsCPA.h"
#include "Options/Options.h"
#include "Macros.h"
#include "Actions/AllActs.h"
#include "Structur/EngMode.h"
#include "Structur/ErrGame.h"
#include "Structur/MemGame.h"
#include "Structur/Objects.h"
#include "Structur/StdObjSt.h"
#include "Family.h"
#include "LoadFml.h"
#include "ZeMem.h"
#include "Structur/ObjsTbls.h"
/*-----------------------------------------------------------------------------
* Description : Desinitialize the family's structure (when the map is finish)
*-----------------------------------------------------------------------------
* Input : void
* Output : void
*-----------------------------------------------------------------------------
* Creation date : 16/10/96 Author : Francois
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC 04/06/99 */
void fn_vLastDesinitFamilyStructure()
{
struct tdstFamilyList_ *p_stThisFamily,*p_stNextFamily;
long i;
LST2_M_DynamicForEachMovingElementOf(&g_stEngineStructure.hFamilyList,p_stThisFamily,p_stNextFamily,i)
{
LST2_M_DynamicIsolate(p_stThisFamily);
}
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC 04/06/99 */
void fn_vDesinitFamilyStructureForPriority(unsigned char ucPriority)
{
struct tdstFamilyList_ *p_stThisFamily,*p_stNextFamily;
long i;
LST2_M_DynamicForEachMovingElementOf(&g_stEngineStructure.hFamilyList,p_stThisFamily,p_stNextFamily,i)
{
if(p_stThisFamily->ucPriority==GAM_g_ucHLMMemoryBlock)
LST2_M_DynamicIsolate(p_stThisFamily);
}
}
/*-----------------------------------------------------------------------------
* Description : find or add a model
*-----------------------------------------------------------------------------
* Input : Family type
* Output : Family's pointer
*-----------------------------------------------------------------------------
* Creation date : 16/10/96 Author : Francois
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
tdxHandleToFamilyList fn_hFindOrAddFAmily(tdObjectType otFamilyType)
{
struct tdstFamilyList_ *p_stFamily = NULL;
p_stFamily = fn_hFindFamily(otFamilyType);
/*#ifndef BIN_LoadBin // In binary mode all the families are loaded with another method*/
if (p_stFamily==NULL)
{
MMG_fn_vAddMemoryInfo( MMG_C_lTypeFamily , MMG_C_lSubTypeFamily , 0 );
p_stFamily = (struct tdstFamilyList_*)M_p_GameMallocInHLM(sizeof(struct tdstFamilyList_));
p_stFamily->otObjectFamilyType = otFamilyType;
fn_vInitObjectsTablesList(p_stFamily); /* tmp SD Gizmo 14/04/97*/
/*fn_vAllocateOneMoreObjectsTablesInList(p_stFamily,100);// tmp SD Gizmo 14/04/97*/
fn_vLoadFamily(p_stFamily);
LST2_M_DynamicAddTail(&g_stEngineStructure.hFamilyList,p_stFamily);
p_stFamily->ucPriority = GAM_g_ucHLMMemoryBlock;
}
/*#endif /*BIN_LoadBin */
return(p_stFamily);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
/*-----------------------------------------------------------------------------
* Description : find a family
*-----------------------------------------------------------------------------
* Input : Family type
* Output : Family's pointer (NULL if not found)
*-----------------------------------------------------------------------------
* Creation date : 16/10/96 Author : Francois
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
tdxHandleToFamilyList fn_hFindFamily(tdObjectType otFamilyType)
{
struct tdstFamilyList_ *p_stThisFamily;
long i;
LST2_M_DynamicForEachElementOf(&g_stEngineStructure.hFamilyList,p_stThisFamily,i)
{
if (p_stThisFamily->otObjectFamilyType==otFamilyType)
return(p_stThisFamily);
}
return(NULL);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
GEO_tdxHandleToBoundingSphere fn_vGetBoundingVolumeOfFamily(tdxHandleToFamilyList h_Family)
{
return(h_Family->hBoundingSphere);
}
void fn_vSetBoundingVolumeOfFamily(tdxHandleToFamilyList h_Family,GEO_tdxHandleToBoundingSphere hBV)
{
h_Family->hBoundingSphere = hBV;
}
#if defined (ACTIVE_EDITOR)
ACP_tdxHandleOfObject fn_vGetGeometricSphereOfFamily(tdxHandleToFamilyList h_Family)
{
return(h_Family->hGeometricSphere);
}
void fn_vSetGeometricSphereOfFamily(tdxHandleToFamilyList h_Family, ACP_tdxHandleOfObject hGS)
{
h_Family->hGeometricSphere = hGS;
}
#endif /*ACTIVE_EDITOR*/
/* debut GIZMO NEW 07/06/97*/
tdxHandleToObjectsTablesList fn_vGetDefaultObjectsTableOfFamily(tdxHandleToFamilyList h_Family)
{
return(h_Family->h_DefaultObjectsTable);
}
void fn_vSetDefaultObjectsTableOfFamily(tdxHandleToFamilyList h_Family,tdxHandleToObjectsTablesList h_DefaultObjectsTable)
{
h_Family->h_DefaultObjectsTable = h_DefaultObjectsTable;
}
/* fin GIZMO NEW 07/06/97*/
/*ANNECY BBB {*/
tdxHandleToObjectsTablesList fn_hGetObjectsTableOfFamilyByIndex(tdxHandleToFamilyList _hFamily, ACP_tdxIndex _xIndex)
{
ACP_tdxIndex xForMacro = 0;
tdxHandleToObjectsTablesList hTable;
LST2_M_StaticGetElementNumber(&(_hFamily->hForObjectsTablesList), hTable, _xIndex, xForMacro);
return hTable;
}
/*ANNECY BBB }*/
#ifdef _TMP_FAMILY_HANDLE_
/*-----------------------------------------------------------------------------
* Description : Add a New State To StateArray Of a Family
*-----------------------------------------------------------------------------
* Input : Handle to Family, Handle to State
* Output : Nothing
*-----------------------------------------------------------------------------
* Creation date : 27/02/97 Author : Sebastien DAVID (Gizmo)
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
void fn_vAddNewStateToStateArrayOfFamily(tdxHandleToFamily h_Family, tdxHandleToState h_State)
{
LST2_M_StaticAddTail(&h_Family->hForStateArray, h_State);
}
/*-----------------------------------------------------------------------------
* Description : Remove a State From StateArray Of a Family
*-----------------------------------------------------------------------------
* Input : Handle to Family, Handle to State
* Output : Nothing
*-----------------------------------------------------------------------------
* Creation date : 27/02/97 Author : Sebastien DAVID (Gizmo)
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
void fn_vRemoveStateFromStateArrayOfFamily(tdxHandleToState h_State)
{
LST2_M_StaticAddTail(&h_Family->hForStateArray, h_State);
}
#endif