You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1057 lines
30 KiB
C
1057 lines
30 KiB
C
/***************************************************************************
|
|
* *
|
|
* Module : rt2danim.h *
|
|
* *
|
|
* Purpose : . *
|
|
* *
|
|
**************************************************************************/
|
|
|
|
#ifndef RT2DANIM_H
|
|
#define RT2DANIM_H
|
|
|
|
/**
|
|
* \defgroup rt2danim Rt2dAnim
|
|
* \ingroup rttool
|
|
*
|
|
* A toolkit to coordinate the display, storage and manipulation of 2D
|
|
* animations.
|
|
*/
|
|
|
|
/**
|
|
* \defgroup rt2danimsub Rt2dAnim
|
|
* \ingroup rt2danim
|
|
*
|
|
* Animation functions
|
|
*/
|
|
|
|
/**
|
|
* \defgroup rt2dmaestro Rt2dMaestro
|
|
* \ingroup rt2danim
|
|
*
|
|
* Maestro functions
|
|
*/
|
|
|
|
/**
|
|
* \defgroup rt2dstringlabel Rt2dStringLabel
|
|
* \ingroup rt2danim
|
|
*
|
|
* String labels
|
|
*/
|
|
|
|
/**
|
|
* \defgroup rt2dmessage Rt2dMessage
|
|
* \ingroup rt2danim
|
|
*
|
|
* Messages
|
|
*/
|
|
|
|
/**
|
|
* \defgroup rt2dbutton Rt2dButton
|
|
* \ingroup rt2danim
|
|
*
|
|
* Buttons
|
|
*/
|
|
|
|
/**
|
|
* \defgroup rt2dcel Rt2dCel
|
|
* \ingroup rt2danim
|
|
*
|
|
* Cels
|
|
*/
|
|
|
|
/****************************************************************************
|
|
Includes
|
|
*/
|
|
|
|
#include <rwcore.h>
|
|
#include "rt2danim.rpe" /* automatically generated header file */
|
|
#include "rt2d.h"
|
|
#include "rpcriter.h"
|
|
/****************************************************************************
|
|
Defines
|
|
*/
|
|
|
|
/****************************************************************************
|
|
Global Types
|
|
*/
|
|
|
|
/* RWPUBLIC */
|
|
/****************************************************************************
|
|
Function prototypes
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif /* __cplusplus */
|
|
|
|
#define RT2D_BUTTON_MAX_STATES 4
|
|
#define RT2D_BUTTON_MAX_STATE_TRANSITIONS 32
|
|
|
|
/* Button state flags. */
|
|
|
|
#define rt2dANIMBUTTONSTATEPICKREGION 0x0001
|
|
#define rt2dANIMBUTTONSTATEUP 0x0002
|
|
#define rt2dANIMBUTTONSTATEDOWN 0x0004
|
|
#define rt2dANIMBUTTONSTATEOVER 0x0008
|
|
|
|
#define rt2dANIMBUTTONSTATEIDLETOOVERUP 0x0010
|
|
#define rt2dANIMBUTTONSTATEOVERUPTOIDLE 0x0020
|
|
#define rt2dANIMBUTTONSTATEOVERUPTOOVERDOWN 0x0040
|
|
#define rt2dANIMBUTTONSTATEOVERDOWNTOOVERUP 0x0080
|
|
#define rt2dANIMBUTTONSTATEOVERDOWNTOOUTDOWN 0x0100
|
|
#define rt2dANIMBUTTONSTATEOUTDOWNTOOVERDOWN 0x0200
|
|
#define rt2dANIMBUTTONSTATEOUTDOWNTOIDLE 0x0400
|
|
#define rt2dANIMBUTTONSTATEIDLETOOVERDOWN 0x0800
|
|
#define rt2dANIMBUTTONSTATEOVERDOWNTOIDLE 0x1000
|
|
|
|
|
|
/* Mask to separate trans state in state flag. */
|
|
#define rt2dANIMBUTTONSTATEMASK \
|
|
(rt2dANIMBUTTONSTATEPICKREGION | \
|
|
rt2dANIMBUTTONSTATEPICKUP | \
|
|
rt2dANIMBUTTONSTATEPICKDOWN | \
|
|
rt2dANIMBUTTONSTATEPICKOVER)
|
|
|
|
/* Basic enumerations */
|
|
|
|
/**
|
|
* \ingroup rt2dmessage
|
|
* \ref Rt2dMessageType, this type represents the different types of
|
|
* messages that are available.
|
|
*/
|
|
|
|
enum Rt2dMessageType
|
|
{
|
|
rt2dMESSAGETYPENULL = 0, /**< Empty message. */
|
|
rt2dMESSAGETYPEPLAY, /**< Play animation. */
|
|
rt2dMESSAGETYPESTOP, /**< Stop animation. */
|
|
rt2dMESSAGETYPENEXTFRAME, /**< Advance to next frame. */
|
|
rt2dMESSAGETYPEPREVFRAME, /**< Rewind to previouse frame. */
|
|
rt2dMESSAGETYPEGOTOFRAME, /**< Advance to frame by index. */
|
|
rt2dMESSAGETYPEGOTOLABEL, /**< Advance to frame by label. */
|
|
rt2dMESSAGETYPEGETURL, /**< Get URL */
|
|
rt2dMESSAGETYPEDOACTION, /* Perform action. */
|
|
rt2dMESSAGETYPEFOREIGN, /**< Application specific message. */
|
|
rt2dMESSAGETYPEMOUSEMOVETO, /**< Move mouse. */
|
|
rt2dMESSAGETYPEMOUSEBUTTONSTATE, /**< Mouse button up or down. */
|
|
rt2dMESSAGETYPESPECIALTELLTARGET, /* Change target while queueing */
|
|
rt2dMESSAGETYPEBUTTONBYLABEL, /**< Mouse button transition by label */
|
|
rt2dMESSAGETYPEFORCEENUMSIZEINT = RWFORCEENUMSIZEINT
|
|
};
|
|
|
|
typedef enum Rt2dMessageType Rt2dMessageType;
|
|
|
|
/**
|
|
* \ingroup rt2dstringlabel
|
|
* \ref Rt2dStringLabelType, this type represents the different types of
|
|
* object that can be labelled in the maestro's label table.
|
|
*/
|
|
|
|
enum Rt2dStringLabelType
|
|
{
|
|
rt2dANIMLABELTYPENONE = 0,
|
|
rt2dANIMLABELTYPEANIM, /**< Animation label. */
|
|
rt2dANIMLABELTYPEFRAME, /**< Frame or cel label. */
|
|
rt2dANIMLABELTYPEBUTTON, /**< Button label. */
|
|
rt2dANIMLABELTYPEFOREIGN, /**< Application specific. */
|
|
rt2dANIMLABELTYPESHAPE, /**< Shape label. */
|
|
rt2dANIMLABELTYPEURL, /**< URL label. */
|
|
rt2dANIMLABELTYPEENUMSIZEINT = RWFORCEENUMSIZEINT
|
|
};
|
|
|
|
typedef enum Rt2dStringLabelType Rt2dStringLabelType;
|
|
|
|
/* Basic animation structures */
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \typedef Rt2dAnimProps
|
|
* typedef for a structure describing the current state of a scene (opaque)
|
|
*/
|
|
typedef struct Rt2dAnimProps Rt2dAnimProps;
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \typedef Rt2dKeyFrameList
|
|
* typedef for a structure describing a list of keyframes
|
|
*/
|
|
typedef struct Rt2dKeyFrameList Rt2dKeyFrameList;
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \typedef Rt2dAnimObjectUpdate
|
|
* typedef for a structure describing a set of changes to a 2d object (opaque)
|
|
*/
|
|
typedef struct Rt2dAnimObjectUpdate Rt2dAnimObjectUpdate;
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \typedef Rt2dKeyFrameTransform
|
|
* typedef for a structure describing a transform change to a 2d object (opaque)
|
|
*/
|
|
typedef struct Rt2dKeyFrameTransform Rt2dKeyFrameTransform;
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \typedef Rt2dKeyFrameColor
|
|
* typedef for a structure describing a color change to a 2d object (opaque)
|
|
*/
|
|
typedef struct Rt2dKeyFrameColor Rt2dKeyFrameColor;
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \typedef Rt2dKeyFrameShow
|
|
* typedef for a structure describing a displayable or depth change to a 2d object (opaque)
|
|
*/
|
|
typedef struct Rt2dKeyFrameShow Rt2dKeyFrameShow;
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \typedef Rt2dKeyFrameMorph
|
|
* typedef for a structure describing a morph change to a 2d object (opaque)
|
|
*/
|
|
typedef struct Rt2dKeyFrameMorph Rt2dKeyFrameMorph;
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \typedef Rt2dAnim
|
|
* typedef for a structure describing a 2d animation (opaque)
|
|
*/
|
|
typedef struct Rt2dAnim Rt2dAnim;
|
|
|
|
/**
|
|
* \ingroup rt2dbutton
|
|
* \typedef Rt2dButton
|
|
* typedef for a structure describing a button (opaque)
|
|
*/
|
|
typedef struct Rt2dButton Rt2dButton;
|
|
|
|
/**
|
|
* \ingroup rt2dcel
|
|
* \typedef Rt2dCel
|
|
* typedef for a structure describing a cel (opaque)
|
|
*/
|
|
typedef struct Rt2dCel Rt2dCel;
|
|
|
|
/**
|
|
* \ingroup rt2dcel
|
|
* \typedef Rt2dCelList
|
|
* typedef for a structure describing a cel list (opaque)
|
|
*/
|
|
typedef struct Rt2dCelList Rt2dCelList;
|
|
|
|
/**
|
|
* \ingroup rt2dmaestro
|
|
* \typedef Rt2dMaestro
|
|
* typedef for a structure describing a maestro (opaque)
|
|
*/
|
|
typedef struct Rt2dMaestro Rt2dMaestro;
|
|
|
|
/**
|
|
* \ingroup rt2dmessage
|
|
* \typedef Rt2dMessage
|
|
* typedef for a structure describing a message (opaque)
|
|
*/
|
|
typedef struct Rt2dMessage Rt2dMessage;
|
|
|
|
typedef struct Rt2dMessageList Rt2dMessageList;
|
|
|
|
/**
|
|
* \ingroup rt2dstringlabel
|
|
* \typedef Rt2dStringLabel
|
|
* typedef for a structure describing a string label (opaque)
|
|
*/
|
|
typedef struct Rt2dStringLabel Rt2dStringLabel;
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \struct Rt2dKeyFrame
|
|
* structure describing a transforming action
|
|
*/
|
|
struct Rt2dKeyFrameTransform
|
|
{
|
|
RwMatrix matrix; /**< Transform to be applied */ /*64*/
|
|
};
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \struct Rt2dKeyFrameColor
|
|
* structure describing a color setting action
|
|
*/
|
|
struct Rt2dKeyFrameColor
|
|
{
|
|
RwRGBAReal color; /**< Color value for a keyframe */ /*16*/
|
|
};
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \struct Rt2dKeyFrameShow
|
|
* structure describing a show/hide action
|
|
*/
|
|
struct Rt2dKeyFrameShow
|
|
{
|
|
RwBool show; /**< visibility flag */ /*4*/
|
|
RwInt32 depth; /**< Depth order (reverse-z) */ /*4*/
|
|
RwUInt8 pad1[8]; /**< Alignment padding */ /*8*/
|
|
};
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \struct Rt2dKeyFrameMorph
|
|
* structure describing a morph action
|
|
*/
|
|
struct Rt2dKeyFrameMorph
|
|
{
|
|
Rt2dObject *source; /**< start object */ /*4*/
|
|
Rt2dObject *destination; /**< end object */ /*4*/
|
|
RwReal alpha; /**< interpolation value (0.0f-1.0f) */ /*4*/
|
|
RwInt32 pad1; /**< Alignment padding */ /*4*/
|
|
};
|
|
|
|
/**
|
|
* \ingroup rt2dmessage
|
|
* \struct Rt2dMessage
|
|
* Structure describing a message. A message must have a valid message type, (\ref Rt2dMessageType)
|
|
* and animation index. The animation index identifies which animation the message applies to.
|
|
* A -1 indicates the currently active animation. A message can have none, one or two additional
|
|
* \ref RwInt32 parameters, depending on the message type.
|
|
*/
|
|
struct Rt2dMessage
|
|
{
|
|
RwUInt32 messageType; /**< message identifier
|
|
(\ref Rt2dMessageType) */
|
|
RwInt32 index; /**< animation to apply any
|
|
actions to */
|
|
RwInt32 intParam1; /**< first param (message dependant) */
|
|
RwInt32 intParam2; /**< second param (message dependant) */
|
|
};
|
|
|
|
#define _rt2dMessageGetMessageTypeMacro(_message) \
|
|
((_message)->messageType);
|
|
|
|
#define _rt2dMessageSetMessageTypeMacro(_message, _messageType) \
|
|
((_message)->messageType = (_messageType));
|
|
|
|
#define _rt2dMessageGetIndexMacro(_message) \
|
|
((_message)->index);
|
|
|
|
#define _rt2dMessageSetIndexMacro(_message, _index) \
|
|
((_message)->index = (_index));
|
|
|
|
#define _rt2dMessageSetParamMacro(_message, _param1, _param2) \
|
|
MACRO_START \
|
|
{ \
|
|
((_message)->intParam1 = (_param1)); \
|
|
((_message)->intParam2 = (_param2)); \
|
|
} \
|
|
MACRO_STOP
|
|
|
|
#define _rt2dMessageGetParamMacro(_message, _param1, _param2) \
|
|
MACRO_START \
|
|
{ \
|
|
(*(_param1) = (_message)->intParam1); \
|
|
(*(_param2) = (_message)->intParam2); \
|
|
} \
|
|
MACRO_STOP
|
|
|
|
/**
|
|
* \ingroup rt2dstringlabel
|
|
* \struct Rt2dStringLabel
|
|
* structure containing label information. The enitityType identifies the type
|
|
* of the label. The label's name is stored as an index
|
|
* in common storage area. The entityType and name of the label are used as keys
|
|
* during a search. Additional internal and user data can be stored with the
|
|
* label.
|
|
*/
|
|
struct Rt2dStringLabel
|
|
{
|
|
RwUInt32 entityType; /**< type of the label
|
|
(\ref Rt2dStringLabelType) */
|
|
RwInt32 nameIndex; /**< index of name in internal data
|
|
area */
|
|
void *internalData; /**< internal data */
|
|
void *userData; /**< customizable data */
|
|
|
|
};
|
|
|
|
#define _rt2dStringLabelGetStringLabelTypeMacro(_strLabel) \
|
|
((_strLabel)->entityType);
|
|
|
|
#define _rt2dStringLabelSetStringLabelTypeMacro(_strLabel, _entityType) \
|
|
((_strLabel)->entityType = (_entityType));
|
|
|
|
#define _rt2dStringLabelGetNameIndexMacro(_strLabel) \
|
|
((_strLabel)->nameIndex);
|
|
|
|
#define _rt2dStringLabelSetNameIndexMacro(_strLabel, _index) \
|
|
((_strLabel)->nameIndex = (_index));
|
|
|
|
#define _rt2dStringLabelGetInternalDataMacro(_strLabel) \
|
|
((_strLabel)->internalData);
|
|
|
|
#define _rt2dStringLabelSetInternalDataMacro(_strLabel, _internalData) \
|
|
((_strLabel)->internalData = (_internalData));
|
|
|
|
#define _rt2dStringLabelGetUserDataMacro(_strLabel) \
|
|
((_strLabel)->userData);
|
|
|
|
#define _rt2dStringLabelSetUserDataMacro(_strLabel, _userData) \
|
|
((_strLabel)->userData = (_userData));
|
|
|
|
/**
|
|
* \ingroup rt2dcel
|
|
* \struct Rt2dCel
|
|
* structure containing cel information. The name of the cel is stored as an
|
|
* index into a label table. The buttons in the cel are stored as indices. These
|
|
* reference a list of buttons held by the cel's parent maestro. Any messages
|
|
* to be process when the cel is active is stored as index into the parent's
|
|
* maestro's message storage area.
|
|
*/
|
|
struct Rt2dCel
|
|
{
|
|
RwInt32 strLabelIndex; /**< Frame label */
|
|
RwInt32 celIndex; /**< Frame number */
|
|
RwSList *buttonIndices; /**< List of buttons active in
|
|
this frame */
|
|
RwInt32 messageListIndex; /**< Messages to be posted after
|
|
displaying this frame */
|
|
};
|
|
|
|
#define _rt2dCelGetStringLabelIndexMacro(_cel) \
|
|
((_cel)->strLabelIndex);
|
|
|
|
#define _rt2dCelSetStringLabelIndexMacro(_cel, _index) \
|
|
((_cel)->strLabelIndex = (_index));
|
|
|
|
#define _rt2dCelGetCelIndexMacro(_cel) \
|
|
((_cel)->celIndex);
|
|
|
|
#define _rt2dCelSetCelIndexMacro(_cel, _index) \
|
|
((_cel)->celIndex = (_index));
|
|
|
|
#define _rt2dCelGetMessageListIndexMacro(_cel) \
|
|
((_cel)->messageListIndex);
|
|
|
|
#define _rt2dCelSetMessageListIndexMacro(_cel, _index) \
|
|
((_cel)->messageListIndex = (_index));
|
|
|
|
/* Callback typedefs */
|
|
|
|
typedef Rt2dAnim *(*Rt2dAnimCallBack)(Rt2dAnim *object,
|
|
Rt2dAnimProps *props,
|
|
void *data);
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \typedef Rt2dKeyFrameListCallBack
|
|
* This typedef defines a callback function to apply to a frame list.
|
|
*
|
|
* \param anim Pointer to the animation
|
|
* \param props Pointer to the props that the animation acts upon
|
|
* \param keyframeList The key frame list
|
|
* \param keyframeListTime The key frame list time
|
|
* \param data User defined data
|
|
*/
|
|
typedef Rt2dKeyFrameList *(Rt2dKeyFrameListCallBack)(
|
|
Rt2dAnim *anim,
|
|
Rt2dAnimProps *props,
|
|
Rt2dKeyFrameList *keyframeList,
|
|
RwReal keyframeListTime,
|
|
void *data);
|
|
|
|
/**
|
|
* \ingroup rt2danimsub
|
|
* \typedef Rt2dAnimOnEndReachedCallBack
|
|
* This typedef defines a callback function called at the end of an animation.
|
|
*
|
|
* \param anim Pointer to the animation ending
|
|
* \param props Pointer to the props that the animation acts upon
|
|
* \param remainingDeltaTime Remaining time
|
|
*/
|
|
typedef Rt2dAnim *(*Rt2dAnimOnEndReachedCallBack)(Rt2dAnim *anim,
|
|
Rt2dAnimProps *props,
|
|
RwReal remainingDeltaTime);
|
|
|
|
/**
|
|
* \ingroup rt2dmaestro
|
|
* \typedef Rt2dMaestroAnimationsCallBack
|
|
* \ref Rt2dMaestroAnimationsCallBack represents the function called from
|
|
* \ref Rt2dMaestroForAllAnimations for all animations in the maestro.
|
|
* This function
|
|
* should return the current maestro to indicate success. The callback may
|
|
* return NULL to terminate further callbacks on the maestro.
|
|
*
|
|
* \param maestro Pointer to parent maestro.
|
|
* \param anim Pointer to the animation.
|
|
* \param props Pointer to the anim's props.
|
|
* \param pData Pointer to private data.
|
|
*
|
|
* \return Pointer to the maestro.
|
|
*/
|
|
|
|
typedef Rt2dMaestro *(*Rt2dMaestroAnimationsCallBack)
|
|
(Rt2dMaestro *maestro, Rt2dAnim *anim, Rt2dAnimProps *props, void * pData);
|
|
|
|
/**
|
|
* \ingroup rt2dmessage
|
|
* \typedef Rt2dMessageHandlerCallBack
|
|
* \ref Rt2dMessageHandlerCallBack represents the function called from
|
|
* \ref Rt2dMaestroProcessMessages for all messages in the maestro's
|
|
* process message queue. The maestro does not filter any messages. The
|
|
* handler may process or ignore any messages it is given.
|
|
*
|
|
* This function should return the current message to indicate success. The
|
|
* callback may return NULL to terminate further callbacks on the maestro.
|
|
*
|
|
* \param maestro Pointer to parent maestro.
|
|
* \param message Pointer to the message.
|
|
*
|
|
* \return Pointer to the message.
|
|
*/
|
|
|
|
typedef Rt2dMessage *(*Rt2dMessageHandlerCallBack)
|
|
(Rt2dMaestro *maestro, Rt2dMessage *message);
|
|
|
|
/* Message streaming call backs. */
|
|
|
|
typedef RwInt32
|
|
(*Rt2dMessageStreamGetSizeCallBack)
|
|
(Rt2dMaestro *maestro, Rt2dMessage *message);
|
|
|
|
typedef Rt2dMessage *
|
|
(*Rt2dMessageStreamReadCallBack)
|
|
(Rt2dMaestro *maestro, Rt2dMessage *message, RwStream *stream);
|
|
|
|
typedef Rt2dMessage *
|
|
(*Rt2dMessageStreamWriteCallBack)
|
|
(Rt2dMaestro *maestro, Rt2dMessage *message, RwStream *stream);
|
|
|
|
/*
|
|
* Data access macros.
|
|
*/
|
|
|
|
/*
|
|
* Rt2dAnim
|
|
*/
|
|
|
|
/* General */
|
|
|
|
extern Rt2dAnimOnEndReachedCallBack
|
|
Rt2dAnimSetOnEndReachedCallBack(Rt2dAnimOnEndReachedCallBack callback);
|
|
|
|
extern Rt2dAnimOnEndReachedCallBack
|
|
Rt2dAnimGetOnEndReachedCallBack(void);
|
|
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimOnEndReachedCallBackLoop(Rt2dAnim *anim, Rt2dAnimProps *props,
|
|
RwReal remainingDeltaTime);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimOnEndReachedCallBackStop(Rt2dAnim *anim, Rt2dAnimProps *props,
|
|
RwReal remainingDeltaTime);
|
|
|
|
/* Management */
|
|
extern Rt2dAnim *
|
|
Rt2dAnimCreate(void);
|
|
|
|
extern RwBool
|
|
Rt2dAnimDestroy(Rt2dAnim *anim, Rt2dAnimProps *props);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimLock(Rt2dAnim *anim, Rt2dAnimProps *props);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimUnlock(Rt2dAnim *anim, Rt2dAnimProps *props);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimAddKeyFrameList(Rt2dAnim *anim,
|
|
Rt2dKeyFrameList *keyframeList,
|
|
RwReal time);
|
|
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimCopy(Rt2dAnim *srcAnim, Rt2dAnimProps *srcProps);
|
|
|
|
/* Streaming */
|
|
extern RwUInt32
|
|
Rt2dAnimStreamGetSize( Rt2dAnim *anim,
|
|
Rt2dAnimProps *props);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimStreamRead(RwStream *stream,
|
|
Rt2dAnimProps *props);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimStreamReadTo(RwStream *dest,
|
|
RwStream *stream,
|
|
Rt2dAnimProps *props);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimStreamWrite(Rt2dAnim *anim, RwStream *stream,
|
|
Rt2dAnimProps *data);
|
|
|
|
/* Playback */
|
|
extern RwBool
|
|
Rt2dAnimIsInterpolated(Rt2dAnim *anim);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimSetInterpolate(Rt2dAnim *anim, RwBool interpolate);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimReset(Rt2dAnim *anim, Rt2dAnimProps *props);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimSetDeltaTimeScale(Rt2dAnim *anim, RwReal timeScale);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimAddDeltaTime(Rt2dAnim *anim, Rt2dAnimProps *props,
|
|
RwReal deltaTime);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimAddDeltaFrameIndex(Rt2dAnim *anim, Rt2dAnimProps *props,
|
|
RwInt32 deltaFrame);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimTimeUpdate(Rt2dAnim *anim, Rt2dAnimProps *props);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimGotoKeyFrameListByTime(Rt2dAnim *anim, Rt2dAnimProps *props,
|
|
RwReal time);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dAnimGotoKeyFrameListByIndex(Rt2dAnim *anim, Rt2dAnimProps *props,
|
|
RwInt32 frameIndex);
|
|
|
|
/* Utilities */
|
|
extern Rt2dAnim *
|
|
Rt2dAnimForAllKeyFrameLists(Rt2dAnim *anim, Rt2dKeyFrameListCallBack callBack,
|
|
Rt2dAnimProps *props, void *data);
|
|
|
|
/* Interrogation */
|
|
extern RwInt32
|
|
Rt2dAnimGetNumberOfKeyFrames(Rt2dAnim *anim);
|
|
|
|
extern Rt2dKeyFrameList *
|
|
Rt2dAnimGetKeyFrameListByIndex(Rt2dAnim *anim, RwUInt32 frameIndex);
|
|
|
|
extern RwReal
|
|
Rt2dAnimGetCurrentTime(Rt2dAnim *anim);
|
|
|
|
extern RwReal
|
|
Rt2dAnimGetFinalKeyFrameListTime(Rt2dAnim *anim);
|
|
|
|
extern RwInt32
|
|
Rt2dAnimGetPrevFrameIndex(Rt2dAnim *anim);
|
|
|
|
extern RwReal
|
|
Rt2dAnimGetPrevFrameTime(Rt2dAnim *anim);
|
|
|
|
extern RwInt32
|
|
Rt2dAnimGetNextFrameIndex(Rt2dAnim *anim);
|
|
|
|
extern RwReal
|
|
Rt2dAnimGetNextFrameTime(Rt2dAnim *anim);
|
|
|
|
/* KeyFrameList Management */
|
|
extern Rt2dKeyFrameList *
|
|
Rt2dKeyFrameListCreate(Rt2dAnimProps *props);
|
|
|
|
extern RwBool
|
|
Rt2dKeyFrameListDestroy(Rt2dKeyFrameList *keyframeList);
|
|
|
|
extern Rt2dKeyFrameList *
|
|
Rt2dKeyFrameListLock(Rt2dKeyFrameList *keyframeList, Rt2dAnimProps *props);
|
|
|
|
extern Rt2dKeyFrameList *
|
|
Rt2dKeyFrameListUnlock(Rt2dKeyFrameList *keyframeList,
|
|
Rt2dAnimProps *props);
|
|
|
|
extern Rt2dKeyFrameList*
|
|
Rt2dKeyFrameListAddUpdateObject(Rt2dKeyFrameList *keyframeList,
|
|
Rt2dAnimObjectUpdate *update);
|
|
|
|
/* KeyFrameList Streaming */
|
|
extern Rt2dKeyFrameList *
|
|
Rt2dKeyFrameListStreamRead(RwStream *stream);
|
|
|
|
extern RwUInt32
|
|
Rt2dKeyFrameListStreamGetSize(Rt2dKeyFrameList *keyframeList);
|
|
|
|
extern Rt2dKeyFrameList *
|
|
Rt2dKeyFrameListStreamWrite(Rt2dKeyFrameList *keyframeList,
|
|
RwStream *stream);
|
|
|
|
/* KeyFrameList Playback */
|
|
extern Rt2dKeyFrameList *
|
|
Rt2dKeyFrameListAdvance(Rt2dKeyFrameList *keyframeList,
|
|
Rt2dAnimProps *props);
|
|
|
|
extern Rt2dKeyFrameList *
|
|
Rt2dKeyFrameListApply(Rt2dKeyFrameList *keyframeList, Rt2dAnimProps *props,
|
|
RwReal alpha);
|
|
|
|
/* KeyFrameList edition object */
|
|
extern Rt2dAnimObjectUpdate *
|
|
Rt2dAnimObjectUpdateCreate(Rt2dObject *object);
|
|
|
|
extern RwBool
|
|
Rt2dAnimObjectUpdateDestroy(Rt2dAnimObjectUpdate *update);
|
|
|
|
extern Rt2dAnimObjectUpdate *
|
|
Rt2dAnimObjectUpdateClear(Rt2dAnimObjectUpdate *update);
|
|
|
|
extern Rt2dAnimObjectUpdate*
|
|
Rt2dAnimObjectUpdateSetTransform(Rt2dAnimObjectUpdate *update,
|
|
Rt2dKeyFrameTransform *transform);
|
|
|
|
extern Rt2dAnimObjectUpdate*
|
|
Rt2dAnimObjectUpdateSetColorOffs(Rt2dAnimObjectUpdate *update,
|
|
Rt2dKeyFrameColor *colorOffs);
|
|
|
|
extern Rt2dAnimObjectUpdate*
|
|
Rt2dAnimObjectUpdateSetColorMult(Rt2dAnimObjectUpdate *update,
|
|
Rt2dKeyFrameColor *colorMult);
|
|
|
|
extern Rt2dAnimObjectUpdate*
|
|
Rt2dAnimObjectUpdateSetShow(Rt2dAnimObjectUpdate *update,
|
|
Rt2dKeyFrameShow *show);
|
|
|
|
extern Rt2dAnimObjectUpdate*
|
|
Rt2dAnimObjectUpdateSetMorph(Rt2dAnimObjectUpdate *update,
|
|
Rt2dKeyFrameMorph *morph);
|
|
|
|
extern Rt2dAnimObjectUpdate *
|
|
Rt2dAnimObjectUpdateSetObject(Rt2dAnimObjectUpdate *update,
|
|
Rt2dObject *object);
|
|
|
|
/* Props management */
|
|
extern Rt2dAnimProps *
|
|
Rt2dAnimPropsCreate(Rt2dObject *scene);
|
|
|
|
extern RwBool
|
|
Rt2dAnimPropsDestroy(Rt2dAnimProps *props);
|
|
|
|
/*
|
|
* Rt2dButton
|
|
*/
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroAddButton(Rt2dMaestro *maestro, RwInt32 strLabelIdx, RwInt32 objectIdx,
|
|
RwUInt32 stateFlag, RwInt32 *actionListIdx,
|
|
RwInt32 *index);
|
|
|
|
/*
|
|
* Rt2dCel & Rt2dCelList
|
|
*/
|
|
|
|
extern Rt2dCel *
|
|
Rt2dCelCreate(Rt2dMaestro *maestro,
|
|
RwChar *name,
|
|
RwInt32 celIndex, RwInt32 messageListIndex);
|
|
|
|
extern Rt2dCelList *
|
|
Rt2dCelListCreate( void );
|
|
|
|
extern RwBool
|
|
Rt2dCelDestroy(Rt2dMaestro *maestro, Rt2dCel *cel);
|
|
|
|
extern Rt2dCel *
|
|
Rt2dCelAddButtonIndex(Rt2dCel * cel, RwInt32 buttonIndex, RwInt32 *index);
|
|
|
|
#if !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
|
|
|
|
#define Rt2dCelGetStringLabelIndex(_cel) \
|
|
_rt2dCelGetStringLabelIndexMacro((_cel));
|
|
|
|
#define Rt2dCelSetStringLabelIndex(_cel, _index) \
|
|
_rt2dCelSetStringLabelIndexMacro((_cel), (_index));
|
|
|
|
#define Rt2dCelGetCelIndex(_cel) \
|
|
_rt2dCelGetCelIndexMacro((_cel));
|
|
|
|
#define Rt2dCelSetCelIndex(_cel, _index) \
|
|
_rt2dCelSetCelIndexMacro((_cel), (_index));
|
|
|
|
#define Rt2dCelGetMessageListIndex(_cel) \
|
|
_rt2dCelGetMessageListIndexMacro((_cel));
|
|
|
|
#define Rt2dCelSetMessageListIndex(_cel, _index) \
|
|
_rt2dCelSetMessageListIndexMacro((_cel), (_index));
|
|
|
|
#else /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
|
|
|
|
extern RwInt32
|
|
Rt2dCelGetStringLabelIndex(Rt2dCel *cel);
|
|
|
|
extern void
|
|
Rt2dCelSetStringLabelIndex(Rt2dCel *cel, RwInt32 index);
|
|
|
|
extern RwInt32
|
|
Rt2dCelGetCelIndex(Rt2dCel *cel);
|
|
|
|
extern void
|
|
Rt2dCelSetCelIndex(Rt2dCel *cel, RwInt32 index);
|
|
|
|
extern RwInt32
|
|
Rt2dCelGetMessageListIndex(Rt2dCel *cel);
|
|
|
|
extern void
|
|
Rt2dCelSetMessageListIndex(Rt2dCel *cel, RwInt32 index);
|
|
|
|
#endif /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
|
|
|
|
extern RwBool
|
|
Rt2dCelListDestroy(Rt2dCelList *celList);
|
|
|
|
extern Rt2dCelList *
|
|
Rt2dCelListLock(Rt2dCelList *celList);
|
|
|
|
extern Rt2dCelList *
|
|
Rt2dCelListUnlock(Rt2dCelList * celList);
|
|
|
|
extern Rt2dCelList *
|
|
Rt2dCelListCopy(Rt2dCelList *srcCelList);
|
|
|
|
extern Rt2dCelList *
|
|
Rt2dCelListAddCel(Rt2dCelList *celList, Rt2dCel *cel, RwInt32 *index);
|
|
|
|
extern Rt2dCelList *
|
|
Rt2dCelListCelGetStringLabelIndex(Rt2dCelList *celList, RwInt32 celIndex, RwInt32 *index);
|
|
|
|
extern Rt2dCelList *
|
|
Rt2dCelListCelButtonGetDisplayVersion(Rt2dMaestro *maestro, Rt2dCelList * celList,
|
|
RwInt32 celIndex, RwInt32 celButtonIndex, RwInt32 *index);
|
|
|
|
/*
|
|
* Rt2dMaestro
|
|
*/
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroCreate(void);
|
|
|
|
extern RwBool
|
|
Rt2dMaestroDestroy(Rt2dMaestro *maestro);
|
|
|
|
extern RwUInt32
|
|
Rt2dMaestroStreamGetSize(Rt2dMaestro *maestro);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroStreamRead(Rt2dMaestro *maestro, RwStream *stream);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroStreamWrite(Rt2dMaestro *maestro, RwStream *stream);
|
|
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroForAllAnimations(Rt2dMaestro *maestro,
|
|
Rt2dMaestroAnimationsCallBack callback, void *data);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroForAllVisibleAnimations(Rt2dMaestro *maestro,
|
|
Rt2dMaestroAnimationsCallBack callback, void *data);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroAddAnimations(Rt2dMaestro *maestro,
|
|
RwInt32 parent, RwInt32 posInParentScene,
|
|
Rt2dAnim *anim, Rt2dAnimProps *animProps, Rt2dCelList *celList,
|
|
RwInt32 *index);
|
|
|
|
extern Rt2dAnim *
|
|
Rt2dMaestroGetAnimationsByIndex(Rt2dMaestro *maestro, RwInt32 index);
|
|
|
|
extern Rt2dAnimProps *
|
|
Rt2dMaestroGetAnimPropsByIndex(Rt2dMaestro *maestro, RwInt32 index);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroUpdateAnimations(Rt2dMaestro *maestro);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroAddDeltaTime(Rt2dMaestro *maestro, RwReal deltaTime);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroLock(Rt2dMaestro * maestro);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroUnlock(Rt2dMaestro *maestro);
|
|
|
|
extern Rt2dObject *
|
|
Rt2dMaestroGetScene(Rt2dMaestro *maestro);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroSetScene(Rt2dMaestro *maestro, Rt2dObject *scene);
|
|
|
|
extern Rt2dObject *
|
|
Rt2dMaestroGetAnimSceneByIndex(Rt2dMaestro *maestro, RwInt32 index);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroRender(Rt2dMaestro *maestro);
|
|
|
|
extern Rt2dBBox *
|
|
Rt2dMaestroGetBBox(Rt2dMaestro *maestro);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroSetBBox(Rt2dMaestro *maestro, Rt2dBBox *bbox);
|
|
|
|
|
|
/*
|
|
* Message & Message handlers.
|
|
*/
|
|
extern Rt2dMessageHandlerCallBack
|
|
Rt2dMaestroGetMessageHandler(Rt2dMaestro *maestro);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroSetMessageHandler(Rt2dMaestro *maestro, Rt2dMessageHandlerCallBack handler);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroAddMessageList(Rt2dMaestro *maestro,
|
|
Rt2dMessage *message, RwInt32 num, RwInt32 *index);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroPostMessages(Rt2dMaestro *maestro, Rt2dMessage *message, RwInt32 num);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroProcessMessages(Rt2dMaestro *maestro);
|
|
|
|
#if !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
|
|
|
|
#define Rt2dMessageGetMessageType(_message) \
|
|
_rt2dMessageGetMessageTypeMacro((_message));
|
|
|
|
#define Rt2dMessageSetMessageTypeMacro(_message, _messageType) \
|
|
_rt2dMessageSetMessageTypeMacro((_message), (_messageType));
|
|
|
|
#define Rt2dMessageGetIndex(_message) \
|
|
_rt2dMessageGetIndexMacro((_message));
|
|
|
|
#define Rt2dMessageSetIndex(_message, _index) \
|
|
_rt2dMessageSetIndexMarco((_message), (_index));
|
|
|
|
#define Rt2dMessageSetParam(_message, _param1, _param2) \
|
|
_rt2dMessageSetParamMacro((_message), (_param1), (_param2));
|
|
|
|
#define Rt2dMessageGetParam(_message, _param1, _param2) \
|
|
_rt2dMessageGetParamMacro((_message), (_param1), (_param2));
|
|
|
|
#else /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
|
|
|
|
extern Rt2dMessageType
|
|
Rt2dMessageGetMessageType(Rt2dMessage *message);
|
|
|
|
extern void
|
|
Rt2dMessageSetMessageType(Rt2dMessage *message, Rt2dMessageType messageType);
|
|
|
|
extern RwInt32
|
|
Rt2dMessageGetIndex(Rt2dMessage *message);
|
|
|
|
extern void
|
|
Rt2dMessageSetIndex(Rt2dMessage *message, RwInt32 index);
|
|
|
|
extern void
|
|
Rt2dMessageGetParam(Rt2dMessage *message, RwInt32 *param1, RwInt32 *param2);
|
|
|
|
extern void
|
|
Rt2dMessageSetParam(Rt2dMessage *message, RwInt32 param1, RwInt32 param2);
|
|
|
|
#endif /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
|
|
|
|
/*
|
|
* Default message handler.
|
|
*/
|
|
extern Rt2dMessage *
|
|
Rt2dMessageHandlerDefaultCallBack(Rt2dMaestro *maestro, Rt2dMessage *message);
|
|
|
|
|
|
/*
|
|
* Labels.
|
|
*/
|
|
extern Rt2dStringLabel *
|
|
Rt2dMaestroFindStringLabel(Rt2dMaestro *maestro,
|
|
Rt2dStringLabelType entityType, RwChar *lookupName,
|
|
RwInt32 *index);
|
|
|
|
extern Rt2dStringLabel *
|
|
Rt2dMaestroGetStringLabelByIndex(Rt2dMaestro *maestro, RwInt32 index);
|
|
|
|
extern Rt2dMaestro *
|
|
Rt2dMaestroAddStringLabel(Rt2dMaestro *maestro,
|
|
Rt2dStringLabelType entityType, RwChar *name,
|
|
void *internalData, RwInt32 *index);
|
|
|
|
extern const RwChar *
|
|
Rt2dMaestroGetStringLabelName(Rt2dMaestro *maestro,
|
|
Rt2dStringLabel *strLabel);
|
|
|
|
|
|
#if !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE))
|
|
|
|
#define Rt2dStringLabelGetStringLabelType(_strLabel) \
|
|
_rt2dStringLabelGetStringLabelTypeMacro((_strLabel));
|
|
|
|
#define Rt2dStringLabelSetStringLabelType(_strLabel, _entityType) \
|
|
_rt2dStringLabelSetStringLabelTypeMacro((_strLabel), (_entityType));
|
|
|
|
#define Rt2dStringLabelGetNameIndex(_strLabel) \
|
|
_rt2dStringLabelGetNameIndexMacro((_strLabel));
|
|
|
|
#define Rt2dStringLabelSetNameIndex(_strLabel, _index) \
|
|
_rt2dStringLabelSetNameIndexMacro((_strLabel), (_index));
|
|
|
|
#define Rt2dStringLabelGetInternalData(_strLabel) \
|
|
_rt2dStringLabelGetInternalDataMacro((_strLabel));
|
|
|
|
#define Rt2dStringLabelSetInternalData(_strLabel, _internalData) \
|
|
_rt2dStringLabelSetInternalDataMacro((_strLabel), (_internalData));
|
|
|
|
#define Rt2dStringLabelGetUserData(_strLabel) \
|
|
_rt2dStringLabelGetUserDataMacro((_strLabel));
|
|
|
|
#define Rt2dStringLabelSetUserData(_strLabel, _userData) \
|
|
_rt2dStringLabelSetUserDataMacro((_strLabel), (_userData));
|
|
|
|
#else /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
|
|
|
|
extern Rt2dStringLabelType
|
|
Rt2dStringLabelGetStringLabelType(Rt2dStringLabel *strLabel);
|
|
|
|
extern void
|
|
Rt2dStringLabelSetStringLabelType(Rt2dStringLabel *strLabel,
|
|
Rt2dStringLabelType entityType);
|
|
|
|
extern RwInt32
|
|
Rt2dStringLabelGetNameIndex(Rt2dStringLabel *strLabel);
|
|
|
|
extern void
|
|
Rt2dStringLabelSetNameIndex(Rt2dStringLabel *strLabel, RwInt32 index);
|
|
|
|
extern void *
|
|
Rt2dStringLabelGetInternalData(Rt2dStringLabel *strLabel);
|
|
|
|
extern void
|
|
Rt2dStringLabelSetInternalData(Rt2dStringLabel *strLabel, void *internalData);
|
|
|
|
extern void *
|
|
Rt2dStringLabelGetUserData(Rt2dStringLabel *strLabel);
|
|
|
|
extern void
|
|
Rt2dStringLabelSetUserData(Rt2dStringLabel *strLabel, void *userData);
|
|
|
|
#endif /* !(defined(RWDEBUG) || defined(RWSUPPRESSINLINE)) */
|
|
|
|
|
|
|
|
|
|
/*
|
|
* Cels & Cel Lists
|
|
*/
|
|
extern Rt2dCelList *
|
|
Rt2dMaestroGetCelListByIndex(Rt2dMaestro *maestro, RwInt32 index);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
/* RWPUBLICEND */
|
|
|
|
#endif /* RT2DANIM_H*/
|