pokeplatinum/lib/spl/include/spl_particle.h

48 lines
1.3 KiB
C

#ifndef SPL_PARTICLE_H
#define SPL_PARTICLE_H
#include <nitro/gx/gxcommon.h>
#include <nitro/types.h>
typedef struct SPLParticle {
struct SPLParticle *next;
struct SPLParticle *prev;
VecFx32 position; // position of the particle, relative to the emitter
VecFx32 velocity;
u16 rotation;
s16 angularVelocity;
u16 lifeTime;
u16 age;
// These two values are essentially 1.0f / lifeTime (or 1.0f / loopTime), represented as an integer
// They are used to map between age/lifeTime and a [0, 255] range
// Mainly just to lower the amount of divisions needed in the update functions
u16 loopTimeFactor;
u16 lifeTimeFactor;
u8 texture; // Index of the current texture in the resource
// A value between 0 and 255 that is added to the life rate of the particle.
// This is used only for looping particles, so particles spawned at the same time
// don't have aren't all in sync (animation-wise)
u8 lifeRateOffset;
struct {
u16 baseAlpha : 5;
u16 animAlpha : 5;
u16 currentPolygonID : 6;
} visibility;
fx32 baseScale;
fx16 animScale;
GXRgb color;
VecFx32 emitterPos;
} SPLParticle;
typedef struct SPLParticleList {
SPLParticle *first;
int count;
SPLParticle *last;
} SPLParticleList;
#endif // SPL_PARTICLE_H