Add delta time into particle system updates

Only update the callbacks to use it
scene_man
En Yi 2024-04-24 21:06:57 +08:00
parent 0a3f56f730
commit c76ceba9bf
4 changed files with 18 additions and 18 deletions

View File

@ -163,7 +163,7 @@ void update_particle_system(ParticleSystem_t* system, float delta_time)
if (emitter->emitter_update_func != NULL && emitter->active) if (emitter->emitter_update_func != NULL && emitter->active)
{ {
emitter->active = emitter->emitter_update_func(emitter); emitter->active = emitter->emitter_update_func(emitter, delta_time);
} }
for (uint32_t i = 0; i < emitter->n_particles; ++i) for (uint32_t i = 0; i < emitter->n_particles; ++i)
@ -175,7 +175,7 @@ void update_particle_system(ParticleSystem_t* system, float delta_time)
{ {
if (emitter->update_func != NULL) if (emitter->update_func != NULL)
{ {
emitter->update_func(emitter->particles + i, emitter->user_data); emitter->update_func(emitter->particles + i, emitter->user_data, delta_time);
} }
} }

View File

@ -29,8 +29,8 @@ typedef struct Particle
typedef struct ParticleEmitter ParticleEmitter_t; typedef struct ParticleEmitter ParticleEmitter_t;
typedef void (*particle_update_func_t)(Particle_t* part, void* user_data); typedef void (*particle_update_func_t)(Particle_t* part, void* user_data, float delta_time);
typedef bool (*emitter_check_func_t)(const ParticleEmitter_t* emitter); typedef bool (*emitter_check_func_t)(const ParticleEmitter_t* emitter, float delta_time);
typedef struct EmitterConfig typedef struct EmitterConfig
{ {

View File

@ -6,9 +6,9 @@
#include "constants.h" #include "constants.h"
static const Vector2 GRAVITY = {0, GRAV_ACCEL}; static const Vector2 GRAVITY = {0, GRAV_ACCEL};
void simple_particle_system_update(Particle_t* part, void* user_data) void simple_particle_system_update(Particle_t* part, void* user_data, float delta_time)
{ {
float delta_time = *(float*)user_data; // TODO: Will need to think about delta time handling (void)user_data;
part->rotation += part->angular_vel; part->rotation += part->angular_vel;
part->velocity = part->velocity =
@ -44,7 +44,7 @@ void simple_particle_system_update(Particle_t* part, void* user_data)
} }
} }
static bool check_mouse_click(const ParticleEmitter_t* emitter) static bool check_mouse_click(const ParticleEmitter_t* emitter, float delta_time)
{ {
return IsMouseButtonDown(MOUSE_RIGHT_BUTTON); return IsMouseButtonDown(MOUSE_RIGHT_BUTTON);
} }
@ -108,7 +108,7 @@ int main(void)
.update_func = &simple_particle_system_update, .update_func = &simple_particle_system_update,
.emitter_update_func = &check_mouse_click, .emitter_update_func = &check_mouse_click,
.spr = (tex.width == 0) ? NULL : &spr, .spr = (tex.width == 0) ? NULL : &spr,
.user_data = &delta_time, .user_data = NULL,
}; };
bool key_press = false; bool key_press = false;

View File

@ -6,9 +6,9 @@
#include "constants.h" #include "constants.h"
#include <stdio.h> #include <stdio.h>
void simple_particle_system_update(Particle_t* part, void* user_data); void simple_particle_system_update(Particle_t* part, void* user_data, float delta_time);
void floating_particle_system_update(Particle_t* part, void* user_data); void floating_particle_system_update(Particle_t* part, void* user_data, float delta_time);
bool check_in_water(const ParticleEmitter_t* emitter); bool check_in_water(const ParticleEmitter_t* emitter, float delta_time);
static const Vector2 GRAVITY = {0, GRAV_ACCEL}; static const Vector2 GRAVITY = {0, GRAV_ACCEL};
static const Vector2 UPTHRUST = {0, -GRAV_ACCEL * 1.1}; static const Vector2 UPTHRUST = {0, -GRAV_ACCEL * 1.1};
@ -2158,19 +2158,20 @@ static inline bool is_point_in_water(Vector2 pos, TileGrid_t tilemap)
); );
} }
bool check_in_water(const ParticleEmitter_t* emitter) bool check_in_water(const ParticleEmitter_t* emitter, float delta_time)
{ {
(void)delta_time;
LevelScene_t* scene = (LevelScene_t*)emitter->user_data; LevelScene_t* scene = (LevelScene_t*)emitter->user_data;
TileGrid_t tilemap = scene->data.tilemap; TileGrid_t tilemap = scene->data.tilemap;
return is_point_in_water(emitter->position, tilemap); return is_point_in_water(emitter->position, tilemap);
} }
void simple_particle_system_update(Particle_t* part, void* user_data) void simple_particle_system_update(Particle_t* part, void* user_data, float delta_time)
{ {
LevelScene_t* scene = (LevelScene_t*)user_data; LevelScene_t* scene = (LevelScene_t*)user_data;
TileGrid_t tilemap = scene->data.tilemap; TileGrid_t tilemap = scene->data.tilemap;
float delta_time = scene->scene.delta_time;
part->velocity = part->velocity =
Vector2Add( Vector2Add(
part->velocity, part->velocity,
@ -2208,12 +2209,11 @@ void simple_particle_system_update(Particle_t* part, void* user_data)
} }
} }
void simple_float_particle_system_update(Particle_t* part, void* user_data) void simple_float_particle_system_update(Particle_t* part, void* user_data, float delta_time)
{ {
LevelScene_t* scene = (LevelScene_t*)user_data; LevelScene_t* scene = (LevelScene_t*)user_data;
TileGrid_t tilemap = scene->data.tilemap; TileGrid_t tilemap = scene->data.tilemap;
float delta_time = scene->scene.delta_time;
part->position = Vector2Add( part->position = Vector2Add(
part->position, part->position,
Vector2Scale(part->velocity, delta_time) Vector2Scale(part->velocity, delta_time)
@ -2236,9 +2236,9 @@ void simple_float_particle_system_update(Particle_t* part, void* user_data)
} }
} }
void floating_particle_system_update(Particle_t* part, void* user_data) void floating_particle_system_update(Particle_t* part, void* user_data, float delta_time)
{ {
simple_float_particle_system_update(part, user_data); simple_float_particle_system_update(part, user_data, delta_time);
LevelScene_t* scene = (LevelScene_t*)user_data; LevelScene_t* scene = (LevelScene_t*)user_data;
TileGrid_t tilemap = scene->data.tilemap; TileGrid_t tilemap = scene->data.tilemap;