Tiny3D
Loading...
Searching...
No Matches
t3danim.h
Go to the documentation of this file.
1
6#ifndef TINY3D_T3DANIM_H
7#define TINY3D_T3DANIM_H
8
9#include "t3dmodel.h"
10#include "t3dskeleton.h"
11
12#ifdef __cplusplus
13extern "C"
14{
15#endif
16
17#define T3D_ANIM_TARGET_TRANSLATION 0
18#define T3D_ANIM_TARGET_SCALE_XYZ 1
19#define T3D_ANIM_TARGET_SCALE_S 2
20#define T3D_ANIM_TARGET_ROTATION 3
21
22typedef struct {
23 float timeStart;
24 float timeEnd;
25 int32_t* changedFlag; // flag to increment when target is changed
27
28typedef struct {
30 T3DQuat* targetQuat; // target to modify
31 T3DQuat kfCurr; // current keyframe value
32 T3DQuat kfNext; // next keyframe value
34
35typedef struct {
37 float* targetScalar;
38 float kfCurr;
39 float kfNext;
41
42typedef struct {
43 T3DChunkAnim *animRef;
44 T3DAnimTargetQuat *targetsQuat;
45 T3DAnimTargetScalar *targetsScalar;
46
47 float speed;
48 float time;
49
50 FILE *file;
51 int nextKfSize;
52 uint8_t isPlaying;
53 uint8_t isLooping;
54} T3DAnim;
55
62T3DAnim t3d_anim_create(const T3DModel *model, const char* name);
63
69void t3d_anim_attach(T3DAnim* anim, const T3DSkeleton* skeleton);
70
80void t3d_anim_attach_pos(T3DAnim* anim, uint32_t targetIdx, T3DVec3* target, int32_t *updateFlag);
81
91void t3d_anim_attach_rot(T3DAnim* anim, uint32_t targetIdx, T3DQuat* target, int32_t *updateFlag);
92
102void t3d_anim_attach_scale(T3DAnim* anim, uint32_t targetIdx, T3DVec3* target, int32_t *updateFlag);
103
109void t3d_anim_update(T3DAnim* anim, float deltaTime);
110
117void t3d_anim_set_time(T3DAnim* anim, float time);
118
125static float t3d_anim_get_time(const T3DAnim* anim) {
126 return anim->time;
127}
128
134static float t3d_anim_get_length(const T3DAnim* anim) {
135 return anim->animRef->duration;
136}
137
144inline static void t3d_anim_set_speed(T3DAnim* anim, float speed) {
145 anim->speed = speed < 0.0f ? 0.0f : speed;
146}
147
154inline static void t3d_anim_set_playing(T3DAnim* anim, bool isPlaying) {
155 anim->isPlaying = isPlaying;
156}
157
164inline static void t3d_anim_set_looping(T3DAnim* anim, bool loop) {
165 anim->isLooping = loop;
166}
167
172void t3d_anim_destroy(T3DAnim *anim);
173
174#ifdef __cplusplus
175}
176#endif
177
178#endif // TINY3D_T3DANIM_H
Definition t3danim.h:22
Definition t3danim.h:28
Definition t3danim.h:35
Definition t3danim.h:42
Definition t3dmodel.h:135
Definition t3dmodel.h:150
Definition t3dskeleton.h:33
static float t3d_anim_get_length(const T3DAnim *anim)
Definition t3danim.h:134
static void t3d_anim_set_playing(T3DAnim *anim, bool isPlaying)
Definition t3danim.h:154
void t3d_anim_attach(T3DAnim *anim, const T3DSkeleton *skeleton)
Definition t3danim.c:48
static float t3d_anim_get_time(const T3DAnim *anim)
Definition t3danim.h:125
T3DAnim t3d_anim_create(const T3DModel *model, const char *name)
Definition t3danim.c:19
static void t3d_anim_set_looping(T3DAnim *anim, bool loop)
Definition t3danim.h:164
void t3d_anim_set_time(T3DAnim *anim, float time)
Definition t3danim.c:219
void t3d_anim_update(T3DAnim *anim, float deltaTime)
Definition t3danim.c:170
void t3d_anim_destroy(T3DAnim *anim)
Definition t3danim.c:211
void t3d_anim_attach_rot(T3DAnim *anim, uint32_t targetIdx, T3DQuat *target, int32_t *updateFlag)
Definition t3danim.c:102
void t3d_anim_attach_scale(T3DAnim *anim, uint32_t targetIdx, T3DVec3 *target, int32_t *updateFlag)
Definition t3danim.c:98
static void t3d_anim_set_speed(T3DAnim *anim, float speed)
Definition t3danim.h:144
void t3d_anim_attach_pos(T3DAnim *anim, uint32_t targetIdx, T3DVec3 *target, int32_t *updateFlag)
Definition t3danim.c:94