2021-09-16 05:06:03 +03:00
|
|
|
#pragma once
|
2021-09-19 18:29:25 +03:00
|
|
|
#include "Specific/phd_global.h"
|
2021-09-16 05:06:03 +03:00
|
|
|
|
|
|
|
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
|
|
|
|
{
|
2022-02-09 16:55:46 +11:00
|
|
|
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;
|
2022-02-09 16:55:46 +11:00
|
|
|
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
|
|
|
};
|
|
|
|
|
2021-09-16 05:06:03 +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);
|
2021-09-16 05:06:03 +03:00
|
|
|
void AnimateItem(ITEM_INFO* item);
|
2022-03-15 19:53:16 +11:00
|
|
|
|
|
|
|
bool HasChange(ITEM_INFO* item, int targetState = -1);
|
|
|
|
bool TestLastFrame(ITEM_INFO* item, int animNumber = -1);
|
|
|
|
|
2021-09-16 05:06:03 +03:00
|
|
|
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);
|
2022-03-15 19:53:16 +11:00
|
|
|
|
2022-02-03 19:29:07 +11:00
|
|
|
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);
|
2021-12-10 11:04:28 +03:00
|
|
|
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);
|
2021-09-16 05:06:03 +03:00
|
|
|
int GetFrame(ITEM_INFO* item, ANIM_FRAME* framePtr[], int* rate);
|
|
|
|
ANIM_FRAME* GetBestFrame(ITEM_INFO* item);
|
2022-03-15 19:53:16 +11:00
|
|
|
|
2021-09-16 05:06:03 +03:00
|
|
|
BOUNDING_BOX* GetBoundsAccurate(ITEM_INFO* item);
|
2022-02-08 01:26:59 +11:00
|
|
|
void GetLaraJointPosition(PHD_VECTOR* pos, int laraMeshIndex);
|
2021-09-16 05:06:03 +03:00
|
|
|
void GetJointAbsPosition(ITEM_INFO* item, PHD_VECTOR* vec, int joint);
|
2022-03-15 19:53:16 +11:00
|
|
|
|
|
|
|
void ClampRotation(PHD_3DPOS* pos, short angle, short rotation);
|
2021-09-16 05:06:03 +03:00
|
|
|
|
2022-02-08 01:26:59 +11:00
|
|
|
void DrawAnimatingItem(ITEM_INFO* item);
|