pxl8/src/pxl8_vfx.h

54 lines
1.8 KiB
C
Raw Normal View History

2025-08-13 15:04:49 -05:00
#pragma once
#include "pxl8_gfx.h"
#include "pxl8_types.h"
2025-08-13 15:04:49 -05:00
2025-10-04 04:13:48 -05:00
typedef struct pxl8_particles pxl8_particles;
2025-08-13 15:04:49 -05:00
typedef struct pxl8_particle {
2025-10-04 04:13:48 -05:00
f32 angle;
2025-08-13 15:04:49 -05:00
f32 ax, ay, az;
u32 color;
u32 end_color;
2025-10-04 04:13:48 -05:00
u8 flags;
f32 life;
f32 max_life;
2025-08-13 15:04:49 -05:00
f32 size;
f32 spin;
2025-10-04 04:13:48 -05:00
u32 start_color;
f32 vx, vy, vz;
f32 x, y, z;
2025-08-13 15:04:49 -05:00
} pxl8_particle;
2025-09-28 13:10:29 -05:00
typedef struct pxl8_raster_bar {
f32 amplitude;
2025-10-04 04:13:48 -05:00
f32 base_y;
2025-09-28 13:10:29 -05:00
u32 color;
u32 fade_color;
2025-10-04 04:13:48 -05:00
i32 height;
f32 phase;
f32 speed;
2025-09-28 13:10:29 -05:00
} pxl8_raster_bar;
2025-08-13 15:04:49 -05:00
2025-10-04 04:13:48 -05:00
pxl8_particles* pxl8_particles_create(u32 max_count);
void pxl8_particles_destroy(pxl8_particles* particles);
void pxl8_particles_clear(pxl8_particles* particles);
void pxl8_particles_emit(pxl8_particles* particles, u32 count);
void pxl8_particles_render(pxl8_particles* particles, pxl8_gfx* gfx);
void pxl8_particles_update(pxl8_particles* particles, f32 dt);
2025-08-13 15:04:49 -05:00
2025-10-04 04:13:48 -05:00
void pxl8_vfx_explosion(pxl8_particles* particles, i32 x, i32 y, u32 color, f32 force);
void pxl8_vfx_fire(pxl8_particles* particles, i32 x, i32 y, i32 width, u8 palette_start);
void pxl8_vfx_rain(pxl8_particles* particles, i32 width, f32 wind);
void pxl8_vfx_smoke(pxl8_particles* particles, i32 x, i32 y, u8 color);
void pxl8_vfx_snow(pxl8_particles* particles, i32 width, f32 wind);
void pxl8_vfx_sparks(pxl8_particles* particles, i32 x, i32 y, u32 color);
void pxl8_vfx_starfield(pxl8_particles* particles, f32 speed, f32 spread);
2025-09-28 13:10:29 -05:00
2025-10-04 04:13:48 -05:00
void pxl8_vfx_plasma(pxl8_gfx* ctx, f32 time, f32 scale1, f32 scale2, u8 palette_offset);
void pxl8_vfx_raster_bars(pxl8_gfx* ctx, pxl8_raster_bar* bars, u32 bar_count, f32 time);
void pxl8_vfx_rotozoom(pxl8_gfx* ctx, f32 angle, f32 zoom, i32 cx, i32 cy);
void pxl8_vfx_tunnel(pxl8_gfx* ctx, f32 time, f32 speed, f32 twist);
void pxl8_vfx_water_ripple(pxl8_gfx* ctx, f32* height_map, i32 drop_x, i32 drop_y, f32 damping);