1
0
mirror of https://github.com/zeldaret/oot.git synced 2024-09-21 12:54:51 +00:00
oot/include/z64curve.h
Dragorn421 4e55168eaa
Update ZAPD (#1569)
* git subrepo pull --force tools/ZAPD

subrepo:
  subdir:   "tools/ZAPD"
  merged:   "094e79734"
upstream:
  origin:   "https://github.com/zeldaret/ZAPD.git"
  branch:   "master"
  commit:   "094e79734"
git-subrepo:
  version:  "0.4.6"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "110b9eb"

* Add EnumData.xml where some names are now externalized

* Remove legacy typedefs for zapd, no longer needed!
2023-10-24 21:36:10 -04:00

63 lines
2.3 KiB
C

#ifndef Z64_CURVE_H
#define Z64_CURVE_H
#include "ultra64/ultratypes.h"
#include "z64math.h"
struct PlayState;
typedef struct {
/* 0x0 */ u16 flags; // Only the bottom two bits are used, although others are set in objects
/* 0x2 */ s16 abscissa; // knot input value
/* 0x4 */ s16 leftGradient; // left derivative at the point
/* 0x6 */ s16 rightGradient; // right derivative at the point
/* 0x8 */ f32 ordinate; // output value
} CurveInterpKnot; // size = 0xC
typedef struct {
/* 0x0 */ u8* knotCounts;
/* 0x4 */ CurveInterpKnot* interpolationData;
/* 0x8 */ s16* constantData;
/* 0xC */ s16 unk_0C; // Set but not used, always 1 in objects
/* 0xE */ s16 frameCount; // Not used, inferred from use in objects
} CurveAnimationHeader; // size = 0x10
typedef struct {
/* 0x0 */ u8 child;
/* 0x1 */ u8 sibling;
/* 0x4 */ Gfx* dList[2];
} SkelCurveLimb; // size = 0xC
typedef struct {
/* 0x0 */ SkelCurveLimb** limbs;
/* 0x4 */ u8 limbCount;
} CurveSkeletonHeader; // size = 0x8
typedef struct {
/* 0x00 */ u8 limbCount;
/* 0x04 */ SkelCurveLimb** skeleton;
/* 0x08 */ CurveAnimationHeader* animation;
/* 0x0C */ f32 unk_0C; // set but not used
/* 0x10 */ f32 endFrame;
/* 0x14 */ f32 playSpeed;
/* 0x18 */ f32 curFrame;
/* 0x1C */ s16 (*jointTable)[9];
} SkelCurve; // size = 0x20
typedef s32 (*OverrideCurveLimbDraw)(struct PlayState* play, SkelCurve* skelCuve, s32 limbIndex, void* thisx);
typedef void (*PostCurveLimbDraw)(struct PlayState* play, SkelCurve* skelCuve, s32 limbIndex, void* thisx);
f32 Curve_Interpolate(f32 x, CurveInterpKnot* knots, s32 knotCount);
void SkelCurve_Clear(SkelCurve* skelCurve);
s32 SkelCurve_Init(struct PlayState* play, SkelCurve* skelCurve, CurveSkeletonHeader* skeletonHeaderSeg,
CurveAnimationHeader* animation);
void SkelCurve_Destroy(struct PlayState* play, SkelCurve* skelCurve);
void SkelCurve_SetAnim(SkelCurve* skelCurve, CurveAnimationHeader* animation, f32 arg2, f32 endFrame, f32 curFrame,
f32 playSpeed);
s32 SkelCurve_Update(struct PlayState* play, SkelCurve* skelCurve);
void SkelCurve_Draw(Actor* actor, struct PlayState* play, SkelCurve* skelCurve, OverrideCurveLimbDraw overrideLimbDraw,
PostCurveLimbDraw postLimbDraw, s32 lod, void* data);
#endif