re3/rwsdk/include/d3d8/rpmorph.h

139 lines
4.7 KiB
C

/******************************************/
/* */
/* RenderWare(TM) Graphics Library */
/* */
/******************************************/
/*
* This file is a product of Criterion Software Ltd.
*
* This file is provided as is with no warranties of any kind and is
* provided without any obligation on Criterion Software Ltd.
* or Canon Inc. to assist in its use or modification.
*
* Criterion Software Ltd. and Canon Inc. will not, under any
* circumstances, be liable for any lost revenue or other damages
* arising from the use of this file.
*
* Copyright (c) 1998. Criterion Software Ltd.
* All Rights Reserved.
*/
/****************************************************************************
*
* Morph animation controller
* Copyright (C) 1998 Criterion Technologies
*
* Module : rpmorph.h
*
* Purpose : Functions for controlling morph target animation
*
****************************************************************************/
#ifndef RPMORPH_H
#define RPMORPH_H
/**
* \defgroup rpmorph RpMorph
* \ingroup rpplugin
*
* Morphing Plugin for RenderWare Graphics.
*/
/****************************************************************************
Includes
*/
#include "rwcore.h"
#include "rpworld.h"
#include "rpmorph.rpe" /* automatically generated header file */
/****************************************************************************
Global Types
*/
typedef struct RpMorphInterpolator RpMorphInterpolator;
/**
* \ingroup rpmorph
* \struct RpMorphInterpolator
* structure describing morph interpolator
*/
struct RpMorphInterpolator
{
RwInt32 flags; /**< flags */
RwInt16 startMorphTarget; /**< startMorphTarget */
RwInt16 endMorphTarget; /**< endMorphTarget */
RwReal time; /**< time */
RwReal recipTime; /**< recipTime */
RpMorphInterpolator *next; /**< next */
};
/* Morph Animation */
/**
* \ingroup rpmorph
* \typedef RpMorphGeometryCallBack
* This is the callback function supplied to \ref RpMorphGeometrySetCallBack
* and returned from \ref RpMorphGeometryGetCallBack.
* The supplied function will be passed a pointer to the geometry's parent atomic,
* and the position of the current interpolator.
* The function will only be called when the position of the geometry's current
* interpolator moves out of the current range.
*
* \param atomic Pointer to the geometry's parent atomic.
* \param position Value of the current interpolator.
*
* \return
*
* \see RpMorphGeometrySetCallBack
* \see RpMorphGeometryGetCallBack
*/
typedef RwReal (*RpMorphGeometryCallBack)(RpAtomic *atomic, RwReal position);
/****************************************************************************
Function prototypes
*/
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
extern RwBool RpMorphPluginAttach(void);
/* Morph Animation */
extern RpGeometry *RpMorphGeometryCreateInterpolators(RpGeometry *geometry, RwInt32 numInterps);
extern RpGeometry *RpMorphGeometrySetInterpolator(RpGeometry *geometry,
RwInt32 interpNum,
RwInt32 startKey, RwInt32 endKey, RwReal time);
extern RpGeometry *RpMorphGeometrySetNextInterpolator(RpGeometry *geometry,
RwInt32 interpNum, RwInt32 interpNumNext);
extern RpGeometry *RpMorphGeometrySetCallBack(RpGeometry *geometry, RpMorphGeometryCallBack animCB);
extern RpMorphGeometryCallBack RpMorphGeometryGetCallBack(const RpGeometry *geometry);
extern RpAtomic *RpMorphAtomicSetCurrentInterpolator(RpAtomic *atomic, RwInt32 interpNum);
extern RwInt32 RpMorphAtomicGetCurrentInterpolator(RpAtomic *atomic);
extern RpMorphInterpolator *RpMorphGeometryGetInterpolator(RpGeometry *geometry, RwInt32 interpNum);
extern RpAtomic *RpMorphAtomicSetTime(RpAtomic *atomic, RwReal time);
extern RpAtomic *RpMorphAtomicAddTime(RpAtomic *atomic, RwReal time);
/* LEGACY-SUPPORT version: */
extern RpMorphInterpolator *_rpMorphAtomicGetInterpolator(RpAtomic *atomic, RwInt32 interpNum);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#define RpMorphAtomicGetInterpolator(_atomic, _interpNum) \
_rpMorphAtomicGetInterpolator(_atomic, _interpNum)
#endif /* RPMORPH_H */