Brenta Engine 1.2
Loading...
Searching...
No Matches
particles.hpp
1// SPDX-License-Identifier: MIT
2// Author: Giovanni Santini
3// Mail: giovanni.santini@proton.me
4// Github: @San7o
5
6#pragma once
7
8#define MAX_PARTICLES 1000
9
10#include <brenta/camera.hpp>
11#include <brenta/texture.hpp>
12#include <brenta/vao.hpp>
13#include <glad/glad.h>
14#include <glm/glm.hpp>
15#include <glm/gtc/matrix_transform.hpp>
16#include <glm/gtc/type_ptr.hpp>
17#include <string>
18#include <vector>
19
20namespace brenta
21{
22
32{
33public:
34
35 glm::vec3 starting_position;
36 glm::vec3 starting_velocity;
37 glm::vec3 starting_spread;
38 float starting_time_to_live;
39 int num_particles;
40 float spawn_rate;
41 float scale;
57 int atlas_width;
58 int atlas_height;
59 int atlas_index;
64
65 struct config;
66 class builder;
67
68 static const config default_config;
69
71
77 void update_particles(float delta_time);
78 void render_particles();
79
80private:
81 camera *cam;
82};
83
85{
86 glm::vec3 starting_position;
87 glm::vec3 starting_velocity;
88 glm::vec3 starting_spread;
89 float starting_time_to_live;
90 int num_particles;
91 float spawn_rate;
92 float scale;
93 std::string atlas_path;
94 int atlas_width;
95 int atlas_height;
96 int atlas_index;
97 camera *cam;
98};
99
104{
105private:
106
107 particle_emitter::config conf = particle_emitter::default_config;
108
109public:
110 builder &starting_position(glm::vec3 starting_position);
111 builder &starting_velocity(glm::vec3 starting_velocity);
112 builder &starting_spread(glm::vec3 starting_spread);
113 builder &starting_time_to_live(float starting_time_to_live);
114 builder &num_particles(int num_particles);
115 builder &spawn_rate(float spawn_rate);
116 builder &scale(float scale);
117 builder &atlas_path(std::string atlas_path);
118 builder &atlas_width(int atlas_width);
119 builder &atlas_height(int atlas_height);
120 builder &atlas_index(int atlas_index);
121 builder &with_camera(camera *cam);
122
123 particle_emitter build();
124};
125
126} // namespace brenta
The Camera class.
Definition camera.hpp:81
Builder pattern for ParticleEmitter.
Particle Emitter class.
Definition particles.hpp:32
int current
Current fbo index.
Definition particles.hpp:52
types::vao vao
Vertex array object.
Definition particles.hpp:63
types::buffer fbo[2]
Feddback buffer objects.
Definition particles.hpp:48
void update_particles(float delta_time)
Update the particles.
Definition particles.cpp:92
texture atlas
Atlas texture.
Definition particles.hpp:56
Texture class.
Definition texture.hpp:20
Buffer wrapper around OpenGL buffer objects.
Definition buffer.hpp:23
Vertex Array Object (VAO)
Definition vao.hpp:23