mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-04-04 16:45:45 -05:00
48 lines
1.3 KiB
C
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
|