TombEngine/TR5Main/Game/animation.h

97 lines
2.1 KiB
C
Raw Normal View History

#pragma once
2021-09-19 18:29:25 +03:00
#include "Specific/phd_global.h"
struct PHD_3DPOS;
struct PHD_VECTOR;
struct ITEM_INFO;
2021-09-19 18:29:25 +03:00
struct ANIM_FRAME
{
BOUNDING_BOX boundingBox;
short offsetX;
short offsetY;
short offsetZ;
std::vector<Quaternion> angles;
};
2021-12-22 12:17:59 +03:00
struct CHANGE_STRUCT
{
int TargetState;
2021-12-22 12:17:59 +03:00
int numberRanges;
int rangeIndex;
};
struct RANGE_STRUCT
{
int startFrame;
int endFrame;
int linkAnimNum;
int linkFrameNum;
};
2021-09-19 18:29:25 +03:00
struct ANIM_STRUCT
{
int framePtr;
2021-12-22 12:17:59 +03:00
int interpolation;
int ActiveState;
2021-09-19 18:29:25 +03:00
int velocity;
int acceleration;
int Xvelocity;
int Xacceleration;
2021-12-22 12:17:59 +03:00
int frameBase;
int frameEnd;
int jumpAnimNum;
int jumpFrameNum;
int numberChanges;
int changeIndex;
int numberCommands;
int commandIndex;
2021-09-19 18:29:25 +03:00
};
enum ANIMCOMMAND_TYPES
{
COMMAND_NULL = 0,
COMMAND_MOVE_ORIGIN,
COMMAND_JUMP_VELOCITY,
COMMAND_ATTACK_READY,
COMMAND_DEACTIVATE,
COMMAND_SOUND_FX,
COMMAND_EFFECT
};
2021-09-24 13:50:31 +03:00
struct BONE_MUTATOR
{
Vector3 Scale = Vector3::One;
Vector3 Offset = Vector3::Zero;
Vector3 Rotation = Vector3::Zero;
2021-09-24 14:22:47 +03:00
bool IsEmpty() { return (Scale == Vector3::One) && (Offset == Vector3::Zero) && (Rotation == Vector3::Zero); };
2021-09-24 13:50:31 +03:00
};
2022-02-08 01:26:59 +11:00
void AnimateLara(ITEM_INFO* item);
void AnimateItem(ITEM_INFO* item);
bool HasChange(ITEM_INFO* item, int targetState = -1);
bool TestLastFrame(ITEM_INFO* item, int animNumber = -1);
void TranslateItem(ITEM_INFO* item, int x, int y, int z);
2021-12-22 12:17:59 +03:00
void SetAnimation(ITEM_INFO* item, int animIndex, int frameToStart = 0);
int GetCurrentRelativeFrameNumber(ITEM_INFO* item);
2021-12-22 12:17:59 +03:00
int GetFrameNumber(ITEM_INFO* item, int frameToStart);
int GetFrameNumber(int objectID, int animNumber, int frameToStart);
int GetFrameCount(int animNumber);
int GetNextAnimState(ITEM_INFO* item);
2021-12-22 12:17:59 +03:00
int GetNextAnimState(int objectID, int animNumber);
2021-12-13 16:12:33 +11:00
bool GetChange(ITEM_INFO* item, ANIM_STRUCT* anim);
int GetFrame(ITEM_INFO* item, ANIM_FRAME* framePtr[], int* rate);
ANIM_FRAME* GetBestFrame(ITEM_INFO* item);
BOUNDING_BOX* GetBoundsAccurate(ITEM_INFO* item);
2022-02-08 01:26:59 +11:00
void GetLaraJointPosition(PHD_VECTOR* pos, int laraMeshIndex);
void GetJointAbsPosition(ITEM_INFO* item, PHD_VECTOR* vec, int joint);
void ClampRotation(PHD_3DPOS* pos, short angle, short rotation);
2022-02-08 01:26:59 +11:00
void DrawAnimatingItem(ITEM_INFO* item);