2#ifndef LIBSBX_PARTICLES_PARTICLE_EMITTER_HPP_
3#define LIBSBX_PARTICLES_PARTICLE_EMITTER_HPP_
7#include <libsbx/math/vector2.hpp>
8#include <libsbx/math/vector3.hpp>
10#include <libsbx/math/volume.hpp>
13#include <libsbx/graphics/images/image2d.hpp>
15namespace sbx::particles {
17enum class emitter_state : std::uint8_t {
24 emitter_state state{emitter_state::playing};
27 std::float_t duration{5.0f};
28 std::float_t elapsed{0.0f};
29 std::float_t emission_accumulator{0.0f};
31 std::uint32_t max_particles{10000};
32 std::float_t emission_rate{100.0f};
33 math::volume emission_shape{{-1.0f, 0.0f, -1.0f}, {1.0f, 0.0f, 1.0f}};
41 std::float_t drag{0.1f};
44 std::float_t end_size_scale{0.0f};
47 std::vector<graphics::image2d_handle> images{};
49 std::uint32_t burst_count{0};
52 state = emitter_state::playing;
55 auto pause() ->
void {
56 state = emitter_state::paused;
60 state = emitter_state::stopped;
62 emission_accumulator = 0.0f;
65 auto burst(std::uint32_t count) ->
void {
69 [[nodiscard]]
auto is_playing()
const ->
bool {
70 return state == emitter_state::playing;
73 [[nodiscard]]
auto is_paused()
const ->
bool {
74 return state == emitter_state::paused;
77 [[nodiscard]]
auto is_stopped()
const ->
bool {
78 return state == emitter_state::stopped;
81 [[nodiscard]]
auto is_finished()
const ->
bool {
82 return !loop && elapsed >= duration && state == emitter_state::stopped;
A vector in two-dimensional space.
Definition: vector2.hpp:28
Definition: vector3.hpp:23
Definition: volume.hpp:14
RGBA color value type.
Definition: color.hpp:48
RGBA color representation and utilities.
Definition: particle_emitter.hpp:23