127 lines
5.2 KiB
C
127 lines
5.2 KiB
C
|
|
/**********************************************************
|
|
* *
|
|
* Morphing *
|
|
* *
|
|
* This file is the public file of the Morphing module *
|
|
* *
|
|
* Author : Ubi China - Alexis Vaisse *
|
|
* *
|
|
**********************************************************/
|
|
|
|
|
|
#ifndef __MOR_MORPH_H__
|
|
#define __MOR_MORPH_H__
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* AR980213 DONT INCLUDE HEADER FILES INTO PUBLIC HEADERS !!!*/
|
|
|
|
/* Constant for the morphing type */
|
|
|
|
#define MORPH_STOPATEND 1 /* 'One-way' morphing and then stop the morphing (the original object in the channel is restored)*/
|
|
#define MORPH_WAITATEND 2 /* 'One-way' morphing but the 'end' physical object stays in the channel until the 'StopMorph' function is called*/
|
|
#define MORPH_ROLLBACKATEND 3 /* 'loop' morphing : from 'start' to 'end' and 'end' to 'start' until the 'StopMorph' function is called*/
|
|
#define MORPH_WAITATEND_ANIM 4 /* Wait at end and controlled by the anim player */
|
|
|
|
/* Definition of a list which will contains one element for each object currently morphed */
|
|
|
|
#define MAX_MORPH_TASKS 50 /* 50 objects can morph simultaneously*/
|
|
|
|
/* AR980414 : STRUCTURE DEFINED INTO THE SPECIFIC FILES*/
|
|
#include "MOR/Specif/morph.h"
|
|
|
|
/* Alloc/free Macros */
|
|
|
|
#define MOR_M_pvMalloc(Var,cast,Size) (Var) = (cast) TMP_M_p_Malloc(Size)
|
|
#define MOR_M_Free(Var) TMP_M_Free(Var)
|
|
|
|
/*************************************/
|
|
/* Public functions */
|
|
/*************************************/
|
|
|
|
/* Begin a morphing task (will be called by the AI module)*/
|
|
ACP_tdxIndex MOR_fn_xPrepareMorph (HIE_tdxHandleToSuperObject _hActorSuperObject ,
|
|
ACP_tdxIndex _xStartIndexInObjectTable , ACP_tdxIndex _xEndIndexInObjectTable ,
|
|
int _iNbMillisecond , int _iStart , int _iEnd ,
|
|
unsigned char _ucMorphType , ACP_tdxIndex _xChannelIndex);
|
|
|
|
/* End a morphing task (will be called by the AI module)*/
|
|
ACP_tdxIndex MOR_fn_xStopMorph (HIE_tdxHandleToSuperObject _hActorSuperObject , ACP_tdxIndex _xChannelNumber);
|
|
|
|
/* Morph an object (will be called by the AI module)*/
|
|
ACP_tdxIndex MOR_fn_xMorphing (HIE_tdxHandleToSuperObject _hActorSuperObject ,
|
|
ACP_tdxIndex _xStartIndexInObjectTable , ACP_tdxIndex _xEndIndexInObjectTable ,
|
|
int _iRatio , ACP_tdxIndex _xChannelIndex);
|
|
|
|
/* Initialization of the Morphing module*/
|
|
#ifndef U64
|
|
void MOR_fn_vFirstInitMorphTaskList();
|
|
#else
|
|
void MOR_fn_vFirstInitMorphTaskList(unsigned short _uwNbMorphTasks,
|
|
unsigned short _uwNbMorphElements,
|
|
unsigned short _uwNbMorphPoints,
|
|
unsigned short _uwQuality);
|
|
#endif
|
|
|
|
/* Desinitialization of the Morphing module*/
|
|
void MOR_fn_vLastDeinitMorphTaskList();
|
|
|
|
/* Call each frame*/
|
|
void MOR_fn_vMorphAddInMainLoop();
|
|
|
|
|
|
|
|
/*************************************/
|
|
/* Private functions */
|
|
/*************************************/
|
|
|
|
/* Make a copy of a geometric object*/
|
|
ACP_tdxHandleOfObject MOR_fn_xCopyGeometricObjectForMorph (GEO_tdstGeometricObject * _pGeometricObjectToCopy);
|
|
|
|
/* Delete a geometric object*/
|
|
void MOR_fn_vDeleteGeometricObject (ACP_tdxHandleOfObject * _pGeometricObject);
|
|
|
|
/* Delete a physical object*/
|
|
void MOR_fn_vDeletePhysicalObject (PO_tdxHandleToPhysicalObject _pPhysicalObject);
|
|
|
|
/* Clean one element of the list*/
|
|
void MOR_fn_vCleanMorph (MOR_tdstMorphStruct * _mp);
|
|
|
|
/* Clean all elements of the list*/
|
|
void MOR_fn_vRemoveAllMorphedObjects (void);
|
|
|
|
/* Return TRUE if the object in the given channel of the given actor is morphing*/
|
|
ACP_tdxBool MOR_fn_bIsChannelMorphed (HIE_tdxHandleToSuperObject _hActorSuperObject , ACP_tdxIndex _xChannelIndex);
|
|
|
|
/* Recursiv function to remove and replace an object in the hierarchy*/
|
|
ACP_tdxBool MOR_fn_bRemoveMorphedObjectFromHierarchy (HIE_tdxHandleToSuperObject _hSuperObject ,
|
|
PO_tdxHandleToPhysicalObject _ptPhysicalObjectToRemove ,
|
|
PO_tdxHandleToPhysicalObject _ptPhysicalObjectToPut);
|
|
|
|
/* Return the morphed object of an element in the list*/
|
|
PO_tdxHandleToPhysicalObject MOR_fn_hGetMorphedObject (ACP_tdxIndex _xIndex);
|
|
|
|
/*----------------------------------------------------------------------------
|
|
|
|
-- Description : MOR_fn_vDoMorph
|
|
-- Execute the morphing operation corresponding to an index into the morph
|
|
-- task list
|
|
------------------------------------------------------------------------------
|
|
-- Methods : Use the morphto function
|
|
------------------------------------------------------------------------------
|
|
-- Input : _xIndex : Index of the task
|
|
-- Output :
|
|
----------------------------------------------------------------------------*/
|
|
void MOR_fn_vDoMorph(ACP_tdxIndex _xIndex);
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif
|
|
|
|
|
|
#endif /*__MOR_MORPH_H__*/
|