Files
FC1/CryCommon/AnimKey.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

223 lines
4.9 KiB
C++

////////////////////////////////////////////////////////////////////////////
//
// Crytek Engine Source File.
// Copyright (C), Crytek Studios, 2001.
// -------------------------------------------------------------------------
// File name: animkey.cpp
// Version: v1.00
// Created: 22/4/2002 by Timur.
// Compilers: Visual C++ 7.0
// Description:
// -------------------------------------------------------------------------
// History:
//
////////////////////////////////////////////////////////////////////////////
#ifndef __animkey_h__
#define __animkey_h__
#if _MSC_VER > 1000
#pragma once
#endif
struct ISound;
enum EAnimKeyFlags
{
//! This key is selected in track view.
AKEY_SELECTED = 0x01,
};
//! Interface to animation key.
//! Not real interface though...
//! No virtuals for optimization reason.
struct IKey
{
float time;
int flags;
// compare keys.
bool operator<( const IKey &key ) const { return time < key.time; }
bool operator==( const IKey &key ) const { return time == key.time; }
bool operator>( const IKey &key ) const { return time > key.time; }
bool operator<=( const IKey &key ) const { return time <= key.time; }
bool operator>=( const IKey &key ) const { return time >= key.time; }
bool operator!=( const IKey &key ) const { return time != key.time; }
protected:
//! Protect from direct instantiation of this class.
//! Only derived classes can be created,
IKey() :time(0),flags(0) {};
};
/** ITcbKey used in all TCB tracks.
*/
struct ITcbKey : public IKey
{
// Values.
float fval[4];
// Key controls.
float tens; //!< Key tension value.
float cont; //!< Key continuity value.
float bias; //!< Key bias value.
float easeto; //!< Key ease to value.
float easefrom; //!< Key ease from value.
//! Protect from direct instantiation of this class.
//! Only derived classes can be created,
ITcbKey() {
fval[0] = 0; fval[1] = 0; fval[2] = 0; fval[3] = 0;
tens = 0, cont = 0, bias = 0, easeto = 0, easefrom = 0;
};
template <class T>
void SetValue( const T& val ) { *((T*)fval) = val; };
template <class T>
void GetValue( T& val ) { val = *((T*)fval); };
void SetFloat( float val ) { SetValue(val); };
void SetVec3( const Vec3 &val ) { SetValue(val); };
void SetQuat( const Quat &val ) { SetValue(val); };
float GetFloat() const { return *((float*)fval); };
const Vec3& GetVec3() const { return *((Vec3*)fval); };
const Quat& GetQuat() const { return *((Quat*)fval); };
};
/** IEntityKey used in Entity track.
*/
struct IEventKey : public IKey
{
char event[64];
char animation[64];
float duration;
IEventKey()
{
event[0] = '\0'; // empty string.
animation[0] = '\0'; // empty string.
duration = 0;
}
};
/** ISelectKey used in Camera selection track or Scene node.
*/
struct ISelectKey : public IKey
{
char szSelection[128]; //!< Node name.
float fDuration;
ISelectKey()
{
fDuration = 0;
szSelection[0] = '\0'; // empty string.
}
};
/** ISoundKey used in sound track.
*/
struct ISoundKey : public IKey
{
char pszFilename[128];
unsigned char nVolume;
unsigned char nPan;
float inRadius;
float outRadius;
bool bStream; //!< Stream sound from disk.
bool b3DSound; //!< 3D or Stereo sound.
bool bLoop; //!< Loop sound.
float fDuration;
char description[32];
ISoundKey()
{
b3DSound = false;
inRadius = 10;
outRadius = 100;
bStream = false;
bLoop = false;
pszFilename[0]=0;
nVolume=255;
nPan=127;
fDuration=0.0f;
description[0] = 0;
}
};
/** ICharacterKey used in Character animation track.
*/
struct ICharacterKey : public IKey
{
char animation[64]; //!< Name of character animation.
float duration; //!< Duration in seconds of this animation.
float startTime; //!< Start time of this animtion (Offset from begining of animation).
float blendTime; //!< Blending time for this animation.
float speed; //!< Speed multiplier for this key.
bool bLoop; //!< True if animation must be looped.
bool bUnload; //!< Unload after sequence is finished
ICharacterKey() {
animation[0] = '\0'; duration = 0; blendTime = 0; startTime = 0; speed = 1;
bLoop = false;
bUnload = false;
}
};
/** IExprKey used in expression animation track.
*/
struct IExprKey : public IKey
{
IExprKey()
{
pszName[0]=0;
fAmp=1.0f;
fBlendIn=0.5f;
fHold=1.0f;
fBlendOut=0.5f;
}
char pszName[128]; //!< Name of morph-target
float fAmp;
float fBlendIn;
float fHold;
float fBlendOut;
};
/** IConsoleKey used in Console track, triggers console commands and variables.
*/
struct IConsoleKey : public IKey
{
char command[64];
IConsoleKey()
{
command[0] = '\0';
}
};
enum EMusicKeyType
{
eMusicKeyType_SetMood=0,
eMusicKeyType_VolumeRamp
};
/** IMusicKey used in music track.
*/
struct IMusicKey : public IKey
{
EMusicKeyType eType;
char szMood[64];
float fTime;
float fDuration;
char description[32];
IMusicKey()
{
eType=eMusicKeyType_SetMood;
szMood[0]=0;
fTime=0.0f;
fDuration=0.0f;
description[0]=0;
}
};
#endif // __animkey_h__