reman3/Rayman_X/cpa/public/GEO/GeoObj.h

522 lines
15 KiB
C

/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Definition of geometric object structure
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#ifndef __GEO_GEOOBJ_H
#define __GEO_GEOOBJ_H
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* For DLLs who are using this module :
*/
#undef CPA_EXPORT
#if defined(CPA_WANTS_IMPORT)
#define CPA_EXPORT __declspec(dllimport)
#elif defined(CPA_WANTS_EXPORT)
#define CPA_EXPORT __declspec(dllexport)
#else
#define CPA_EXPORT
#endif
/*
* For Global declaration in C files :
*/
#ifdef GEO_GLOBALS
#define __GEO_EXTERN extern
#else /* !GEO_GLOBALS */
#define __GEO_EXTERN
#endif /* !GEO_GLOBALS */
/* struct POS_stCompletePosition;*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#include "ErrGEO.h"
#include "MmgGEO.h"
#include "color.h"
#include "fmd.h"
#include "element.h"
#include "GeoSprit.h"
#include "POS\PosPubSt.h"
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
=======================================================================================
Constants
=======================================================================================
*/
#define C_IndexedTrianglesObject 0xC0DE0001
#define C_lDuplicable 1
#define C_lMobile 2
#define C_lMorphable 4
#ifdef U64 /* Julien Merceron */
#define C_lMaxVertexPerObject 1000
#else
#ifdef PACKAGE10
#define C_lMaxVertexPerObject 1000
#else /* package 1.1 et supérieur */
#define C_lMaxVertexPerObject 2500
#endif
#endif
#define GEO_C_lDuplicateVertices 1
#define GEO_C_lDuplicateVerticesNormals 2
#define GEO_C_lDuplicateVerticesColors 4
#define GEO_C_lDuplicateColideInformation 8
#define GEO_C_lDuplicateAll 0xff
/*
* constant for no element parrallel boxes
*/
#define GEO_C_xNoParallelBox ((ACP_tdxIndex)-1)
/*
* Sprite types
*/
#define GEO_C_NotALookAt 0
#define GEO_C_LookAt 1
#define GEO_C_SemiLookAt 2
/*
=======================================================================================
Structures
=======================================================================================
*/
/*
* bounding volume : parrallel box and sphere
*/
typedef struct GEO_tdstParallelBox_
{
MTH3D_tdstVector stMinPoint;
MTH3D_tdstVector stMaxPoint;
} GEO_tdstParallelBox;
typedef GEO_tdstParallelBox *GEO_tdxHandleToParallelBox;
typedef struct GEO_tdstBoundingSphere_
{
MTH3D_tdstVector stCenterPoint;
MTH_tdxReal xRadius;
} GEO_tdstBoundingSphere;
typedef GEO_tdstBoundingSphere *GEO_tdxHandleToBoundingSphere;
/*
* Geometric object
*/
typedef struct GEO_tdstGeometricObject_
{
/*
* for vertices
*/
MTH3D_tdstVector *d_stListOfPoints;
MTH3D_tdstVector *d_stListOfPointsNormals;
GMT_tdxHandleToGameMaterial *d_hListOfPointsMaterial;
/*XB980825 (unused in N64)*/
#ifndef U64
GEO_tdstColor *d_stListOfPointsReceivedLightIntensity;
#endif /* U64 */
/*End XB*/
/*
* Elements
*/
ACP_tdxIndex *d_xListOfElementsTypes;
void **d_stListOfElements;
/*
* Octree
*/
struct COL_tdstOctree_ *p_stOctree;
/*
* EDGES
*/
#if !defined(PRESS_DEMO) /* swap members to make the engine unusable with the binarized data of another engine */
GEO_tdstDoubledIndex *d_stListOfEdges;
GMT_tdxHandleToGameMaterial *d_hListOfEdgesMaterial;
#else
GMT_tdxHandleToGameMaterial *d_hListOfEdgesMaterial;
GEO_tdstDoubledIndex *d_stListOfEdges;
#endif /* PRESS_DEMO */
/*
* Bounding volume (for element)
*/
GEO_tdstParallelBox *d_stListOfParallelBoxes;
/*
* type
*/
unsigned long ulType ;
#if defined(U64)
float fScale;
float fRadius;
unsigned short uwSymType;
unsigned short uwRliFlag;
#endif /* U64 */
ACP_tdxIndex xNbPoints;
ACP_tdxIndex xNbElements;
ACP_tdxIndex xNbEdges;
ACP_tdxIndex xNbParallelBoxes;
/*VLNEWGLI*/
/*
* object bounding sphere
*/
#if !defined(U64)
float xBoudingSphereRadius;
MTH3D_tdstVector xBoudingSphereCenter;
#endif
/*EVL*/
} GEO_tdstGeometricObject ;
/*
=======================================================================================
Functions
=======================================================================================
*/
extern CPA_EXPORT GEO_tdstGeometricObject *
GEO_xDuplicateVisualObject ( GEO_tdstGeometricObject *p_stObj );
extern CPA_EXPORT void
GEO_xDeleteObject ( GEO_tdstGeometricObject *p_stObj );
extern CPA_EXPORT void
GEO_xComputeNormalWeightedBySurf
( MTH3D_tdstVector *p_stPResult,
MTH3D_tdstVector *p_stPA,
MTH3D_tdstVector *p_stPB,
MTH3D_tdstVector *p_stPC ) ;
extern CPA_EXPORT void
GEO_xCreateObjectPointNormals ( GEO_tdstGeometricObject *p_stObj );
extern CPA_EXPORT void
GEO_xComputeObjectNormals ( GEO_tdstGeometricObject *p_stObj );
extern CPA_EXPORT void
GEO_xComputeObjectNormals2 ( GEO_tdstGeometricObject *p_stObj );
extern CPA_EXPORT void
GEO_xComputeObjectSphereBox ( GEO_tdstGeometricObject *p_stObj );
/* ********************************************************************************************/
/* NEW FUNCTIONS STARTS HERE*/
/* ********************************************************************************************/
extern CPA_EXPORT void
GEO_vCreateTMPGeometricObject ( ACP_tdxHandleOfObject *p_hObject ,
ACP_tdxIndex xNbPoints ,
ACP_tdxIndex xNbElements );
extern CPA_EXPORT void
GEO_vCreateGeometricObject ( ACP_tdxHandleOfObject *p_hObject ,
ACP_tdxIndex xNbPoints ,
ACP_tdxIndex xNbElements );
extern CPA_EXPORT ACP_tdxIndex
GEO_xGetGeometricObjectNumberOfPoints ( ACP_tdxHandleOfObject hObject );
extern CPA_EXPORT ACP_tdxIndex
GEO_xGetGeometricObjectNumberOfEdges ( ACP_tdxHandleOfObject hObject );
extern CPA_EXPORT void
GEO_vSetPointOfObject ( ACP_tdxHandleOfObject hObject ,
MTH3D_tdstVector *p_stPoint ,
ACP_tdxIndex xIndexOfPoint);
extern CPA_EXPORT void
GEO_vSetListOfPointsOfObject ( ACP_tdxHandleOfObject hObject ,
MTH3D_tdstVector *p_stPoint ,
ACP_tdxIndex xNbPoints ,
ACP_tdxIndex xIndexOfFirstPoint);
extern CPA_EXPORT void
GEO_vGetPointOfObject ( ACP_tdxHandleOfObject hObject ,
MTH3D_tdstVector *p_stPoint ,
ACP_tdxIndex xIndexOfPoint);
extern CPA_EXPORT void
GEO_vGetListOfPointsOfObject ( ACP_tdxHandleOfObject hObject ,
MTH3D_tdstVector *p_stPoint ,
ACP_tdxIndex xNbPoints ,
ACP_tdxIndex xIndexOfFirstPoint);
extern CPA_EXPORT void
GEO_vSetPointReceivedLightIntensityOfObject (
ACP_tdxHandleOfObject hObject ,
GEO_tdstColor *p_stColor ,
ACP_tdxIndex xIndexOfPoint);
extern CPA_EXPORT void
GEO_vGetPointReceivedLightIntensityOfObject (
ACP_tdxHandleOfObject hObject ,
GEO_tdstColor *p_xColor ,
ACP_tdxIndex xIndexOfPoint);
extern CPA_EXPORT void
GEO_vSetNormalOfPointOfObject (
ACP_tdxHandleOfObject hObject ,
MTH3D_tdstVector *p_stNormal ,
ACP_tdxIndex xIndexOfPoint);
extern CPA_EXPORT void
GEO_vGetNormalOfPointOfObject (
ACP_tdxHandleOfObject hObject ,
MTH3D_tdstVector *p_stNormal ,
ACP_tdxIndex xIndexOfPoint);
extern CPA_EXPORT void
GEO_xCreateObjectListOfEdges ( GEO_tdstGeometricObject *p_stObj );
extern CPA_EXPORT void
GEO_xComputeObjectListOfEdges ( GEO_tdstGeometricObject *p_stObj );
extern CPA_EXPORT long
GEO_lGetGeometricObjectNumberOfElements ( ACP_tdxHandleOfObject hObject );
extern CPA_EXPORT void
GEO_vResetGeometricObjectElements ( ACP_tdxHandleOfObject hObject ,
ACP_tdxHandleOfElement hElement );
extern CPA_EXPORT ACP_tdxHandleOfObject
GEO_xDuplicateGeometricObject( ACP_tdxHandleOfObject hObject ,
ACP_tdxIndex xNewNumberOfElement);
extern CPA_EXPORT ACP_tdxIndex
GEO_xGetElementType
(
ACP_tdxHandleOfObject hObject ,
ACP_tdxIndex xElement
);
extern CPA_EXPORT ACP_tdxIndex
GEO_xGetGeometricObjectNumberOfElements
(
ACP_tdxHandleOfObject hObject
);
extern CPA_EXPORT ACP_tdxIndex
GEO_xGetGeometricObjectNumberOfElementsMax
(
ACP_tdxHandleOfObject hObject
);
extern CPA_EXPORT void
GEO_xDuplicateGeometricObjectCommonData ( ACP_tdxHandleOfObject hObject1 ,
ACP_tdxHandleOfObject hObject2 ,
long lWhatIsDuplicate );
extern CPA_EXPORT long
GEO_bDuplicateGeometricObjectElement ( ACP_tdxHandleOfObject hObject1 ,
ACP_tdxHandleOfObject hObject2 ,
ACP_tdxHandleOfElement hElement ,
ACP_tdxHandleOfElement *p_xElementCounter);
extern CPA_EXPORT long
GEO_bCopyingGeometricObjectElement
(
ACP_tdxHandleOfObject hObject1 ,
ACP_tdxHandleOfObject hObject2 ,
ACP_tdxIndex xElementNumberInFirstObject ,
ACP_tdxIndex *p_xNewElementNumberInSecondObject
);
extern CPA_EXPORT void
GEO_vCreateObjectListOfPointsMaterial
(
ACP_tdxHandleOfObject hObject
);
extern CPA_EXPORT void
GEO_vComputeObjectListOfPointsMaterial
(
ACP_tdxHandleOfObject hObject
);
extern CPA_EXPORT void
GEO_vEndModifyObject(ACP_tdxHandleOfObject hObject);
extern CPA_EXPORT void
GEO_vEndCreateObject(ACP_tdxHandleOfObject hObject);
extern CPA_EXPORT void
GEO_vEndModifyObject2(ACP_tdxHandleOfObject hObject);
extern CPA_EXPORT void
GEO_vEndModifyGoThroughObject(ACP_tdxHandleOfObject hObject);
extern CPA_EXPORT void
GEO_vEndModifyObjectWithoutComputingNormal (ACP_tdxHandleOfObject hObject);
extern CPA_EXPORT void
GEO_vGetNormalOfGeometricObjectElement
(
ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xElementIndex,
ACP_tdxIndex xDataElementIndex,
MTH3D_tdstVector *p_stNormal
);
extern CPA_EXPORT ACP_tdxHandleOfMaterial
GEO_hGetMaterialOfGeometricObjectElement ( ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xElementIndex,
ACP_tdxIndex xDataElementIndex );
extern CPA_EXPORT GMT_tdxHandleToGameMaterial
GEO_fn_hGetGameMaterialOfGeometricObjectElement ( ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xElementIndex,
ACP_tdxIndex xDataElementIndex );
extern CPA_EXPORT ACP_tdxBool GEO_bEdgePartOfEdge ( ACP_tdxIndex xEdge1,
ACP_tdxIndex xEdge2,
ACP_tdxIndex xPoint1,
ACP_tdxIndex xPoint2 );
extern CPA_EXPORT void
GEO_vSetEdgeMaterial
(
ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xPoint1,
ACP_tdxIndex xPoint2,
GMT_tdxHandleToGameMaterial hMaterial
);
extern CPA_EXPORT void
GEO_vComputeElementMaterial
(
ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xElementIndex,
ACP_tdxIndex xDataElementIndex
);
extern CPA_EXPORT void
GEO_vDeleteGeometricObject ( ACP_tdxHandleOfObject *p_hObj );
/* fbolefeysot - 01/10/98*/
/* remove init values in GMT{*/
/*extern CPA_EXPORT void
GEO_vRecursiveReinitGamesMaterials ( ACP_tdxHandleOfObject *p_hObj );
*/
/*END fbolefeysot}*/
extern CPA_EXPORT ACP_tdxHandleOfObject GEO_fn_hTransformTableOfObjectInOneObjectForGAM(
ACP_tdxHandleOfObject _hGeoObj,
ACP_tdxHandleOfObject * a_hTableOfGeoObj,
ACP_tdxIndex xNbOfgEOoBJ);
extern CPA_EXPORT void GEO_fn_vClearObjectForGAM(ACP_tdxHandleOfObject _hGeoObj);
extern CPA_EXPORT void GEO_fn_vMoveFaceToFaceDescriptors( ACP_tdxHandleOfObject p_stObj, ACP_tdxIndex xElementIT, ACP_tdxIndex xFaceIT, ACP_tdxIndex *p_xElementFMD, ACP_tdxIndex *p_xFaceFMD);
extern CPA_EXPORT void GEO_fn_vMoveFaceDescriptorsToFace( ACP_tdxHandleOfObject p_stObj, ACP_tdxIndex xElementFMD, ACP_tdxIndex xFaceFMD, ACP_tdxIndex xElementIT, ACP_tdxIndex xFaceIT);
/*ANNECY CT 02/02/98{*/
extern CPA_EXPORT void GEO_vGetFaceSurfaceSpeed(
ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xElement,
ACP_tdxIndex xFace,
MTH3D_tdstVector * p_vSpeed);
/*ENDANNECY CT}*/
extern CPA_EXPORT void
GEO_vCreateObjectListOfParallelBox
(
ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xNumberOfParallelBoxes
);
extern CPA_EXPORT void
GEO_vComputeObjectListOfParallelBox
(
ACP_tdxHandleOfObject hObject
);
extern CPA_EXPORT ACP_tdxIndex
GEO_xGetGeometricObjectNumberOfParallelBox
(
ACP_tdxHandleOfObject hObject
);
extern CPA_EXPORT GEO_tdxHandleToParallelBox
GEO_hGetParallelBox
(
ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xParallelBox
);
extern CPA_EXPORT ACP_tdxIndex
GEO_xGetParallelBoxIndexOfElement
(
ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xIndexOfElement
);
extern CPA_EXPORT void
GEO_vSetParallelBoxIndexOfElement
(
ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xIndexOfElement,
ACP_tdxIndex xIndexOfParallelBox
);
/*JMD*/
extern CPA_EXPORT void GEO_vTurnLookAt ( GEO_tdstGeometricObject *p_stObj,
GLD_tdxHandleToViewportAttributes hVpt,
struct POS_stCompletePosition * p_stCurrentMatrix) ;
extern CPA_EXPORT ACP_tdxBool GEO_bIsLookAt (GEO_tdstGeometricObject *p_stObj) ;
/*JMD*/
/*
-----------------------------------------------------------------------------
PRIVATE FUNCTIONS DECLARATION:
Ex :
extern void MODULETAG_fn_vMyPrivateFunction(void);
Note : Private functions MUST appear ONLY in PRIVATE HEADER files (.h) in
your Src directory with source files (.c)
-----------------------------------------------------------------------------
*/
/* ANNECY MT 20/02/98 {*/
void
GEO_vComputeObjectParallelBox
(
ACP_tdxHandleOfObject hObject,
ACP_tdxIndex xParallelBox
);
/*ENDANNECY MT }*/
#ifdef __cplusplus
};
#endif /* __cplusplus */
#endif /* __GEO_GEOOBJ_H */